Marco-Sulla / python-frozendict

A simple immutable dictionary for Python
https://github.com/Marco-Sulla/python-frozendict
GNU Lesser General Public License v3.0
133 stars 16 forks source link

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

Closed kenodegard closed 6 months ago

kenodegard commented 6 months ago

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.

Marco-Sulla commented 6 months ago

Good catch, ty.

Marco-Sulla commented 5 months ago

Fix released in 2.4.3