@typespec/http-client-python 0.15.1 → 0.16.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (154) hide show
  1. package/dist/emitter/code-model.d.ts.map +1 -1
  2. package/dist/emitter/code-model.js +8 -1
  3. package/dist/emitter/code-model.js.map +1 -1
  4. package/dist/emitter/http.d.ts +5 -0
  5. package/dist/emitter/http.d.ts.map +1 -1
  6. package/dist/emitter/http.js +20 -1
  7. package/dist/emitter/http.js.map +1 -1
  8. package/emitter/src/code-model.ts +12 -0
  9. package/emitter/src/http.ts +23 -1
  10. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  11. package/eng/scripts/ci/regenerate.ts +4 -2
  12. package/eng/scripts/ci/util.py +1 -1
  13. package/eng/scripts/setup/__pycache__/package_manager.cpython-39.pyc +0 -0
  14. package/eng/scripts/setup/__pycache__/venvtools.cpython-39.pyc +0 -0
  15. package/generator/build/lib/pygen/__init__.py +14 -23
  16. package/generator/build/lib/pygen/codegen/__init__.py +4 -4
  17. package/generator/build/lib/pygen/codegen/models/__init__.py +2 -2
  18. package/generator/build/lib/pygen/codegen/models/base.py +9 -12
  19. package/generator/build/lib/pygen/codegen/models/base_builder.py +4 -6
  20. package/generator/build/lib/pygen/codegen/models/client.py +61 -102
  21. package/generator/build/lib/pygen/codegen/models/code_model.py +29 -29
  22. package/generator/build/lib/pygen/codegen/models/combined_type.py +7 -7
  23. package/generator/build/lib/pygen/codegen/models/constant_type.py +4 -11
  24. package/generator/build/lib/pygen/codegen/models/credential_types.py +9 -11
  25. package/generator/build/lib/pygen/codegen/models/dictionary_type.py +7 -8
  26. package/generator/build/lib/pygen/codegen/models/enum_type.py +7 -7
  27. package/generator/build/lib/pygen/codegen/models/imports.py +24 -29
  28. package/generator/build/lib/pygen/codegen/models/list_type.py +15 -14
  29. package/generator/build/lib/pygen/codegen/models/lro_operation.py +6 -6
  30. package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +2 -2
  31. package/generator/build/lib/pygen/codegen/models/model_type.py +11 -11
  32. package/generator/build/lib/pygen/codegen/models/operation.py +26 -56
  33. package/generator/build/lib/pygen/codegen/models/operation_group.py +11 -22
  34. package/generator/build/lib/pygen/codegen/models/paging_operation.py +15 -19
  35. package/generator/build/lib/pygen/codegen/models/parameter.py +12 -21
  36. package/generator/build/lib/pygen/codegen/models/parameter_list.py +37 -39
  37. package/generator/build/lib/pygen/codegen/models/primitive_types.py +24 -18
  38. package/generator/build/lib/pygen/codegen/models/property.py +10 -10
  39. package/generator/build/lib/pygen/codegen/models/request_builder.py +7 -8
  40. package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +3 -3
  41. package/generator/build/lib/pygen/codegen/models/response.py +15 -40
  42. package/generator/build/lib/pygen/codegen/models/utils.py +2 -2
  43. package/generator/build/lib/pygen/codegen/serializers/__init__.py +26 -42
  44. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +103 -100
  45. package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +22 -25
  46. package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +2 -2
  47. package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +49 -61
  48. package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +6 -7
  49. package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +1 -2
  50. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +15 -17
  51. package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
  52. package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +5 -6
  53. package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +28 -18
  54. package/generator/build/lib/pygen/codegen/serializers/patch_serializer.py +1 -2
  55. package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +1 -2
  56. package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +9 -14
  57. package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +7 -7
  58. package/generator/build/lib/pygen/codegen/serializers/utils.py +2 -2
  59. package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +30 -24
  60. package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
  61. package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
  62. package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
  63. package/generator/build/lib/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +2 -1
  64. package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  65. package/generator/build/lib/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +13 -2
  66. package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +1 -1
  67. package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +11 -13
  68. package/generator/build/lib/pygen/codegen/templates/utils.py.jinja2 +6 -6
  69. package/generator/build/lib/pygen/preprocess/__init__.py +47 -30
  70. package/generator/build/lib/pygen/preprocess/helpers.py +2 -2
  71. package/generator/build/lib/pygen/utils.py +6 -6
  72. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  73. package/generator/pygen/__init__.py +14 -23
  74. package/generator/pygen/codegen/__init__.py +4 -4
  75. package/generator/pygen/codegen/models/__init__.py +2 -2
  76. package/generator/pygen/codegen/models/base.py +9 -12
  77. package/generator/pygen/codegen/models/base_builder.py +4 -6
  78. package/generator/pygen/codegen/models/client.py +61 -102
  79. package/generator/pygen/codegen/models/code_model.py +29 -29
  80. package/generator/pygen/codegen/models/combined_type.py +7 -7
  81. package/generator/pygen/codegen/models/constant_type.py +4 -11
  82. package/generator/pygen/codegen/models/credential_types.py +9 -11
  83. package/generator/pygen/codegen/models/dictionary_type.py +7 -8
  84. package/generator/pygen/codegen/models/enum_type.py +7 -7
  85. package/generator/pygen/codegen/models/imports.py +24 -29
  86. package/generator/pygen/codegen/models/list_type.py +15 -14
  87. package/generator/pygen/codegen/models/lro_operation.py +6 -6
  88. package/generator/pygen/codegen/models/lro_paging_operation.py +2 -2
  89. package/generator/pygen/codegen/models/model_type.py +11 -11
  90. package/generator/pygen/codegen/models/operation.py +26 -56
  91. package/generator/pygen/codegen/models/operation_group.py +11 -22
  92. package/generator/pygen/codegen/models/paging_operation.py +15 -19
  93. package/generator/pygen/codegen/models/parameter.py +12 -21
  94. package/generator/pygen/codegen/models/parameter_list.py +37 -39
  95. package/generator/pygen/codegen/models/primitive_types.py +24 -18
  96. package/generator/pygen/codegen/models/property.py +10 -10
  97. package/generator/pygen/codegen/models/request_builder.py +7 -8
  98. package/generator/pygen/codegen/models/request_builder_parameter.py +3 -3
  99. package/generator/pygen/codegen/models/response.py +15 -40
  100. package/generator/pygen/codegen/models/utils.py +2 -2
  101. package/generator/pygen/codegen/serializers/__init__.py +26 -42
  102. package/generator/pygen/codegen/serializers/builder_serializer.py +103 -100
  103. package/generator/pygen/codegen/serializers/client_serializer.py +22 -25
  104. package/generator/pygen/codegen/serializers/enum_serializer.py +2 -2
  105. package/generator/pygen/codegen/serializers/general_serializer.py +49 -61
  106. package/generator/pygen/codegen/serializers/import_serializer.py +6 -7
  107. package/generator/pygen/codegen/serializers/model_init_serializer.py +1 -2
  108. package/generator/pygen/codegen/serializers/model_serializer.py +15 -17
  109. package/generator/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
  110. package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -6
  111. package/generator/pygen/codegen/serializers/parameter_serializer.py +28 -18
  112. package/generator/pygen/codegen/serializers/patch_serializer.py +1 -2
  113. package/generator/pygen/codegen/serializers/request_builders_serializer.py +1 -2
  114. package/generator/pygen/codegen/serializers/sample_serializer.py +9 -14
  115. package/generator/pygen/codegen/serializers/test_serializer.py +7 -7
  116. package/generator/pygen/codegen/serializers/utils.py +2 -2
  117. package/generator/pygen/codegen/templates/model_base.py.jinja2 +30 -24
  118. package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
  119. package/generator/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
  120. package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
  121. package/generator/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +2 -1
  122. package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  123. package/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +13 -2
  124. package/generator/pygen/codegen/templates/patch.py.jinja2 +1 -1
  125. package/generator/pygen/codegen/templates/serialization.py.jinja2 +11 -13
  126. package/generator/pygen/codegen/templates/utils.py.jinja2 +6 -6
  127. package/generator/pygen/preprocess/__init__.py +47 -30
  128. package/generator/pygen/preprocess/helpers.py +2 -2
  129. package/generator/pygen/utils.py +6 -6
  130. package/generator/pygen.egg-info/SOURCES.txt +0 -2
  131. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_operationtemplates_async.py +79 -0
  132. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_api_version_header_async.py +18 -0
  133. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_api_version_path_async.py +18 -0
  134. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_api_version_query_async.py +18 -0
  135. package/generator/test/azure/mock_api_tests/asynctests/test_client_naming_async.py +4 -4
  136. package/generator/test/azure/mock_api_tests/asynctests/test_client_naming_enum_conflict_async.py +37 -0
  137. package/generator/test/azure/mock_api_tests/asynctests/test_client_overload_async.py +27 -0
  138. package/generator/test/azure/mock_api_tests/conftest.py +2 -2
  139. package/generator/test/azure/mock_api_tests/test_azure_arm_operationtemplates.py +72 -0
  140. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_api_version_header.py +17 -0
  141. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_api_version_path.py +17 -0
  142. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_api_version_query.py +17 -0
  143. package/generator/test/azure/mock_api_tests/test_client_naming.py +3 -3
  144. package/generator/test/azure/mock_api_tests/test_client_naming_enum_conflict.py +35 -0
  145. package/generator/test/azure/mock_api_tests/test_client_overload.py +25 -0
  146. package/generator/test/azure/requirements.txt +5 -0
  147. package/generator/test/unbranded/mock_api_tests/conftest.py +1 -2
  148. package/generator/test/unittests/test_model_base_serialization.py +88 -92
  149. package/generator/test/unittests/test_model_base_xml_serialization.py +19 -23
  150. package/package.json +8 -8
  151. package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +0 -216
  152. package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +0 -167
  153. package/generator/pygen/codegen/serializers/metadata_serializer.py +0 -216
  154. package/generator/pygen/codegen/templates/metadata.json.jinja2 +0 -167
