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)
| 365 | self._auto_called = False |
| 366 | |
| 367 | def __setitem__(self, key, value): |
| 368 | """ |
| 369 | Changes anything not dundered or not a descriptor. |
| 370 | |
| 371 | If an enum member name is used twice, an error is raised; duplicate |
| 372 | values are not checked for. |
| 373 | |
| 374 | Single underscore (sunder) names are reserved. |
| 375 | """ |
| 376 | if _is_internal_class(self._cls_name, value): |
| 377 | import warnings |
| 378 | warnings.warn( |
| 379 | "In 3.13 classes created inside an enum will not become a member. " |
| 380 | "Use the `member` decorator to keep the current behavior.", |
| 381 | DeprecationWarning, |
| 382 | stacklevel=2, |
| 383 | ) |
| 384 | if _is_private(self._cls_name, key): |
| 385 | # also do nothing, name will be a normal attribute |
| 386 | pass |
| 387 | elif _is_sunder(key): |
| 388 | if key not in ( |
| 389 | '_order_', |
| 390 | '_generate_next_value_', '_numeric_repr_', '_missing_', '_ignore_', |
| 391 | '_iter_member_', '_iter_member_by_value_', '_iter_member_by_def_', |
| 392 | ): |
| 393 | raise ValueError( |
| 394 | '_sunder_ names, such as %r, are reserved for future Enum use' |
| 395 | % (key, ) |
| 396 | ) |
| 397 | if key == '_generate_next_value_': |
| 398 | # check if members already defined as auto() |
| 399 | if self._auto_called: |
| 400 | raise TypeError("_generate_next_value_ must be defined before members") |
| 401 | _gnv = value.__func__ if isinstance(value, staticmethod) else value |
| 402 | setattr(self, '_generate_next_value', _gnv) |
| 403 | elif key == '_ignore_': |
| 404 | if isinstance(value, str): |
| 405 | value = value.replace(',',' ').split() |
| 406 | else: |
| 407 | value = list(value) |
| 408 | self._ignore = value |
| 409 | already = set(value) & set(self._member_names) |
| 410 | if already: |
| 411 | raise ValueError( |
| 412 | '_ignore_ cannot specify already set names: %r' |
| 413 | % (already, ) |
| 414 | ) |
| 415 | elif _is_dunder(key): |
| 416 | if key == '__order__': |
| 417 | key = '_order_' |
| 418 | elif key in self._member_names: |
| 419 | # descriptor overwriting an enum? |
| 420 | raise TypeError('%r already defined as %r' % (key, self[key])) |
| 421 | elif key in self._ignore: |
| 422 | pass |
| 423 | elif isinstance(value, nonmember): |
| 424 | # unwrap value here; it won't be processed by the below `else` |
nothing calls this directly
no test coverage detected