Changes anything not dundered or not a descriptor. If an enum member name is used twice, an error is raised; duplicate values are not checked for. Single underscore (sunder) names are reserved.
(self, key, value)
| 341 | self._cls_name = cls_name |
| 342 | |
| 343 | def __setitem__(self, key, value): |
| 344 | """ |
| 345 | Changes anything not dundered or not a descriptor. |
| 346 | |
| 347 | If an enum member name is used twice, an error is raised; duplicate |
| 348 | values are not checked for. |
| 349 | |
| 350 | Single underscore (sunder) names are reserved. |
| 351 | """ |
| 352 | if self._cls_name is not None and _is_private(self._cls_name, key): |
| 353 | # do nothing, name will be a normal attribute |
| 354 | pass |
| 355 | elif _is_sunder(key): |
| 356 | if key not in ( |
| 357 | '_order_', |
| 358 | '_generate_next_value_', '_numeric_repr_', '_missing_', '_ignore_', |
| 359 | '_iter_member_', '_iter_member_by_value_', '_iter_member_by_def_', |
| 360 | '_add_alias_', '_add_value_alias_', |
| 361 | # While not in use internally, those are common for pretty |
| 362 | # printing and thus excluded from Enum's reservation of |
| 363 | # _sunder_ names |
| 364 | ) and not key.startswith('_repr_'): |
| 365 | raise ValueError( |
| 366 | '_sunder_ names, such as %r, are reserved for future Enum use' |
| 367 | % (key, ) |
| 368 | ) |
| 369 | if key == '_generate_next_value_': |
| 370 | # check if members already defined as auto() |
| 371 | if self._auto_called: |
| 372 | raise TypeError("_generate_next_value_ must be defined before members") |
| 373 | _gnv = value.__func__ if isinstance(value, staticmethod) else value |
| 374 | setattr(self, '_generate_next_value', _gnv) |
| 375 | elif key == '_ignore_': |
| 376 | if isinstance(value, str): |
| 377 | value = value.replace(',',' ').split() |
| 378 | else: |
| 379 | value = list(value) |
| 380 | self._ignore = value |
| 381 | already = set(value) & set(self._member_names) |
| 382 | if already: |
| 383 | raise ValueError( |
| 384 | '_ignore_ cannot specify already set names: %r' |
| 385 | % (already, ) |
| 386 | ) |
| 387 | elif _is_dunder(key): |
| 388 | if key == '__order__': |
| 389 | key = '_order_' |
| 390 | elif key in self._member_names: |
| 391 | # descriptor overwriting an enum? |
| 392 | raise TypeError('%r already defined as %r' % (key, self[key])) |
| 393 | elif key in self._ignore: |
| 394 | pass |
| 395 | elif isinstance(value, nonmember): |
| 396 | # unwrap value here; it won't be processed by the below `else` |
| 397 | value = value.value |
| 398 | elif _is_descriptor(value): |
| 399 | pass |
| 400 | elif self._cls_name is not None and _is_internal_class(self._cls_name, value): |
nothing calls this directly
no test coverage detected