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