@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
@@ -8,7 +8,7 @@ import subprocess
8
8
  import signal
9
9
  import pytest
10
10
  import re
11
- from typing import Literal, List
11
+ from typing import Literal
12
12
  from pathlib import Path
13
13
 
14
14
  FILE_FOLDER = Path(__file__).parent
@@ -191,7 +191,7 @@ SPECIAL_WORDS = [
191
191
 
192
192
 
193
193
  @pytest.fixture
194
- def special_words() -> List[str]:
194
+ def special_words() -> list[str]:
195
195
  return SPECIAL_WORDS
196
196
 
197
197
 
@@ -82,3 +82,75 @@ def test_lro_begin_delete(client):
82
82
  resource_group_name=RESOURCE_GROUP_NAME,
83
83
  order_name="order1",
84
84
  ).result()
85
+
86
+
87
+ def test_optional_body_get(client):
88
+ result = client.optional_body.get(
89
+ resource_group_name=RESOURCE_GROUP_NAME,
90
+ widget_name="widget1",
91
+ )
92
+ assert result.name == "widget1"
93
+ assert (
94
+ result.id
95
+ == "/subscriptions/00000000-0000-0000-0000-000000000000/resourceGroups/test-rg/providers/Azure.ResourceManager.OperationTemplates/widgets/widget1"
96
+ )
97
+ assert result.type == "Azure.ResourceManager.OperationTemplates/widgets"
98
+ assert result.location == "eastus"
99
+ assert result.properties.name == "widget1"
100
+ assert result.properties.description == "A test widget"
101
+ assert result.properties.provisioning_state == "Succeeded"
102
+
103
+
104
+ def test_optional_body_patch_without_body(client):
105
+ result = client.optional_body.patch(
106
+ resource_group_name=RESOURCE_GROUP_NAME,
107
+ widget_name="widget1",
108
+ )
109
+ assert result.name == "widget1"
110
+ assert result.properties.name == "widget1"
111
+ assert result.properties.description == "A test widget"
112
+
113
+
114
+ def test_optional_body_patch_with_body(client):
115
+ result = client.optional_body.patch(
116
+ resource_group_name=RESOURCE_GROUP_NAME,
117
+ widget_name="widget1",
118
+ properties=models.Widget(
119
+ location="eastus",
120
+ properties=models.WidgetProperties(name="updated-widget", description="Updated description"),
121
+ ),
122
+ )
123
+ assert result.name == "widget1"
124
+ assert result.properties.name == "updated-widget"
125
+ assert result.properties.description == "Updated description"
126
+
127
+
128
+ def test_optional_body_post_without_body(client):
129
+ result = client.optional_body.post(
130
+ resource_group_name=RESOURCE_GROUP_NAME,
131
+ widget_name="widget1",
132
+ )
133
+ assert result.result == "Action completed successfully"
134
+
135
+
136
+ def test_optional_body_post_with_body(client):
137
+ result = client.optional_body.post(
138
+ resource_group_name=RESOURCE_GROUP_NAME,
139
+ widget_name="widget1",
140
+ body=models.ActionRequest(action_type="perform", parameters="test-parameters"),
141
+ )
142
+ assert result.result == "Action completed successfully with parameters"
143
+
144
+
145
+ def test_optional_body_provider_post_without_body(client):
146
+ result = client.optional_body.provider_post()
147
+ assert result.total_allowed == 50
148
+ assert result.status == "Changed to default allowance"
149
+
150
+
151
+ def test_optional_body_provider_post_with_body(client):
152
+ result = client.optional_body.provider_post(
153
+ body=models.ChangeAllowanceRequest(total_allowed=100, reason="Increased demand"),
154
+ )
155
+ assert result.total_allowed == 100
156
+ assert result.status == "Changed to requested allowance"
@@ -0,0 +1,17 @@
1
+ # -------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Corporation. All rights reserved.
3
+ # Licensed under the MIT License. See License.txt in the project root for
4
+ # license information.
5
+ # --------------------------------------------------------------------------
6
+ import pytest
7
+ from client.alternateapiversion.service.header import HeaderClient
8
+
9
+
10
+ @pytest.fixture
11
+ def client():
12
+ with HeaderClient(endpoint="http://localhost:3000") as client:
13
+ yield client
14
+
15
+
16
+ def test_header_api_version(client: HeaderClient):
17
+ client.header_api_version()
@@ -0,0 +1,17 @@
1
+ # -------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Corporation. All rights reserved.
3
+ # Licensed under the MIT License. See License.txt in the project root for
4
+ # license information.
5
+ # --------------------------------------------------------------------------
6
+ import pytest
7
+ from client.alternateapiversion.service.path import PathClient
8
+
9
+
10
+ @pytest.fixture
11
+ def client():
12
+ with PathClient(endpoint="http://localhost:3000") as client:
13
+ yield client
14
+
15
+
16
+ def test_path_api_version(client: PathClient):
17
+ client.path_api_version()
@@ -0,0 +1,17 @@
1
+ # -------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Corporation. All rights reserved.
3
+ # Licensed under the MIT License. See License.txt in the project root for
4
+ # license information.
5
+ # --------------------------------------------------------------------------
6
+ import pytest
7
+ from client.alternateapiversion.service.query import QueryClient
8
+
9
+
10
+ @pytest.fixture
11
+ def client():
12
+ with QueryClient(endpoint="http://localhost:3000") as client:
13
+ yield client
14
+
15
+
16
+ def test_query_api_version(client: QueryClient):
17
+ client.query_api_version()
@@ -4,7 +4,7 @@
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
6
  import pytest
7
- from client.naming import NamingClient, models
7
+ from client.naming.main import NamingClient, models
8
8
 
9
9
 
10
10
  @pytest.fixture
@@ -42,11 +42,11 @@ def test_header_response(client: NamingClient):
42
42
 
43
43
 
44
44
  def test_model_client(client: NamingClient):
45
- client.client_model.client(models.ClientModel(default_name=True))
45
+ client.model_client.client(models.ClientModel(default_name=True))
46
46
 
47
47
 
48
48
  def test_model_language(client: NamingClient):
49
- client.client_model.language(models.PythonModel(default_name=True))
49
+ client.model_client.language(models.PythonModel(default_name=True))
50
50
 
51
51
 
52
52
  def test_union_enum_member_name(client: NamingClient):
@@ -0,0 +1,35 @@
1
+ # -------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Corporation. All rights reserved.
3
+ # Licensed under the MIT License. See License.txt in the project root for
4
+ # license information.
5
+ # --------------------------------------------------------------------------
6
+ import pytest
7
+ from client.naming.enumconflict import EnumConflictClient
8
+ from client.naming.enumconflict.firstnamespace import models as first_models
9
+ from client.naming.enumconflict.secondnamespace import models as second_models
10
+
11
+
12
+ @pytest.fixture
13
+ def client():
14
+ with EnumConflictClient() as client:
15
+ yield client
16
+
17
+
18
+ def test_first_operations_first(client: EnumConflictClient):
19
+ """Test enum with same name in different namespace - first namespace."""
20
+ body = first_models.FirstModel(status=first_models.Status.ACTIVE, name="test")
21
+
22
+ response = client.first_operations.first(body=body)
23
+
24
+ assert response.status == "active"
25
+ assert response.name == "test"
26
+
27
+
28
+ def test_second_operations_second(client: EnumConflictClient):
29
+ """Test enum with same name in different namespace - second namespace."""
30
+ body = second_models.SecondModel(status=second_models.SecondStatus.RUNNING, description="test description")
31
+
32
+ response = client.second_operations.second(body=body)
33
+
34
+ assert response.status == "running"
35
+ assert response.description == "test description"
@@ -0,0 +1,25 @@
1
+ import pytest
2
+ from client.overload import OverloadClient
3
+
4
+
5
+ class TestClientOverload:
6
+ @pytest.fixture
7
+ def client(self):
8
+ return OverloadClient(endpoint="http://localhost:3000")
9
+
10
+ def test_list(self, client: OverloadClient):
11
+ result = client.list()
12
+ assert len(result) == 2
13
+ assert result[0]["id"] == "1"
14
+ assert result[0]["name"] == "foo"
15
+ assert result[0]["scope"] == "car"
16
+ assert result[1]["id"] == "2"
17
+ assert result[1]["name"] == "bar"
18
+ assert result[1]["scope"] == "bike"
19
+
20
+ def test_list_by_scope(self, client: OverloadClient):
21
+ result = client.list_by_scope("car")
22
+ assert len(result) == 1
23
+ assert result[0]["id"] == "1"
24
+ assert result[0]["name"] == "foo"
25
+ assert result[0]["scope"] == "car"
@@ -4,6 +4,9 @@ azure-mgmt-core==1.6.0
4
4
 
5
5
  # only for azure
6
6
  -e ./generated/azure-client-generator-core-access
7
+ -e ./generated/azure-client-generator-core-api-version-header
8
+ -e ./generated/azure-client-generator-core-api-version-path
9
+ -e ./generated/azure-client-generator-core-api-version-query
7
10
  -e ./generated/azure-client-generator-core-client-initialization
8
11
  -e ./generated/azure-client-generator-core-deserialize-empty-string-as-null
9
12
  -e ./generated/azure-client-generator-core-flatten-property
@@ -28,6 +31,8 @@ azure-mgmt-core==1.6.0
28
31
  -e ./generated/client-namespace
29
32
  -e ./generated/azure-payload-pageable
30
33
  -e ./generated/client-naming
34
+ -e ./generated/client-naming-enum-conflict
35
+ -e ./generated/client-overload
31
36
  -e ./generated/client-structure-default
32
37
  -e ./generated/client-structure-multiclient
33
38
  -e ./generated/client-structure-renamedoperation
@@ -9,7 +9,6 @@ import signal
9
9
  import pytest
10
10
  import re
11
11
  from pathlib import Path
12
- from typing import List
13
12
 
14
13
  FILE_FOLDER = Path(__file__).parent
15
14
 
@@ -76,7 +75,7 @@ SPECIAL_WORDS = [
76
75
 
77
76
 
78
77
  @pytest.fixture
79
- def special_words() -> List[str]:
78
+ def special_words() -> list[str]:
80
79
  return SPECIAL_WORDS
81
80
 
82
81