@@ -10,13 +10,9 @@ from pathlib import Path
10
10
  from typing import (
11
11
  Any,
12
12
  Iterable,
13
- List,
14
13
  Literal,
15
- Dict,
16
14
  Mapping,
17
15
  Sequence,
18
- Set,
19
- Tuple,
20
16
  Optional,
21
17
  overload,
22
18
  Union,
@@ -49,7 +45,7 @@ class BasicResource(Model):
49
45
  platform_fault_domain_count: int = rest_field(
50
46
  name="platformFaultDomainCount"
51
47
  ) # How many times the platform fault domain has been counted
52
- virtual_machines: List[Any] = rest_field(name="virtualMachines") # List of virtual machines
48
+ virtual_machines: list[Any] = rest_field(name="virtualMachines") # List of virtual machines
53
49
 
54
50
  @overload
55
51
  def __init__(
@@ -57,7 +53,7 @@ class BasicResource(Model):
57
53
  *,
58
54
  platform_update_domain_count: int,
59
55
  platform_fault_domain_count: int,
60
- virtual_machines: List[Any],
56
+ virtual_machines: list[Any],
61
57
  ): ...
62
58
 
63
59
  @overload
@@ -185,7 +181,7 @@ def test_original_and_attr_name_same():
185
181
  class OptionalModel(Model):
186
182
  optional_str: Optional[str] = rest_field()
187
183
  optional_time: Optional[datetime.time] = rest_field()
188
- optional_dict: Optional[Dict[str, Optional[Pet]]] = rest_field(name="optionalDict")
184
+ optional_dict: Optional[dict[str, Optional[Pet]]] = rest_field(name="optionalDict")
189
185
  optional_model: Optional[Pet] = rest_field()
190
186
  optional_myself: Optional["OptionalModel"] = rest_field()
191
187
 
@@ -195,7 +191,7 @@ class OptionalModel(Model):
195
191
  *,
196
192
  optional_str: Optional[str] = None,
197
193
  optional_time: Optional[datetime.time] = None,
198
- optional_dict: Optional[Dict[str, Optional[Pet]]] = None,
194
+ optional_dict: Optional[dict[str, Optional[Pet]]] = None,
199
195
  optional_myself: Optional["OptionalModel"] = None,
200
196
  ): ...
