Skip to content

Commit

Permalink
fix handling of Enum default value
Browse files Browse the repository at this point in the history
  • Loading branch information
MatthieuDartiailh committed Jan 20, 2025
1 parent 6979ded commit 2098dd7
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 0 deletions.
8 changes: 8 additions & 0 deletions atom/meta/annotation_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,14 @@ def generate_member_from_type_or_generic(
# We are dealing with a Literal, so use an Enum member
elif not types:
m_cls = Enum
if default is not _NO_DEFAULT:
if default not in parameters:
raise ValueError("Default value does not appear in Literal")
# Make the default value the first in the enum arguments.
p = list(parameters)
p.pop(p.index(default))
parameters = (default, *p)
default = _NO_DEFAULT
# Int, Float, Str, Bytes, List, Dict, Set, Tuple, Bool, Callable
elif len(types) == 1 and types[0] in _TYPE_TO_MEMBER:
t = types[0]
Expand Down
2 changes: 2 additions & 0 deletions tests/test_atom_from_annotations.py
Original file line number Diff line number Diff line change
Expand Up @@ -312,6 +312,8 @@ class A(Atom, use_annotations=True):
assert isinstance(A.a, member)
if member is Subclass:
assert A.a.default_value_mode == member(int, default=default).default_value_mode
elif member is Enum:
assert A.a.default_value_mode[1] == default
elif member is not Instance:
assert A.a.default_value_mode == member(default=default).default_value_mode

Expand Down

0 comments on commit 2098dd7

Please sign in to comment.