Skip to main content

Python's Enum with extra powers to play nice with labels and choices fields

Project description

Choices Enum

https://img.shields.io/pypi/v/choicesenum.svg https://travis-ci.org/loggi/python-choicesenum.svg?branch=master Documentation Status

Python’s Enum with extra powers to play nice with labels and choices fields.

Installation

Install choicesenum using pip:

$ pip install choicesenum

Features

  • An ChoicesEnum that can be used to create constant groups.

  • ChoicesEnum can define labels to be used in choices fields.

  • Django fields included: EnumCharField and EnumIntegerField.

Usage examples

Example of HttpStatuses:

class HttpStatuses(ChoicesEnum):
    OK = 200
    BAD_REQUEST = 400
    UNAUTHORIZED = 401
    FORBIDDEN = 403

assert HttpStatuses.OK == 200
assert HttpStatuses.BAD_REQUEST == 400
assert HttpStatuses.UNAUTHORIZED == 401
assert HttpStatuses.FORBIDDEN == 403

assert HttpStatuses.OK.display == 'Ok'
assert HttpStatuses.BAD_REQUEST.display == 'Bad request'  # <- nice!
assert HttpStatuses.UNAUTHORIZED.display == 'Unauthorized'
assert HttpStatuses.FORBIDDEN.display == 'Forbidden'

Example of Colors:

from choicesenum import ChoicesEnum

class Colors(ChoicesEnum):
    # For fixed order in  py2.7, py3.4+ are ordered by default
    _order_ = 'RED GREEN BLUE'

    RED = '#f00', 'Vermelho'
    GREEN = '#0f0', 'Verde'
    BLUE = '#00f', 'Azul'

assert Colors.RED == '#f00'
assert Colors.GREEN == '#0f0'
assert Colors.BLUE == '#00f'

assert Colors.RED == Colors.RED
assert Colors.GREEN == Colors.GREEN
assert Colors.BLUE == Colors.BLUE

assert Colors.RED.display == 'Vermelho'
assert Colors.GREEN.display == 'Verde'
assert Colors.BLUE.display == 'Azul'

# choices
assert list(Colors.choices()) == [
    ('#f00', 'Vermelho'),
    ('#0f0', 'Verde'),
    ('#00f', 'Azul'),
]

# dynamic `is_<enum_item>` attrs
assert Colors.RED.is_red
assert Colors.GREEN.is_green
assert Colors.BLUE.is_blue

assert not Colors.RED.is_blue
assert not Colors.RED.is_green

Usage with the custom Django fields:

from django.db import models
from choicesenum.django.fields import EnumCharField

class ColorModel(models.Model):
    color = EnumCharField(
        max_length=100,
        enum=Colors,
        default=Colors.GREEN,
    )

instance = ColorModel()
assert instance.color ==  Colors.GREEN
assert instance.color.is_green is True
assert instance.color.value == Colors.GREEN.value
assert instance.color.display == Colors.GREEN.display

# the field value is always a `ChoicesEnum` item...
instance.color = '#f00'
assert instance.color == '#f00'
assert instance.color.value == '#f00'
assert instance.color.display == 'Vermelho'

# ...and can be used whenever the value is needed
assert u'Currrent color is {0} ({0.display})'.format(instance.color) ==\
       u'Currrent color is #f00 (Vermelho)'

Pay attention that the field will only accept valid values for the Enum in use, so if your field allow null, your enum should also:

from django.db import models
from choicesenum import ChoicesEnum
from choicesenum.django.fields import EnumIntegerField

class UserStatus(ChoicesEnum):
    UNDEFINED = None
    PENDING = 1
    ACTIVE = 2
    INACTIVE = 3
    DELETED = 4


class User(models.Model):
    status = EnumIntegerField(enum=UserStatus, null=True, )

instance = User()
assert instance.status.is_undefined is True
assert instance.status.value is None
assert instance.status == UserStatus.UNDEFINED
assert instance.status.display == 'Undefined'

# again...
instance.status = None
assert instance.status.is_undefined is True

History

0.1.3 (2017-08-28)

  • Fix sdist not including sub-modules (django contrib).

0.1.2 (2017-08-27)

  • README fixes and improvements.

0.1.0 (2017-08-27)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

choicesenum-0.1.3.tar.gz (18.8 kB view details)

Uploaded Source

Built Distribution

choicesenum-0.1.3-py2.py3-none-any.whl (8.4 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file choicesenum-0.1.3.tar.gz.

File metadata

  • Download URL: choicesenum-0.1.3.tar.gz
  • Upload date:
  • Size: 18.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for choicesenum-0.1.3.tar.gz
Algorithm Hash digest
SHA256 7366fb50ec35be3536ad60240e07ba6612cd88739d6723928002056626455539
MD5 e9fe0c94eaa8e9f2c800c53c3782a1e4
BLAKE2b-256 4575fe727a5868441cff239e934cd83ebc1905fb8666ee9e8628e6e1e25b6420

See more details on using hashes here.

File details

Details for the file choicesenum-0.1.3-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for choicesenum-0.1.3-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5ee68109a3dd6064e7e31a0b4fbd9b1aec0761facf49068041df81ae71344bbf
MD5 8890dc9558b84352fb976349086060de
BLAKE2b-256 2b51ecbf84debaa86f89fea452c3b4d934d0ab28cdf1eca2ab3338746c22e5fc

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page