201
197
 
@@ -448,7 +444,7 @@ def test_model_recursion():
448
444
 
449
445
  def test_dictionary_deserialization():
450
446
  class DictionaryModel(Model):
451
- prop: Dict[str, datetime.datetime] = rest_field()
447
+ prop: dict[str, datetime.datetime] = rest_field()
452
448
 
453
449
  @overload
454
450
  def __init__(self, *, prop: datetime.datetime): ...
@@ -492,10 +488,10 @@ def test_attr_and_rest_case():
492
488
 
493
489
  def test_dictionary_deserialization_model():
494
490
  class DictionaryModel(Model):
495
- prop: Dict[str, Pet] = rest_field()
491
+ prop: dict[str, Pet] = rest_field()
496
492
 
497
493
  @overload
498
- def __init__(self, *, prop: Dict[str, Pet]): ...
494
+ def __init__(self, *, prop: dict[str, Pet]): ...
499
495
 
500
496
  @overload
501
497
  def __init__(self, mapping: Mapping[str, Any], /): ...
@@ -539,10 +535,10 @@ def test_dictionary_deserialization_model():
539
535
 
540
536
  def test_list_deserialization():
541
537
  class ListModel(Model):
542
- prop: List[datetime.datetime] = rest_field()
538
+ prop: list[datetime.datetime] = rest_field()
543
539
 
544
540
  @overload
545
- def __init__(self, *, prop: List[datetime.datetime]): ...
541
+ def __init__(self, *, prop: list[datetime.datetime]): ...
546
542
 
547
543
  @overload
548
544
  def __init__(self, mapping: Mapping[str, Any], /): ...
@@ -560,10 +556,10 @@ def test_list_deserialization():
560
556
 
561
557
  def test_list_deserialization_model():
562
558
  class ListModel(Model):
563
- prop: List[Pet] = rest_field()
559
+ prop: list[Pet] = rest_field()
564
560
 
565
561
  @overload
566
- def __init__(self, *, prop: List[Pet]): ...
562
+ def __init__(self, *, prop: list[Pet]): ...
567
563
 
568
564
  @overload
569
565
  def __init__(self, mapping: Mapping[str, Any], /): ...
@@ -595,10 +591,10 @@ def test_list_deserialization_model():
595
591
 
596
592
  def test_set_deserialization():
597
593
  class SetModel(Model):
598
- prop: Set[datetime.datetime] = rest_field()
594
+ prop: set[datetime.datetime] = rest_field()
599
595
 
600
596
  @overload
601
- def __init__(self, *, prop: Set[datetime.datetime]): ...
597
+ def __init__(self, *, prop: set[datetime.datetime]): ...
602
598
 
603
599
  @overload
604
600
  def __init__(self, mapping: Mapping[str, Any], /): ...
@@ -616,10 +612,10 @@ def test_set_deserialization():
616
612
 
617
613
  def test_tuple_deserialization():
618
614
  class TupleModel(Model):
619
- prop: Tuple[str, datetime.datetime] = rest_field()
615
+ prop: tuple[str, datetime.datetime] = rest_field()
620
616
 
621
617
  @overload
622
- def __init__(self, *, prop: Tuple[str, datetime.datetime]): ...
618
+ def __init__(self, *, prop: tuple[str, datetime.datetime]): ...
623
619
 
624
620
  @overload
625
621
  def __init__(self, mapping: Mapping[str, Any], /): ...
@@ -650,10 +646,10 @@ def test_list_of_tuple_deserialization_model():
650
646
  super().__init__(*args, **kwargs)
