◐ Shell
reader mode source ↗
Skip to content

bpo-38659: [Enum] add _simple_enum decorator#25497

Merged
ethanfurman merged 7 commits into
python:masterfrom
ethanfurman:enum-simple
Apr 21, 2021
Merged

bpo-38659: [Enum] add _simple_enum decorator#25497
ethanfurman merged 7 commits into
python:masterfrom
ethanfurman:enum-simple

Conversation

@ethanfurman

@ethanfurman ethanfurman commented Apr 21, 2021

Copy link
Copy Markdown
Member

add:

  • _simple_enum decorator to transform a normal class into an enum
  • _test_simple_enum function to compare
  • _old_convert_ to enable checking _convert_ generated enums

_simple_enum takes a normal class and converts it into an enum:

@simple_enum(Enum)
class Color:
    RED = 1
    GREEN = 2
    BLUE = 3

_old_convert_ works much like _convert_ does, using the original logic:

# in a test file
import socket, enum
CheckedAddressFamily = enum._old_convert_(
        enum.IntEnum, 'AddressFamily', 'socket',
        lambda C: C.isupper() and C.startswith('AF_'),
        source=_socket,
        )

_test_simple_enum takes a traditional enum and a simple enum and
compares the two:

# in the REPL or the same module as Color
class CheckedColor(Enum):
    RED = 1
    GREEN = 2
    BLUE = 3

_test_simple_enum(CheckedColor, Color)

_test_simple_enum(CheckedAddressFamily, socket.AddressFamily)

Any important differences will raise a TypeError

https://bugs.python.org/issue38659

Instead of raising ValueError on mismatch, raise a TypeError instead.
- make simple_enum and test_simple_enum private
- add _old_convert_ to enable testing `IntEnum._convert_`
  and `IntFlag._convert_` transformations
- add tests for the `_convert_`s
@ethanfurman ethanfurman merged commit a02cb47 into python:master Apr 21, 2021
@ethanfurman ethanfurman deleted the enum-simple branch April 21, 2021 17:29
pablogsal added a commit to pablogsal/cpython that referenced this pull request Apr 23, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants