@@ -1088,8 +1088,6 @@ def _add_member_(cls, name, member):
1088
1088
setattr (cls , name , member )
1089
1089
# now add to _member_map_ (even aliases)
1090
1090
cls ._member_map_ [name ] = member
1091
- #
1092
- cls ._member_map_ [name ] = member
1093
1091
1094
1092
EnumMeta = EnumType # keep EnumMeta name for backwards compatibility
1095
1093
@@ -1802,20 +1800,31 @@ def convert_class(cls):
1802
1800
for name , value in attrs .items ():
1803
1801
if isinstance (value , auto ) and auto .value is _auto_null :
1804
1802
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 :
1806
1824
# an alias to an existing member
1807
- enum_class ( value ) ._add_alias_ (name )
1825
+ contained ._add_alias_ (name )
1808
1826
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
1819
1828
member ._name_ = name
1820
1829
member .__objclass__ = enum_class
1821
1830
member .__init__ (value )
@@ -1847,24 +1856,31 @@ def convert_class(cls):
1847
1856
if value .value is _auto_null :
1848
1857
value .value = gnv (name , 1 , len (member_names ), gnv_last_values )
1849
1858
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
1850
1870
try :
1851
- contained = value in value2member_map
1871
+ contained = value2member_map . get ( member . _value_ )
1852
1872
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 :
1855
1880
# an alias to an existing member
1856
- enum_class ( value ) ._add_alias_ (name )
1881
+ contained ._add_alias_ (name )
1857
1882
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
1868
1884
member ._name_ = name
1869
1885
member .__objclass__ = enum_class
1870
1886
member .__init__ (value )
0 commit comments