651
647
 
652
648
  class ListOfTupleModel(Model):
653
- prop: List[Tuple[Pet, Owner]] = rest_field()
649
+ prop: list[tuple[Pet, Owner]] = rest_field()
654
650
 
655
651
  @overload
656
- def __init__(self, *, prop: List[Tuple[Pet, Owner]]): ...
652
+ def __init__(self, *, prop: list[tuple[Pet, Owner]]): ...
657
653
 
658
654
  @overload
659
655
  def __init__(self, mapping: Mapping[str, Any], /): ...
@@ -666,7 +662,7 @@ def test_list_of_tuple_deserialization_model():
666
662
  giacamo = {"name": "Giacamo", "pet": eugene}
667
663
  elizabeth = {"name": "Elizabeth", "pet": lady}
668
664
 
669
- dict_response: Dict[str, Any] = {"prop": [(eugene, giacamo), (lady, elizabeth)]}
665
+ dict_response: dict[str, Any] = {"prop": [(eugene, giacamo), (lady, elizabeth)]}
670
666
  model = ListOfTupleModel(dict_response)
671
667
  assert (
672
668
  model["prop"]
@@ -685,20 +681,20 @@ def test_list_of_tuple_deserialization_model():
685
681
 
686
682
  class RecursiveModel(Model):
687
683
  name: str = rest_field()
688
- list_of_me: Optional[List["RecursiveModel"]] = rest_field(name="listOfMe")
689
- dict_of_me: Optional[Dict[str, "RecursiveModel"]] = rest_field(name="dictOfMe")
690
- dict_of_list_of_me: Optional[Dict[str, List["RecursiveModel"]]] = rest_field(name="dictOfListOfMe")
691
- list_of_dict_of_me: Optional[List[Dict[str, "RecursiveModel"]]] = rest_field(name="listOfDictOfMe")
684
+ list_of_me: Optional[list["RecursiveModel"]] = rest_field(name="listOfMe")
685
+ dict_of_me: Optional[dict[str, "RecursiveModel"]] = rest_field(name="dictOfMe")
686
+ dict_of_list_of_me: Optional[dict[str, list["RecursiveModel"]]] = rest_field(name="dictOfListOfMe")
687
+ list_of_dict_of_me: Optional[list[dict[str, "RecursiveModel"]]] = rest_field(name="listOfDictOfMe")
692
688
 
693
689
  @overload
694
690
  def __init__(
695
691
  self,
696
692
  *,
697
693
  name: str,
698
- list_of_me: Optional[List["RecursiveModel"]] = None,
699
- dict_of_me: Optional[Dict[str, "RecursiveModel"]] = None,
700
- dict_of_list_of_me: Optional[Dict[str, List["RecursiveModel"]]] = None,
701
- list_of_dict_of_me: Optional[List[Dict[str, "RecursiveModel"]]] = None,
694
+ list_of_me: Optional[list["RecursiveModel"]] = None,
695
+ dict_of_me: Optional[dict[str, "RecursiveModel"]] = None,
696
+ dict_of_list_of_me: Optional[dict[str, list["RecursiveModel"]]] = None,
697
+ list_of_dict_of_me: Optional[list[dict[str, "RecursiveModel"]]] = None,
702
698
  ): ...
703
699
 
704
700
  @overload
@@ -778,7 +774,7 @@ def test_model_recursion_complex():
778
774
  assert model.list_of_me
779
775
  assert model.list_of_me[0].name == "it's me!"
780
776
  assert model.list_of_me[0].list_of_me is None
781
- assert isinstance(model.list_of_me, List)
777
+ assert isinstance(model.list_of_me, list)
782
778
  assert isinstance(model.list_of_me[0], RecursiveModel)
783
779
 
784
780
  assert model["dictOfMe"] == {
@@ -802,7 +798,7 @@ def test_model_recursion_complex():
802
798
  )
803
799
  }
804
800
 
805
- assert isinstance(model.dict_of_me, Dict)
801
+ assert isinstance(model.dict_of_me, dict)
806
802
  assert isinstance(model.dict_of_me["me"], RecursiveModel)
807
803
 
808
804
  assert model["dictOfListOfMe"] == {
@@ -829,8 +825,8 @@ def test_model_recursion_complex():
829
825
  )
830
826
  ]
831
827
  }
832
- assert isinstance(model.dict_of_list_of_me, Dict)
833
- assert isinstance(model.dict_of_list_of_me["many mes"], List)
828
+ assert isinstance(model.dict_of_list_of_me, dict)
829
+ assert isinstance(model.dict_of_list_of_me["many mes"], list)
834
830
  assert isinstance(model.dict_of_list_of_me["many mes"][0], RecursiveModel)
835
831
 
836
832
  assert model["listOfDictOfMe"] == [
@@ -857,8 +853,8 @@ def test_model_recursion_complex():
857
853
  )
858
854
  }
859
855
  ]
860
- assert isinstance(model.list_of_dict_of_me, List)
861
- assert isinstance(model.list_of_dict_of_me[0], Dict)
856
+ assert isinstance(model.list_of_dict_of_me, list)
857
+ assert isinstance(model.list_of_dict_of_me[0], dict)
862
858
  assert isinstance(model.list_of_dict_of_me[0]["me"], RecursiveModel)
