Ethan Furman added the comment:

Patch adds Enum._convert which is a class method that handles:

  - creating the new Enum
  - adding the appropriate members
  - adding the new Enum to the module's namespace (which is a passed parameter)
  - replacing the __reduce_ex__ method to return just the member's name

The change to Enum is:

    @classmethod
    def _convert(cls, name, module, filter, source=None):
        """
        Create a new Enum subclass that replaces a collection of global 
constants
        """
        # convert all constants from source (or module) that pass filter() to
        # a new Enum called name, and export the enum and its members back to
        # module;
        # also, replace the __reduce_ex__ method so unpickling works in
        # previous Python versions
        module_globals = vars(sys.modules[module])
        if source:
            source = vars(source)
        else:
            source = module_globals
        members = {name: value for name, value in source.items()
                if filter(name)}
        cls = cls(name, members, module=module)
        cls.__reduce_ex__ = _reduce_ex_by_name
        module_globals.update(cls.__members__)
        module_globals[name] = cls
        return cls

In use it looks like:

   IntEnum._convert(
        'AddressFamily',
        __name__,
        lambda C: C.isupper() and C.startswith('AF_'))

or

  _IntEnum._convert(
        '_SSLMethod', __name__,
        lambda name: name.startswith('PROTOCOL_'),
        source=_ssl)


ssl.py, socket.py, signal.py, and http/__init__.py have been updated to use 
this method.

----------
keywords: +patch
stage: test needed -> patch review
Added file: http://bugs.python.org/file38510/issue23673.stoneleaf.01.patch

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue23673>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to