Skip to main content

Enum with to_dict method.

Project description

EnumWithDict

EnumWithDict is a Python package that extends the standard library's Enum class to include to_dict, get_initial, and other class methods. This enhancement allows for the straightforward conversion of enum classes to dictionaries, easy access to the initial enum value, and additional functionalities such as retrieving enum values with a fallback option, validating mappings, and more.

Extends Enum with the Following Methods:

  • to_dict: Convert an enum class to a dictionary representation, mapping member names to their values.
  • get_initial: Retrieve the first value defined in the enum, useful for cases where a default or initial value is needed.
  • get: Mimics the dictionary get method, allowing retrieval of enum values with an optional default fallback. Additionally, it supports an optional custom mapping dictionary for dynamically mapped value retrieval.
  • validate_mapping_keys: Ensure that a provided mapping includes all enum values, raising an error for any missing mappings.
  • map: Map enum members to values based on the provided dictionary.
  • keys: Retrieve the keys of the enum class as a list or as a KeysView.
  • values: Retrieve the values of the enum class as a list or as a ValuesView.

Installation

Install EnumWithDict using pip:

pip install enum-with-dict

Usage

Defining an Enum with EnumWithDict

from enum_with_dict import EnumWithDict

class Color(EnumWithDict):
    RED = 'red'
    GREEN = 'green'
    BLUE = 'blue'

Converting an Enum to a Dictionary

color_dict = Color.to_dict()
print(color_dict)
# Output: {'RED': 'red', 'GREEN': 'green', 'BLUE': 'blue'}

Getting the Initial Enum Value

initial_color = Color.get_initial()
print(initial_color)
# Output: 'red'

Using the get Method

Retrieve an enum value by its name, with an option to specify a default value if the name does not exist. Additionally, you can pass a custom mapping dictionary to retrieve a mapped value instead of the enum's default value.

Get a value for an existing key

print(Color.get('RED'))  # Output: 'red'

Get a value for a non-existing key with a default value

print(Color.get('PURPLE', default='unknown'))  # Output: 'unknown'

Get a value for a non-existing key, falling back to the initial value

print(Color.get('PURPLE'))  # Output: 'red'

Get a value using a custom mapping

You can also use a custom mapping dictionary to retrieve a value. This is useful when you need to map enum members to different values dynamically.

custom_mapping = {'RED': 'Rouge', 'GREEN': 'Vert', 'BLUE': 'Bleu'}
print(Color.get('RED', mapping=custom_mapping))  # Output: 'Rouge'

Ensuring Completeness of Mappings with validate_mapping_keys

Validate that a provided mapping covers all enum members.

# Assuming a partial mapping for demonstration
partial_mapping = {'RED': 'Rouge', 'GREEN': 'Vert'}

try:
    Color.validate_mapping_keys(partial_mapping)
except ValueError as e:
    print(e)
# Expected output: Missing mappings for: BLUE

Mapping Enum Members with map

Map enum members to values using the provided dictionary.

This mapping operation does not alter the values within the Enum itself; instead, it generates a new dictionary with the same keys and updated values.

Internally, validate_mapping_keys is invoked to confirm that the keys align with the Enum members, but the value types remain arbitrary.

# Define the key mapping
key_mapping = {
    TestEnum.VALUE_1: "some_new_value",
    TestEnum.VALUE_2: "another_new_value",
    TestEnum.VALUE_3: "a new value"
}

# Perform the mapping and validate
mapped_values = TestEnum.map(key_mapping)

# ----- The above is equivalent to the following: -----

# Validate the mapped values
expected_values = {
    TestEnum.VALUE_1.name: "some_new_value",
    TestEnum.VALUE_2.name: "another_new_value",
    TestEnum.VALUE_3.name: "a new value"
}

assert mapped_values == expected_values

Retrieving Keys and Values with keys() and values()

Retrieve the keys and values of the enum class as a list or as a KeysView or ValuesView.

Get keys as a list

keys_list = Color.keys()

Get keys as a KeysView

keys_view = Color.keys(as_list=False)

Get values as a list

values_list = Color.values()

Get values as a ValuesView

values_view = Color.values(as_list=False)

LICENSE

EnumWithDict is released under the MIT License. See the LICENSE file for more details.

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

enum_with_dict-0.7.2.tar.gz (6.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

enum_with_dict-0.7.2-py3-none-any.whl (7.8 kB view details)

Uploaded Python 3

File details

Details for the file enum_with_dict-0.7.2.tar.gz.

File metadata

  • Download URL: enum_with_dict-0.7.2.tar.gz
  • Upload date:
  • Size: 6.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for enum_with_dict-0.7.2.tar.gz
Algorithm Hash digest
SHA256 cf13b715a3b2a2cac4495009a39dde9ec7e3be6a2d198a49fb0661cb66307dad
MD5 d3f4da1f01ec61f3f59a2f6697caec41
BLAKE2b-256 af4bc1900597a42cf9469828623a6ab7b5815188177b2909ea440b8c856cba3a

See more details on using hashes here.

File details

Details for the file enum_with_dict-0.7.2-py3-none-any.whl.

File metadata

  • Download URL: enum_with_dict-0.7.2-py3-none-any.whl
  • Upload date:
  • Size: 7.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.11.6

File hashes

Hashes for enum_with_dict-0.7.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e35201948740f0f3a489b63c3806c06c90a5788017f708919efc6af31e371ec7
MD5 968dd3975e6d1055521b71199c694eba
BLAKE2b-256 ee01a78d45e7d056c3f9394c0617da11034971d4719bc50ddeb69c32d15893ee

See more details on using hashes here.

Supported by

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