863
859
 
864
860
  assert model.as_dict() == model == dict_response
@@ -978,11 +974,11 @@ def test_inheritance_basic():
978
974
  return [str(e) for e in obj]
979
975
 
980
976
  class Parent(Model):
981
- parent_prop: List[int] = rest_field(name="parentProp", type=_callback)
977
+ parent_prop: list[int] = rest_field(name="parentProp", type=_callback)
982
978
  prop: str = rest_field()
983
979
 
984
980
  @overload
985
- def __init__(self, *, parent_prop: List[int], prop: str): ...
981
+ def __init__(self, *, parent_prop: list[int], prop: str): ...
986
982
 
987
983
  @overload
988
984
  def __init__(self, mapping: Mapping[str, Any], /): ...
@@ -1014,10 +1010,10 @@ class ParentA(Model):
1014
1010
 
1015
1011
  class ParentB(ParentA):
1016
1012
  prop: str = rest_field()
1017
- bcd_prop: Optional[List["ParentB"]] = rest_field(name="bcdProp")
1013
+ bcd_prop: Optional[list["ParentB"]] = rest_field(name="bcdProp")
1018
1014
 
1019
1015
  @overload
1020
- def __init__(self, *, prop: Any, bcd_prop: Optional[List["ParentB"]] = None): ...
1016
+ def __init__(self, *, prop: Any, bcd_prop: Optional[list["ParentB"]] = None): ...
1021
1017
 
1022
1018
  @overload
1023
1019
  def __init__(self, mapping: Mapping[str, Any], /): ...
@@ -1031,7 +1027,7 @@ class ParentC(ParentB):
1031
1027
  cd_prop: ParentA = rest_field(name="cdProp")
1032
1028
 
1033
1029
  @overload
1034
- def __init__(self, *, prop: Any, bcd_prop: List[ParentB], cd_prop: ParentA, **kwargs): ...
1030
+ def __init__(self, *, prop: Any, bcd_prop: list[ParentB], cd_prop: ParentA, **kwargs): ...
1035
1031
 
1036
1032
  @overload
1037
1033
  def __init__(self, mapping: Mapping[str, Any], /): ...
@@ -1041,16 +1037,16 @@ class ParentC(ParentB):
1041
1037
 
1042
1038
 
1043
1039
  class ChildD(ParentC):
1044
- d_prop: Tuple[ParentA, ParentB, ParentC, Optional["ChildD"]] = rest_field(name="dProp")
1040
+ d_prop: tuple[ParentA, ParentB, ParentC, Optional["ChildD"]] = rest_field(name="dProp")
1045
1041
 
1046
1042
  @overload
1047
1043
  def __init__(
1048
1044
  self,
1049
1045
  *,
1050
1046
  prop: Any,
1051
- bcd_prop: List[ParentB],
1047
+ bcd_prop: list[ParentB],
1052
1048
  cd_prop: ParentA,
1053
- d_prop: Tuple[ParentA, ParentB, ParentC, Optional["ChildD"]],
1049
+ d_prop: tuple[ParentA, ParentB, ParentC, Optional["ChildD"]],
1054
1050
  ): ...
1055
1051
 
1056
1052
  @overload
@@ -1120,13 +1116,13 @@ def test_model_dict_comparisons_list():
1120
1116
  super().__init__(*args, **kwargs)
1121
1117
 
1122
1118
  class Outer(Model):
1123
- inner: List[Inner] = rest_field()
1119
+ inner: list[Inner] = rest_field()
1124
1120
 
1125
1121
  @overload
1126
1122
  def __init__(
1127
1123
  self,
1128
1124
  *,
1129
- inner: List[Inner],
1125
+ inner: list[Inner],
1130
1126
  ): ...
1131
1127
 
1132
1128
  @overload
@@ -1168,13 +1164,13 @@ def test_model_dict_comparisons_dict():
1168
1164
  super().__init__(*args, **kwargs)
1169
1165
 
1170
1166
  class Outer(Model):
1171
- inner: Dict[str, Inner] = rest_field()
1167
+ inner: dict[str, Inner] = rest_field()
1172
1168
 
1173
1169
  @overload
1174
1170
  def __init__(
1175
1171
  self,
1176
1172
  *,
1177
- inner: Dict[str, Inner],
1173
+ inner: dict[str, Inner],
1178
1174
  ): ...
1179
1175
 
1180
1176
  @overload
@@ -1366,7 +1362,7 @@ def test_multiple_inheritance_mro():
1366
1362
  class Feline(Model):
1367
1363
  meows: bool = rest_field()
1368
1364
  hisses: bool = rest_field()
1369
- siblings: Optional[List["Feline"]] = rest_field()
1365
+ siblings: Optional[list["Feline"]] = rest_field()
1370
1366
 
1371
1367
  @overload
1372
1368
  def __init__(
@@ -1374,7 +1370,7 @@ class Feline(Model):
1374
1370
  *,
1375
1371
  meows: bool,
1376
1372
  hisses: bool,
1377
- siblings: Optional[List["Feline"]] = None,
1373
+ siblings: Optional[list["Feline"]] = None,
1378
1374
  ): ...
1379
1375
 
1380
1376
  @overload
@@ -1429,7 +1425,7 @@ class Cat(PetModel, Feline):
1429
1425
  meows: bool,
