Skip to content

[FEATURE] Should Enum be considered immutable by default? #98

@kenodegard

Description

@kenodegard

Is your feature request related to a problem? Please describe.

I was surprised to learn that deepfreeze(Enum.VALUE) produced a frozendict(Enum.VALUE.__dict__). I expected it to return the enum. E.g.:

>>> from enum import Enum
>>> from frozendict import deepfreeze

>>> Color = Enum('Color', ['RED', 'GREEN', 'BLUE'])

>>> deepfreeze(Color.RED)
frozendict.frozendict({'_value_': 1, '_name_': 'RED', '__objclass__': <enum 'Color'>})

Describe the solution you'd like

Consider making Enum.VALUE an immutable scalar by default.

Describe alternatives you've considered

I know I can register a custom conversion:

>>> from enum import Enum
>>> from frozendict import deepfreeze

>>> Color = Enum('Color', ['RED', 'GREEN', 'BLUE'])

>>> deepfreeze(Color.RED, custom_converters={Enum: lambda x: x})
Color.RED

or

>>> from enum import Enum
>>> from frozendict import deepfreeze, register

>>> Color = Enum('Color', ['RED', 'GREEN', 'BLUE'])
>>> register(Enum, lambda x: x)

>>> deepfreeze(Color.RED)
Color.RED

Additional context

While I understand this can be easily configured on my end via the register function I'm wondering if it makes more sense to treat enums as immutable scalars by default.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions