Skip to main content

Elegant implementation of Enum which inherits from str or bytes

Project description

AnyStrEnum

Python 3.7 PyPi Package Version

Elegant implementation of Enum which inherits from str or bytes

As simple as this

from anystrenum import StrEnum

class Season(StrEnum):
    spring: str
    summer: str
    autumn: str
    winter: str

print(Season.summer)
print(isinstance(Season.summer, str))
# summer
# True

Features

  • Easy members assignment with type hinting (No need to use auto() or other stubs)

  • Automatic value generation with support of custom converters or separators

  • Method to filter members (contains, contained_in, startswith, endswith, etc.)

  • Custom str and bytes types support

Installation

$ pip install AnyStrEnum

Examples

Using custom words separator

To automatically replace all underscores (_) in names to something more suitable, use sep parameter:

from anystrenum import StrEnum

class Region(StrEnum, sep='-'):
    us_east_1: str
    us_west_1: str
    ca_central_1: str
    cn_northwest_1: str
    eu_central_1: str
    eu_west_1: str
    eu_north_2: str
    sa_east_1: str

print(Region.us_east_1)
# us-east-1

Using str converter and custom words separator

If you need to apply to your names more changes, you can use converter parameter. Pass a function in here which will be called on every member

from anystrenum import StrEnum

class ContentType(StrEnum, converter=lambda s: s.replace('_', '/', 1), sep='-'):
    application_json: str
    application_octet_stream: str
    application_x_json_stream: str
    audio_mpeg: str
    audio_pcm: str
    audio_ogg: str

print(ContentType.application_octet_stream)
# application/octet-stream

As you can see from an example, firstly, names will be converted with our lambda function and then, remaining underscores will be replaced with given separator

Filtering enum members

Using enums from previous examples

print(ContentType.filter(contains='-', startswith='a', endswith='m'))
# {<ContentType.application_octet_stream: 'application/octet-stream'>,
# <ContentType.application_x_json_stream: 'application/x-json-stream'>}

print(ContentType.filter(contained_in='Usually content type for MP3 is audio/mpeg'))
# {<ContentType.audio_mpeg: 'audio/mpeg'>}

print(Region.filter(startswith='eu', endswith='1'))
# {<Region.eu_west_1: 'eu-west-1'>, <Region.eu_central_1: 'eu-central-1'>}

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

AnyStrEnum-0.2.0.tar.gz (5.2 kB view details)

Uploaded Source

Built Distribution

AnyStrEnum-0.2.0-py3-none-any.whl (6.3 kB view details)

Uploaded Python 3

File details

Details for the file AnyStrEnum-0.2.0.tar.gz.

File metadata

  • Download URL: AnyStrEnum-0.2.0.tar.gz
  • Upload date:
  • Size: 5.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.8

File hashes

Hashes for AnyStrEnum-0.2.0.tar.gz
Algorithm Hash digest
SHA256 675a804941d370d98b618f6a11f7ebffb9a633a32c63057ee37b1d6b3b6e4be7
MD5 f575fdb2f0f6310e0bbb36dbe3ca64fc
BLAKE2b-256 2163391b3edcd6129e32a57fce21b1c41cfd27b48330cfa9b974d6b309ba6fee

See more details on using hashes here.

File details

Details for the file AnyStrEnum-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: AnyStrEnum-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 6.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.6.8

File hashes

Hashes for AnyStrEnum-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2eea8854c0202cb04e5122558db8f1d0c801269922b89a20109206d94877fd31
MD5 57f0e4acb1d895ead684791838f44ca6
BLAKE2b-256 70e22f009daccfb8af8896c712ba9ad4e053e4132b76c9a8557bb9642de79ba3

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