1430
1426
  hisses: bool,
1431
1427
  likes_milk: bool,
1432
- siblings: Optional[List[Feline]],
1428
+ siblings: Optional[list[Feline]],
1433
1429
  ): ...
1434
1430
 
1435
1431
  @overload
@@ -1464,7 +1460,7 @@ class Kitten(Cat, CuteThing):
1464
1460
  meows: bool,
1465
1461
  hisses: bool,
1466
1462
  likes_milk: bool,
1467
- siblings: Optional[List[Feline]],
1463
+ siblings: Optional[list[Feline]],
1468
1464
  how_cute_am_i: float,
1469
1465
  eats_mice_yet: bool,
1470
1466
  ): ...
@@ -1900,10 +1896,10 @@ def test_serialization_initialization_and_setting():
1900
1896
 
1901
1897
  def test_copy_of_input():
1902
1898
  class TestModel(Model):
1903
- data: List[int] = rest_field()
1899
+ data: list[int] = rest_field()
1904
1900
 
1905
1901
  @overload
1906
- def __init__(self, *, data: List[int]): ...
1902
+ def __init__(self, *, data: list[int]): ...
1907
1903
 
1908
1904
  @overload
1909
1905
  def __init__(self, mapping: Mapping[str, Any], /): ...
@@ -2092,14 +2088,14 @@ def test_mutability_list():
2092
2088
  super().__init__(*args, **kwargs)
2093
2089
 
2094
2090
  class Middle(Model):
2095
- inner_property: List[Inner] = rest_field(name="innerProperty")
2091
+ inner_property: list[Inner] = rest_field(name="innerProperty")
2096
2092
  prop: str = rest_field()
2097
2093
 
2098
2094
  @overload
2099
2095
  def __init__(
2100
2096
  self,
2101
2097
  *,
2102
- inner_property: List[Inner],
2098
+ inner_property: list[Inner],
2103
2099
  prop: str,
2104
2100
  ): ...
2105
2101
 
@@ -2195,14 +2191,14 @@ def test_mutability_dict():
2195
2191
  super().__init__(*args, **kwargs)
2196
2192
 
2197
2193
  class Middle(Model):
2198
- inner_property: Dict[str, Inner] = rest_field(name="innerProperty")
2194
+ inner_property: dict[str, Inner] = rest_field(name="innerProperty")
2199
2195
  prop: str = rest_field()
2200
2196
 
2201
2197
  @overload
2202
2198
  def __init__(
2203
2199
  self,
2204
2200
  *,
2205
- inner_property: Dict[str, Inner],
2201
+ inner_property: dict[str, Inner],
2206
2202
  prop: str,
2207
2203
  ): ...
2208
2204
 
@@ -2339,14 +2335,14 @@ def test_pop_model():
2339
2335
  super().__init__(*args, **kwargs)
2340
2336
 
2341
2337
  class Middle(Model):
2342
- inner_property: Dict[str, Inner] = rest_field(name="innerProperty")
2338
+ inner_property: dict[str, Inner] = rest_field(name="innerProperty")
2343
2339
  prop: str = rest_field()
2344
2340
 
2345
2341
  @overload
2346
2342
  def __init__(
2347
2343
  self,
2348
2344
  *,
2349
- inner_property: Dict[str, Inner],
2345
+ inner_property: dict[str, Inner],
2350
2346
  prop: str,
2351
2347
  ): ...
2352
2348
 
@@ -2665,7 +2661,7 @@ def test_popitem():
2665
2661
  "cProp": {"cStrProp": "c"},
2666
2662
  }
2667
2663
 
2668
- def _tests(my_dict: Dict[str, Any], my_model: MainModel):
2664
+ def _tests(my_dict: dict[str, Any], my_model: MainModel):
2669
2665
  my_dict = copy.deepcopy(my_dict) # so we don't get rid of the dict each time we run tests
2670
2666
 
2671
2667
  # pop c prop
@@ -2724,7 +2720,7 @@ def test_clear():
2724
2720
  "cProp": {"cStrProp": "c"},
2725
2721
  }
2726
2722
 
2727
- def _tests(my_dict: Dict[str, Any], my_model: MainModel):
2723
+ def _tests(my_dict: dict[str, Any], my_model: MainModel):
2728
2724
  my_dict = copy.deepcopy(my_dict) # so we don't get rid of the dict each time we run tests
2729
2725
 
2730
2726
  assert my_dict["aProp"] == my_model.a_prop == my_model["aProp"] == {"aStrProp": "a"}
@@ -2772,7 +2768,7 @@ def test_update():
2772
2768
  "cProp": {"cStrProp": "c"},
2773
2769
  }
2774
2770
 
2775
- def _tests(my_dict: Dict[str, Any], my_model: MainModel):
2771
+ def _tests(my_dict: dict[str, Any], my_model: MainModel):
2776
2772
  my_dict = copy.deepcopy(my_dict) # so we don't get rid of the dict each time we run tests
2777
2773
 
2778
2774
  assert my_dict["aProp"] == my_model.a_prop == my_model["aProp"] == {"aStrProp": "a"}
@@ -2925,8 +2921,8 @@ def test_complex_byte_wrapper():
2925
2921
  default: Optional[bytes] = rest_field(default=None)
2926
2922
  base64: Optional[bytes] = rest_field(default=None, format="base64")
