mirror of
https://github.com/python/cpython.git
synced 2025-07-08 03:45:36 +00:00
signal, socket, and ssl module IntEnum constant name lookups now return a
consistent name for values having multiple names. Ex: signal.Signals(6) now refers to itself as signal.SIGALRM rather than flipping between that and signal.SIGIOT based on the interpreter's hash randomization seed. This helps finish issue27167.
This commit is contained in:
parent
16931c3559
commit
6f20bd6063
3 changed files with 49 additions and 2 deletions
10
Lib/enum.py
10
Lib/enum.py
|
@ -550,8 +550,14 @@ class Enum(metaclass=EnumMeta):
|
|||
source = vars(source)
|
||||
else:
|
||||
source = module_globals
|
||||
members = {name: value for name, value in source.items()
|
||||
if filter(name)}
|
||||
# We use an OrderedDict of sorted source keys so that the
|
||||
# _value2member_map is populated in the same order every time
|
||||
# for a consistent reverse mapping of number to name when there
|
||||
# are multiple names for the same number rather than varying
|
||||
# between runs due to hash randomization of the module dictionary.
|
||||
members = OrderedDict((name, source[name])
|
||||
for name in sorted(source.keys())
|
||||
if filter(name))
|
||||
cls = cls(name, members, module=module)
|
||||
cls.__reduce_ex__ = _reduce_ex_by_name
|
||||
module_globals.update(cls.__members__)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue