convert each quasi-member into an instance of the new enum class
(self, enum_class, member_name)
| 238 | self.value = value |
| 239 | |
| 240 | def __set_name__(self, enum_class, member_name): |
| 241 | """ |
| 242 | convert each quasi-member into an instance of the new enum class |
| 243 | """ |
| 244 | # first step: remove ourself from enum_class |
| 245 | delattr(enum_class, member_name) |
| 246 | # second step: create member based on enum_class |
| 247 | value = self.value |
| 248 | if not isinstance(value, tuple): |
| 249 | args = (value, ) |
| 250 | else: |
| 251 | args = value |
| 252 | if enum_class._member_type_ is tuple: # special case for tuple enums |
| 253 | args = (args, ) # wrap it one more time |
| 254 | if not enum_class._use_args_: |
| 255 | enum_member = enum_class._new_member_(enum_class) |
| 256 | else: |
| 257 | enum_member = enum_class._new_member_(enum_class, *args) |
| 258 | if not hasattr(enum_member, '_value_'): |
| 259 | if enum_class._member_type_ is object: |
| 260 | enum_member._value_ = value |
| 261 | else: |
| 262 | try: |
| 263 | enum_member._value_ = enum_class._member_type_(*args) |
| 264 | except Exception as exc: |
| 265 | new_exc = TypeError( |
| 266 | '_value_ not set in __new__, unable to create it' |
| 267 | ) |
| 268 | new_exc.__cause__ = exc |
| 269 | raise new_exc |
| 270 | value = enum_member._value_ |
| 271 | enum_member._name_ = member_name |
| 272 | enum_member.__objclass__ = enum_class |
| 273 | enum_member.__init__(*args) |
| 274 | enum_member._sort_order_ = len(enum_class._member_names_) |
| 275 | |
| 276 | if Flag is not None and issubclass(enum_class, Flag): |
| 277 | if isinstance(value, int): |
| 278 | enum_class._flag_mask_ |= value |
| 279 | if _is_single_bit(value): |
| 280 | enum_class._singles_mask_ |= value |
| 281 | enum_class._all_bits_ = 2 ** ((enum_class._flag_mask_).bit_length()) - 1 |
| 282 | |
| 283 | # If another member with the same value was already defined, the |
| 284 | # new member becomes an alias to the existing one. |
| 285 | try: |
| 286 | try: |
| 287 | # try to do a fast lookup to avoid the quadratic loop |
| 288 | enum_member = enum_class._value2member_map_[value] |
| 289 | except TypeError: |
| 290 | for name, canonical_member in enum_class._member_map_.items(): |
| 291 | if canonical_member._value_ == value: |
| 292 | enum_member = canonical_member |
| 293 | break |
| 294 | else: |
| 295 | raise KeyError |
| 296 | except KeyError: |
| 297 | # this could still be an alias if the value is multi-bit and the |
nothing calls this directly
no test coverage detected