@@ -1088,8 +1088,6 @@ def _add_member_(cls, name, member):
10881088 setattr (cls , name , member )
10891089 # now add to _member_map_ (even aliases)
10901090 cls ._member_map_ [name ] = member
1091- #
1092- cls ._member_map_ [name ] = member
10931091
10941092EnumMeta = EnumType # keep EnumMeta name for backwards compatibility
10951093
@@ -1802,20 +1800,31 @@ def convert_class(cls):
18021800 for name , value in attrs .items ():
18031801 if isinstance (value , auto ) and auto .value is _auto_null :
18041802 value = gnv (name , 1 , len (member_names ), gnv_last_values )
1805- if value in value2member_map or value in unhashable_values :
1803+ # create basic member (possibly isolate value for alias check)
1804+ if use_args :
1805+ if not isinstance (value , tuple ):
1806+ value = (value , )
1807+ member = new_member (enum_class , * value )
1808+ value = value [0 ]
1809+ else :
1810+ member = new_member (enum_class )
1811+ if __new__ is None :
1812+ member ._value_ = value
1813+ # now check if alias
1814+ try :
1815+ contained = value2member_map .get (member ._value_ )
1816+ except TypeError :
1817+ contained = None
1818+ if member ._value_ in unhashable_values :
1819+ for m in enum_class :
1820+ if m ._value_ == member ._value_ :
1821+ contained = m
1822+ break
1823+ if contained is not None :
18061824 # an alias to an existing member
1807- enum_class ( value ) ._add_alias_ (name )
1825+ contained ._add_alias_ (name )
18081826 else :
1809- # create the member
1810- if use_args :
1811- if not isinstance (value , tuple ):
1812- value = (value , )
1813- member = new_member (enum_class , * value )
1814- value = value [0 ]
1815- else :
1816- member = new_member (enum_class )
1817- if __new__ is None :
1818- member ._value_ = value
1827+ # finish creating member
18191828 member ._name_ = name
18201829 member .__objclass__ = enum_class
18211830 member .__init__ (value )
@@ -1847,24 +1856,31 @@ def convert_class(cls):
18471856 if value .value is _auto_null :
18481857 value .value = gnv (name , 1 , len (member_names ), gnv_last_values )
18491858 value = value .value
1859+ # create basic member (possibly isolate value for alias check)
1860+ if use_args :
1861+ if not isinstance (value , tuple ):
1862+ value = (value , )
1863+ member = new_member (enum_class , * value )
1864+ value = value [0 ]
1865+ else :
1866+ member = new_member (enum_class )
1867+ if __new__ is None :
1868+ member ._value_ = value
1869+ # now check if alias
18501870 try :
1851- contained = value in value2member_map
1871+ contained = value2member_map . get ( member . _value_ )
18521872 except TypeError :
1853- contained = value in unhashable_values
1854- if contained :
1873+ contained = None
1874+ if member ._value_ in unhashable_values :
1875+ for m in enum_class :
1876+ if m ._value_ == member ._value_ :
1877+ contained = m
1878+ break
1879+ if contained is not None :
18551880 # an alias to an existing member
1856- enum_class ( value ) ._add_alias_ (name )
1881+ contained ._add_alias_ (name )
18571882 else :
1858- # create the member
1859- if use_args :
1860- if not isinstance (value , tuple ):
1861- value = (value , )
1862- member = new_member (enum_class , * value )
1863- value = value [0 ]
1864- else :
1865- member = new_member (enum_class )
1866- if __new__ is None :
1867- member ._value_ = value
1883+ # finish creating member
18681884 member ._name_ = name
18691885 member .__objclass__ = enum_class
18701886 member .__init__ (value )
0 commit comments