2927
2923
  base64url: Optional[bytes] = rest_field(default=None, format="base64url")
2928
- list_base64: Optional[List[bytes]] = rest_field(default=None, format="base64")
2929
- map_base64url: Optional[Dict[str, bytes]] = rest_field(default=None, format="base64url")
2924
+ list_base64: Optional[list[bytes]] = rest_field(default=None, format="base64")
2925
+ map_base64url: Optional[dict[str, bytes]] = rest_field(default=None, format="base64url")
2930
2926
 
2931
2927
  @overload
2932
2928
  def __init__(
@@ -2935,8 +2931,8 @@ def test_complex_byte_wrapper():
2935
2931
  default: Optional[bytes] = None,
2936
2932
  base64: Optional[bytes] = None,
2937
2933
  base64url: Optional[bytes] = None,
2938
- list_base64: Optional[List[bytes]] = None,
2939
- map_base64url: Optional[Dict[str, bytes]] = None,
2934
+ list_base64: Optional[list[bytes]] = None,
2935
+ map_base64url: Optional[dict[str, bytes]] = None,
2940
2936
  ): ...
2941
2937
 
2942
2938
  @overload
@@ -2998,8 +2994,8 @@ def test_complex_byte_array_wrapper():
2998
2994
  default: Optional[bytearray] = rest_field(default=None)
2999
2995
  base64: Optional[bytearray] = rest_field(default=None, format="base64")
3000
2996
  base64url: Optional[bytearray] = rest_field(default=None, format="base64url")
3001
- list_base64: Optional[List[bytearray]] = rest_field(default=None, format="base64")
3002
- map_base64url: Optional[Dict[str, bytearray]] = rest_field(default=None, format="base64url")
2997
+ list_base64: Optional[list[bytearray]] = rest_field(default=None, format="base64")
2998
+ map_base64url: Optional[dict[str, bytearray]] = rest_field(default=None, format="base64url")
3003
2999
 
3004
3000
  @overload
3005
3001
  def __init__(
@@ -3008,8 +3004,8 @@ def test_complex_byte_array_wrapper():
3008
3004
  default: Optional[bytearray] = None,
3009
3005
  base64: Optional[bytearray] = None,
3010
3006
  base64url: Optional[bytearray] = None,
3011
- list_base64: Optional[List[bytearray]] = None,
3012
- map_base64url: Optional[Dict[str, bytearray]] = None,
3007
+ list_base64: Optional[list[bytearray]] = None,
3008
+ map_base64url: Optional[dict[str, bytearray]] = None,
3013
3009
  ): ...
3014
3010
 
3015
3011
  @overload
@@ -3072,8 +3068,8 @@ def test_complex_datetime_wrapper():
3072
3068
  rfc3339: datetime.datetime = rest_field(default=None, format="rfc3339")
3073
3069
  rfc7231: datetime.datetime = rest_field(default=None, format="rfc7231")
3074
3070
  unix: datetime.datetime = rest_field(default=None, format="unix-timestamp")
3075
- list_rfc3339: List[datetime.datetime] = rest_field(default=None, format="rfc3339")
3076
- dict_rfc7231: Dict[str, datetime.datetime] = rest_field(default=None, format="rfc7231")
3071
+ list_rfc3339: list[datetime.datetime] = rest_field(default=None, format="rfc3339")
3072
+ dict_rfc7231: dict[str, datetime.datetime] = rest_field(default=None, format="rfc7231")
3077
3073
 
3078
3074
  @overload
3079
3075
  def __init__(
@@ -3083,8 +3079,8 @@ def test_complex_datetime_wrapper():
3083
3079
  rfc3339: Optional[datetime.datetime] = None,
3084
3080
  rfc7231: Optional[datetime.datetime] = None,
3085
3081
  unix: Optional[datetime.datetime] = None,
3086
- list_rfc3339: Optional[List[datetime.datetime]] = None,
3087
- dict_rfc7231: Optional[Dict[str, datetime.datetime]] = None,
3082
+ list_rfc3339: Optional[list[datetime.datetime]] = None,
3083
+ dict_rfc7231: Optional[dict[str, datetime.datetime]] = None,
3088
3084
  ): ...
3089
3085
 
3090
3086
  @overload
@@ -3175,13 +3171,13 @@ def test_complex_date_wrapper():
3175
3171
 
3176
3172
 
3177
3173
  class DictionaryWrapper(Model):
3178
- default_program: Dict[str, str] = rest_field(name="defaultProgram", default=None)
3174
+ default_program: dict[str, str] = rest_field(name="defaultProgram", default=None)
3179
3175
 
3180
3176
  @overload
3181
3177
  def __init__(
3182
3178
  self,
3183
3179
  *,
3184
- default_program: Optional[Dict[str, str]] = None,
3180
+ default_program: Optional[dict[str, str]] = None,
3185
3181
  ): ...
3186
3182
 
3187
3183
  @overload
@@ -3234,13 +3230,13 @@ def test_complex_dictionary_wrapper_none(model: DictionaryWrapper):
3234
3230
 
3235
3231
 
3236
3232
  class ArrayWrapper(Model):
3237
- array: Optional[List[str]] = rest_field(default=None)
3233
+ array: Optional[list[str]] = rest_field(default=None)
3238
3234
 
3239
3235
  @overload
