11import sys
2+ from enum import Enum
23from pathlib import Path
34from typing import Dict , List , Literal , Optional
45from unittest .mock import patch
89from hatch_build .cli import hatchling , parse_extra_args_model
910
1011
12+ class MyEnum (Enum ):
13+ OPTION_A = "option_a"
14+ OPTION_B = "option_b"
15+
16+
1117class SubModel (BaseModel , validate_assignment = True ):
1218 sub_arg : int = 42
1319 sub_arg_with_value : str = "sub_default"
@@ -19,6 +25,7 @@ class MyTopLevelModel(BaseModel, validate_assignment=True):
1925 extra_arg_with_value_equals : Optional [str ] = "default_equals"
2026 extra_arg_literal : Literal ["a" , "b" , "c" ] = "a"
2127
28+ enum_arg : MyEnum = MyEnum .OPTION_A
2229 list_arg : List [int ] = [1 , 2 , 3 ]
2330 dict_arg : Dict [str , str ] = {}
2431 dict_arg_default_values : Dict [str , str ] = {"existing-key" : "existing-value" }
@@ -33,6 +40,8 @@ class MyTopLevelModel(BaseModel, validate_assignment=True):
3340 submodel_dict : Dict [str , SubModel ] = {}
3441 submodel_dict_instanced : Dict [str , SubModel ] = {"a" : SubModel ()}
3542
43+ unsupported_literal : Literal [b"test" ] = b"test"
44+
3645
3746class TestCLIMdel :
3847 def test_get_arg_from_model (self ):
@@ -49,6 +58,8 @@ def test_get_arg_from_model(self):
4958 "--extra-arg-not-in-parser" ,
5059 "--extra-arg-literal" ,
5160 "b" ,
61+ "--enum-arg" ,
62+ "option_b" ,
5263 "--list-arg" ,
5364 "1,2,3" ,
5465 "--dict-arg" ,
@@ -80,6 +91,7 @@ def test_get_arg_from_model(self):
8091 assert model .extra_arg_with_value == "value"
8192 assert model .extra_arg_with_value_equals == "value2"
8293 assert model .extra_arg_literal == "b"
94+ assert model .enum_arg == MyEnum .OPTION_B
8395 assert model .list_arg == [1 , 2 , 3 ]
8496 assert model .dict_arg == {"key1" : "value1" , "key2" : "value2" }
8597 assert model .dict_arg_default_values == {"existing-key" : "new-value" }
0 commit comments