3240
3236
  def __init__(
3241
3237
  self,
3242
3238
  *,
3243
- array: Optional[List[str]] = None,
3239
+ array: Optional[list[str]] = None,
3244
3240
  ): ...
3245
3241
 
3246
3242
  @overload
@@ -3332,7 +3328,7 @@ class DogComplex(PetComplex):
3332
3328
 
3333
3329
  class CatComplex(PetComplex):
3334
3330
  color: Optional[str] = rest_field(default=None)
3335
- hates: Optional[List[DogComplex]] = rest_field(default=None)
3331
+ hates: Optional[list[DogComplex]] = rest_field(default=None)
3336
3332
 
3337
3333
  @overload
3338
3334
  def __init__(
@@ -3342,7 +3338,7 @@ class CatComplex(PetComplex):
3342
3338
  name: Optional[str] = None,
3343
3339
  food: Optional[str] = None,
3344
3340
  color: Optional[str] = None,
3345
- hates: Optional[List[DogComplex]] = None,
3341
+ hates: Optional[list[DogComplex]] = None,
3346
3342
  ): ...
3347
3343
 
3348
3344
  @overload
@@ -3570,10 +3566,10 @@ class ModelWithNamedUnionProperty(Model):
3570
3566
 
3571
3567
 
3572
3568
  class ModelWithSimpleUnionProperty(Model):
3573
- simple_union: Union[int, List[int]] = rest_field(name="simpleUnion")
3569
+ simple_union: Union[int, list[int]] = rest_field(name="simpleUnion")
3574
3570
 
3575
3571
  @overload
3576
- def __init__(self, *, simple_union: Union[int, List[int]]): ...
3572
+ def __init__(self, *, simple_union: Union[int, list[int]]): ...
3577
3573
 
3578
3574
  @overload
3579
3575
  def __init__(self, mapping: Mapping[str, Any]): ...
@@ -3601,7 +3597,7 @@ def test_union():
3601
3597
  def test_as_dict():
3602
3598
  class CatComplex(PetComplex):
3603
3599
  color: Optional[str] = rest_field(default=None)
3604
- hates: Optional[List[DogComplex]] = rest_field(default=None, visibility=["read"])
3600
+ hates: Optional[list[DogComplex]] = rest_field(default=None, visibility=["read"])
3605
3601
 
3606
3602
  @overload
3607
3603
  def __init__(
@@ -3611,7 +3607,7 @@ def test_as_dict():
3611
3607
  name: Optional[str] = None,
3612
3608
  food: Optional[str] = None,
3613
3609
  color: Optional[str] = None,
3614
- hates: Optional[List[DogComplex]] = None,
3610
+ hates: Optional[list[DogComplex]] = None,
3615
3611
  ): ...
3616
3612
 
3617
3613
  @overload
@@ -3636,7 +3632,7 @@ def test_as_dict():
3636
3632
 
3637
3633
 
3638
3634
  class Fish(Model):
3639
- __mapping__: Dict[str, Model] = {}
3635
+ __mapping__: dict[str, Model] = {}
3640
3636
  age: int = rest_field()
3641
3637
  kind: Literal[None] = rest_discriminator(name="kind")
3642
3638
 
@@ -3656,7 +3652,7 @@ class Fish(Model):
3656
3652
 
3657
3653
 
3658
3654
  class Shark(Fish, discriminator="shark"):
3659
- __mapping__: Dict[str, Model] = {}
3655
+ __mapping__: dict[str, Model] = {}
3660
3656
  kind: Literal["shark"] = rest_discriminator(name="kind")
3661
3657
  sharktype: Literal[None] = rest_discriminator(name="sharktype")
3662
3658
 
@@ -3696,8 +3692,8 @@ class GoblinShark(Shark, discriminator="goblin"):
3696
3692
 
3697
3693
  class Salmon(Fish, discriminator="salmon"):
3698
3694
  kind: Literal["salmon"] = rest_discriminator(name="kind")
3699
- friends: Optional[List["Fish"]] = rest_field()
3700
- hate: Optional[Dict[str, "Fish"]] = rest_field()
3695
+ friends: Optional[list["Fish"]] = rest_field()
3696
+ hate: Optional[dict[str, "Fish"]] = rest_field()
3701
3697
  partner: Optional["Fish"] = rest_field()
3702
3698
 
3703
3699
  @overload
@@ -3705,8 +3701,8 @@ class Salmon(Fish, discriminator="salmon"):
3705
3701
  self,
3706
3702
  *,
3707
3703
  age: int,
3708
- friends: Optional[List["Fish"]] = None,
3709
- hate: Optional[Dict[str, "Fish"]] = None,
3704
+ friends: Optional[list["Fish"]] = None,
3705
+ hate: Optional[dict[str, "Fish"]] = None,
3710
3706
  partner: Optional["Fish"] = None,
3711
3707
  ): ...
3712
3708
 
@@ -3994,7 +3990,7 @@ def test_enum_deserialization():
3994
3990
  model = ModelWithEnumProperty(raw_input)
3995
3991
  check_func(model)
3996
3992
 
3997
- result = _deserialize(List[ModelWithEnumProperty], [raw_input])
3993
+ result = _deserialize(list[ModelWithEnumProperty], [raw_input])
3998
3994
  for item in result:
3999
3995
  check_func(item)
4000
3996