@typespec/http-client-python 0.13.0-dev.1 → 0.13.0-dev.3

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 (128) hide show
  1. package/dist/emitter/types.d.ts.map +1 -1
  2. package/dist/emitter/types.js +12 -5
  3. package/dist/emitter/types.js.map +1 -1
  4. package/emitter/src/types.ts +14 -7
  5. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  6. package/eng/scripts/setup/__pycache__/package_manager.cpython-39.pyc +0 -0
  7. package/eng/scripts/setup/__pycache__/venvtools.cpython-39.pyc +0 -0
  8. package/eng/scripts/setup/build_pygen_wheel.py +9 -10
  9. package/eng/scripts/setup/install.py +13 -17
  10. package/eng/scripts/setup/package_manager.py +139 -0
  11. package/eng/scripts/setup/prepare.py +4 -12
  12. package/eng/scripts/setup/venvtools.py +1 -42
  13. package/generator/build/lib/pygen/__init__.py +176 -2
  14. package/generator/build/lib/pygen/black.py +1 -1
  15. package/generator/build/lib/pygen/codegen/__init__.py +4 -256
  16. package/generator/build/lib/pygen/codegen/_utils.py +0 -3
  17. package/generator/build/lib/pygen/codegen/models/__init__.py +1 -1
  18. package/generator/build/lib/pygen/codegen/models/base_builder.py +1 -1
  19. package/generator/build/lib/pygen/codegen/models/client.py +12 -12
  20. package/generator/build/lib/pygen/codegen/models/code_model.py +10 -9
  21. package/generator/build/lib/pygen/codegen/models/enum_type.py +4 -4
  22. package/generator/build/lib/pygen/codegen/models/imports.py +1 -1
  23. package/generator/build/lib/pygen/codegen/models/list_type.py +6 -6
  24. package/generator/build/lib/pygen/codegen/models/lro_operation.py +1 -1
  25. package/generator/build/lib/pygen/codegen/models/operation.py +16 -16
  26. package/generator/build/lib/pygen/codegen/models/operation_group.py +4 -4
  27. package/generator/build/lib/pygen/codegen/models/paging_operation.py +4 -4
  28. package/generator/build/lib/pygen/codegen/models/parameter.py +8 -8
  29. package/generator/build/lib/pygen/codegen/models/property.py +7 -1
  30. package/generator/build/lib/pygen/codegen/models/request_builder.py +2 -2
  31. package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +2 -2
  32. package/generator/build/lib/pygen/codegen/models/response.py +3 -3
  33. package/generator/build/lib/pygen/codegen/serializers/__init__.py +27 -28
  34. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +31 -31
  35. package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +4 -4
  36. package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +4 -4
  37. package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +1 -1
  38. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +1 -1
  39. package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +1 -1
  40. package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +1 -1
  41. package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +5 -5
  42. package/generator/build/lib/pygen/codegen/templates/config.py.jinja2 +1 -1
  43. package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +1 -1
  44. package/generator/build/lib/pygen/codegen/templates/conftest.py.jinja2 +1 -1
  45. package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +1 -1
  46. package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +2 -2
  47. package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +2 -2
  48. package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +1 -1
  49. package/generator/build/lib/pygen/codegen/templates/operation_groups_container.py.jinja2 +1 -1
  50. package/generator/build/lib/pygen/codegen/templates/operation_tools.jinja2 +1 -1
  51. package/generator/build/lib/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +1 -1
  52. package/generator/build/lib/pygen/codegen/templates/packaging_templates/README.md.jinja2 +38 -7
  53. package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  54. package/generator/build/lib/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +9 -9
  55. package/generator/build/lib/pygen/codegen/templates/request_builder.py.jinja2 +1 -1
  56. package/generator/build/lib/pygen/codegen/templates/sample.py.jinja2 +1 -1
  57. package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +6 -6
  58. package/generator/build/lib/pygen/codegen/templates/version.py.jinja2 +1 -1
  59. package/generator/build/lib/pygen/preprocess/__init__.py +1 -1
  60. package/generator/build/lib/pygen/utils.py +4 -0
  61. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  62. package/generator/pygen/__init__.py +176 -2
  63. package/generator/pygen/black.py +1 -1
  64. package/generator/pygen/codegen/__init__.py +4 -256
  65. package/generator/pygen/codegen/_utils.py +0 -3
  66. package/generator/pygen/codegen/models/__init__.py +1 -1
  67. package/generator/pygen/codegen/models/base_builder.py +1 -1
  68. package/generator/pygen/codegen/models/client.py +12 -12
  69. package/generator/pygen/codegen/models/code_model.py +10 -9
  70. package/generator/pygen/codegen/models/enum_type.py +4 -4
  71. package/generator/pygen/codegen/models/imports.py +1 -1
  72. package/generator/pygen/codegen/models/list_type.py +6 -6
  73. package/generator/pygen/codegen/models/lro_operation.py +1 -1
  74. package/generator/pygen/codegen/models/operation.py +16 -16
  75. package/generator/pygen/codegen/models/operation_group.py +4 -4
  76. package/generator/pygen/codegen/models/paging_operation.py +4 -4
  77. package/generator/pygen/codegen/models/parameter.py +8 -8
  78. package/generator/pygen/codegen/models/property.py +7 -1
  79. package/generator/pygen/codegen/models/request_builder.py +2 -2
  80. package/generator/pygen/codegen/models/request_builder_parameter.py +2 -2
  81. package/generator/pygen/codegen/models/response.py +3 -3
  82. package/generator/pygen/codegen/serializers/__init__.py +27 -28
  83. package/generator/pygen/codegen/serializers/builder_serializer.py +31 -31
  84. package/generator/pygen/codegen/serializers/client_serializer.py +4 -4
  85. package/generator/pygen/codegen/serializers/general_serializer.py +4 -4
  86. package/generator/pygen/codegen/serializers/metadata_serializer.py +1 -1
  87. package/generator/pygen/codegen/serializers/model_serializer.py +1 -1
  88. package/generator/pygen/codegen/serializers/operations_init_serializer.py +1 -1
  89. package/generator/pygen/codegen/serializers/sample_serializer.py +1 -1
  90. package/generator/pygen/codegen/serializers/test_serializer.py +5 -5
  91. package/generator/pygen/codegen/templates/config.py.jinja2 +1 -1
  92. package/generator/pygen/codegen/templates/config_container.py.jinja2 +1 -1
  93. package/generator/pygen/codegen/templates/conftest.py.jinja2 +1 -1
  94. package/generator/pygen/codegen/templates/init.py.jinja2 +1 -1
  95. package/generator/pygen/codegen/templates/metadata.json.jinja2 +2 -2
  96. package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +2 -2
  97. package/generator/pygen/codegen/templates/operation_group.py.jinja2 +1 -1
  98. package/generator/pygen/codegen/templates/operation_groups_container.py.jinja2 +1 -1
  99. package/generator/pygen/codegen/templates/operation_tools.jinja2 +1 -1
  100. package/generator/pygen/codegen/templates/packaging_templates/MANIFEST.in.jinja2 +1 -1
  101. package/generator/pygen/codegen/templates/packaging_templates/README.md.jinja2 +38 -7
  102. package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  103. package/generator/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +9 -9
  104. package/generator/pygen/codegen/templates/request_builder.py.jinja2 +1 -1
  105. package/generator/pygen/codegen/templates/sample.py.jinja2 +1 -1
  106. package/generator/pygen/codegen/templates/test.py.jinja2 +6 -6
  107. package/generator/pygen/codegen/templates/version.py.jinja2 +1 -1
  108. package/generator/pygen/preprocess/__init__.py +1 -1
  109. package/generator/pygen/utils.py +4 -0
  110. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_commonproperties_async.py +31 -0
  111. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_largeheader_async.py +30 -0
  112. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_nonresource_async.py +36 -0
  113. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_client_initialization_async.py +9 -0
  114. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_deserialize_empty_string_as_null_async.py +20 -0
  115. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_usage_async.py +7 -0
  116. package/generator/test/azure/mock_api_tests/asynctests/test_azure_encode_duration_async.py +19 -0
  117. package/generator/test/azure/mock_api_tests/test_azure_arm_commonproperties.py +29 -0
  118. package/generator/test/azure/mock_api_tests/test_azure_arm_largeheader.py +27 -0
  119. package/generator/test/azure/mock_api_tests/test_azure_arm_nonresource.py +34 -0
  120. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_client_initialization.py +8 -0
  121. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_deserialize_empty_string_as_null.py +19 -0
  122. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_usage.py +4 -0
  123. package/generator/test/azure/mock_api_tests/test_azure_encode_duration.py +18 -0
  124. package/generator/test/azure/requirements.txt +4 -0
  125. package/generator/test/unittests/test_optional_return_type.py +5 -5
  126. package/generator/test/unittests/test_parameter_ordering.py +5 -5
  127. package/generator/test/unittests/test_sort_schema.py +4 -4
  128. package/package.json +1 -1
@@ -5,18 +5,18 @@
5
5
  {{ code_model.license_header }}
6
6
  {% endif %}
7
7
 
8
- {% if package_mode %}
8
+ {% if options["package-mode"] %}
9
9
 
10
10
  import os
11
11
  import re
12
12
  {% endif %}
13
13
  from setuptools import setup, find_packages
14
14
 
15
- {% set package_name = package_name or code_model.clients[0].name %}
15
+ {% set package_name = options["package-name"] or code_model.clients[0].name %}
16
16
 
17
17
  PACKAGE_NAME = "{{ package_name|lower }}"
18
- {% if package_mode %}
19
- PACKAGE_PPRINT_NAME = "{{ package_pprint_name }}"
18
+ {% if options["package-mode"] %}
19
+ PACKAGE_PPRINT_NAME = "{{ options["package-pprint-name"] }}"
20
20
  {% if code_model.is_tsp %}
21
21
  PACKAGE_NAMESPACE = "{{ code_model.namespace|lower }}"
22
22
 
@@ -40,7 +40,7 @@ if not version:
40
40
  {% set author_email = "azpysdkhelp@microsoft.com" %}
41
41
  {% set url = "https://github.com/Azure/azure-sdk-for-python/tree/main/sdk" %}
42
42
  {% else %}
43
- version = "{{ package_version }}"
43
+ version = "{{ options.get("package-version", "unknown") }}"
44
44
  {% set description = "\"%s\""|format(package_name) %}
45
45
  {% set long_description = code_model.description %}
46
46
  {% set author_email = "" %}
@@ -52,7 +52,7 @@ setup(
52
52
  name=PACKAGE_NAME,
53
53
  version=version,
54
54
  description={{ description }},
55
- {% if package_mode %}
55
+ {% if options["package-mode"] %}
56
56
  long_description=open("README.md", "r").read(),
57
57
  long_description_content_type="text/markdown",
58
58
  license="MIT License",
@@ -63,7 +63,7 @@ setup(
63
63
  url="{{ url }}",
64
64
  keywords="azure, azure sdk",
65
65
  {% endif %}
66
- {% if package_mode %}
66
+ {% if options["package-mode"] %}
67
67
  classifiers=[
68
68
  "Development Status :: {{ dev_status }}",
69
69
  "Programming Language :: Python",
@@ -100,7 +100,7 @@ setup(
100
100
  {% else %}
101
101
  "isodate>={{ VERSION_MAP["isodate"] }}",
102
102
  {% endif %}
103
- {% if azure_arm %}
103
+ {% if code_model.options["azure-arm"] %}
104
104
  "azure-mgmt-core>={{ VERSION_MAP["azure-mgmt-core"] }}",
105
105
  {% elif code_model.is_azure_flavor %}
106
106
  "azure-core>={{ VERSION_MAP["azure-core"] }}",
@@ -109,7 +109,7 @@ setup(
109
109
  {% endif %}
110
110
  "typing-extensions>={{ VERSION_MAP['typing-extensions'] }}",
111
111
  ],
112
- {% if package_mode %}
112
+ {% if options["package-mode"] %}
113
113
  python_requires=">={{ MIN_PYTHON_VERSION }}",
114
114
  {% else %}
115
115
  long_description="""\
@@ -1,7 +1,7 @@
1
1
  {% import 'keywords.jinja2' as keywords with context %}
2
2
  {% import 'operation_tools.jinja2' as op_tools with context %}
3
3
  {{ request_builder_serializer.method_signature_and_response_type_annotation(request_builder) }}
4
- {% if code_model.options["builders_visibility"] == "public" %}
4
+ {% if code_model.options["builders-visibility"] == "public" %}
5
5
  {{ op_tools.description(request_builder, request_builder_serializer) | indent }}
6
6
  {% endif %}
7
7
  {% if not request_builder.is_overload %}
@@ -11,7 +11,7 @@
11
11
  {% if "credential" in client_params and aad_token in client_params["credential"] %}
12
12
  pip install azure-identity
13
13
  {% endif %}
14
- pip install {{ (code_model.options["package_name"] or code_model.clients[0].name)|lower }}
14
+ pip install {{ (code_model.options.get("package-name") or code_model.clients[0].name)|lower }}
15
15
  # USAGE
16
16
  python {{ file_name }}
17
17
  {% if "credential" in client_params and aad_token in client_params["credential"] %}
@@ -1,5 +1,5 @@
1
1
  {% set prefix_lower = test.prefix|lower %}
2
- {% set client_var = "self.client" if code_model.options["azure_arm"] else "client" %}
2
+ {% set client_var = "self.client" if code_model.options["azure-arm"] else "client" %}
3
3
  {% set async = "async " if test.async_mode else "" %}
4
4
  {% set async_suffix = "_async" if test.async_mode else "" %}
5
5
  # coding=utf-8
@@ -9,13 +9,13 @@
9
9
  import pytest
10
10
  {{ imports }}
11
11
 
12
- {% if code_model.options["azure_arm"] %}
12
+ {% if code_model.options["azure-arm"] %}
13
13
  AZURE_LOCATION = "eastus"
14
14
  {% endif %}
15
15
 
16
16
  @pytest.mark.skip("you may need to update the auto-generated test case before run it")
17
17
  class {{ test.test_class_name }}({{ test.base_test_class_name }}):
18
- {% if code_model.options["azure_arm"] %}
18
+ {% if code_model.options["azure-arm"] %}
19
19
  def setup_method(self, method):
20
20
  {% if test.async_mode %}
21
21
  self.client = self.create_mgmt_client({{ test.client_name }}, is_async=True)
@@ -24,13 +24,13 @@ class {{ test.test_class_name }}({{ test.base_test_class_name }}):
24
24
  {% endif %}
25
25
  {% endif %}
26
26
  {% for testcase in test.testcases %}
27
- {% if code_model.options["azure_arm"] %}
27
+ {% if code_model.options["azure-arm"] %}
28
28
  @{{ test.preparer_name }}(location=AZURE_LOCATION)
29
29
  {% else %}
30
30
  @{{ test.preparer_name }}()
31
31
  {% endif %}
32
32
  @recorded_by_proxy{{ async_suffix }}
33
- {% if code_model.options["azure_arm"] %}
33
+ {% if code_model.options["azure-arm"] %}
34
34
  {{ async }}def test_{{ testcase.name }}(self, resource_group):
35
35
  {% else %}
36
36
  {{ async }}def test_{{ testcase.name }}(self, {{ prefix_lower }}_endpoint):
@@ -38,7 +38,7 @@ class {{ test.test_class_name }}({{ test.base_test_class_name }}):
38
38
  {% endif %}
39
39
  {{testcase.response }}{{ client_var }}{{ testcase.operation_group_prefix }}.{{ testcase.operation.name }}(
40
40
  {% for key, value in testcase.params.items() %}
41
- {% if code_model.options["azure_arm"] and key == "resource_group_name" %}
41
+ {% if code_model.options["azure-arm"] and key == "resource_group_name" %}
42
42
  {{ key }}=resource_group.name,
43
43
  {% else %}
44
44
  {{ key }}={{ value|indent(12) }},
@@ -3,4 +3,4 @@
3
3
  {{ code_model.license_header }}
4
4
  {% endif %}
5
5
 
6
- VERSION = "{{ code_model.options['package_version'] }}"
6
+ VERSION = "{{ code_model.options.get("package-version") }}"
@@ -210,7 +210,7 @@ class PreProcessPlugin(YamlUpdatePlugin):
210
210
  if not (self.is_tsp and has_multi_part_content_type(body_parameter)):
211
211
  body_parameter["type"]["types"].append(KNOWN_TYPES["binary"])
212
212
 
213
- if origin_type == "model" and is_dpg_model and self.models_mode == "dpg":
213
+ if origin_type == "model" and is_dpg_model and self.options["models-mode"] == "dpg":
214
214
  body_parameter["type"]["types"].insert(1, KNOWN_TYPES["any-object"])
215
215
  code_model["types"].append(body_parameter["type"])
216
216
 
@@ -7,6 +7,10 @@ from typing import Any, Dict, Tuple, List
7
7
  import re
8
8
  import argparse
9
9
 
10
+ SWAGGER_PACKAGE_MODE = ["mgmtplane", "dataplane"] # for backward compatibility
11
+ TYPESPEC_PACKAGE_MODE = ["azure-mgmt", "azure-dataplane", "generic"]
12
+ VALID_PACKAGE_MODE = SWAGGER_PACKAGE_MODE + TYPESPEC_PACKAGE_MODE
13
+
10
14
 
11
15
  def update_enum_value(name: str, value: Any, description: str, enum_type: Dict[str, Any]) -> Dict[str, Any]:
12
16
  return {
@@ -6,6 +6,7 @@
6
6
  import pytest
7
7
  from azure.resourcemanager.commonproperties.aio import CommonPropertiesClient
8
8
  from azure.resourcemanager.commonproperties import models
9
+ from azure.core import exceptions
9
10
 
10
11
  SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000"
11
12
  RESOURCE_GROUP_NAME = "test-rg"
@@ -61,3 +62,33 @@ async def test_managed_identity_update_with_user_assigned_and_system_assigned(cl
61
62
  assert result.location == "eastus"
62
63
  assert result.identity.type == "SystemAssigned,UserAssigned"
63
64
  assert result.properties.provisioning_state == "Succeeded"
65
+
66
+
67
+ @pytest.mark.asyncio
68
+ async def test_error_get_for_predefined_error(client):
69
+ try:
70
+ await client.error.get_for_predefined_error(
71
+ resource_group_name=RESOURCE_GROUP_NAME,
72
+ confidential_resource_name="confidential",
73
+ )
74
+ except exceptions.ResourceNotFoundError as e:
75
+ assert e.status_code == 404
76
+ assert (
77
+ e.error.message
78
+ == "The Resource 'Azure.ResourceManager.CommonProperties/confidentialResources/confidential' under resource group 'test-rg' was not found."
79
+ )
80
+
81
+
82
+ @pytest.mark.asyncio
83
+ async def test_error_create_for_user_defined_error(client):
84
+ try:
85
+ await client.error.create_for_user_defined_error(
86
+ resource_group_name=RESOURCE_GROUP_NAME,
87
+ confidential_resource_name="confidential",
88
+ resource=models.ConfidentialResource(
89
+ location="eastus", properties=models.ConfidentialResourceProperties(username="00")
90
+ ),
91
+ )
92
+ except exceptions.HttpResponseError as e:
93
+ assert e.status_code == 400
94
+ assert e.error.message == "Username should not contain only numbers."
@@ -0,0 +1,30 @@
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 azure.resourcemanager.largeheader.aio import LargeHeaderClient
8
+ from azure.resourcemanager.largeheader import models
9
+
10
+ SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000"
11
+ RESOURCE_GROUP_NAME = "test-rg"
12
+
13
+
14
+ @pytest.fixture
15
+ async def client(credential, authentication_policy):
16
+ async with LargeHeaderClient(
17
+ credential, SUBSCRIPTION_ID, "http://localhost:3000", authentication_policy=authentication_policy
18
+ ) as client:
19
+ yield client
20
+
21
+
22
+ @pytest.mark.asyncio
23
+ async def test_large_headers_begin_two6_k(client: LargeHeaderClient):
24
+ result = await (
25
+ await client.large_headers.begin_two6_k(
26
+ resource_group_name=RESOURCE_GROUP_NAME,
27
+ large_header_name="header1",
28
+ )
29
+ ).result()
30
+ assert result == models.CancelResult(succeeded=True)
@@ -0,0 +1,36 @@
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 azure.resourcemanager.nonresource.aio import NonResourceClient
8
+ from azure.resourcemanager.nonresource import models
9
+
10
+ SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000"
11
+ RESOURCE_GROUP_NAME = "test-rg"
12
+
13
+
14
+ @pytest.fixture
15
+ async def client(credential, authentication_policy):
16
+ async with NonResourceClient(
17
+ credential, SUBSCRIPTION_ID, "http://localhost:3000", authentication_policy=authentication_policy
18
+ ) as client:
19
+ yield client
20
+
21
+
22
+ @pytest.mark.asyncio
23
+ async def test_non_resource_create(client: NonResourceClient):
24
+ result = await client.non_resource_operations.create(
25
+ location="eastus", parameter="hello", body=models.NonResource(id="id", name="hello", type="nonResource")
26
+ )
27
+ assert result == models.NonResource(id="id", name="hello", type="nonResource")
28
+
29
+
30
+ @pytest.mark.asyncio
31
+ async def test_non_resource_get(client: NonResourceClient):
32
+ result = await client.non_resource_operations.get(
33
+ location="eastus",
34
+ parameter="hello",
35
+ )
36
+ assert result == models.NonResource(id="id", name="hello", type="nonResource")
@@ -10,6 +10,7 @@ from specs.azure.clientgenerator.core.clientinitialization.aio import (
10
10
  MixedParamsClient,
11
11
  PathParamClient,
12
12
  ParamAliasClient,
13
+ ParentClient,
13
14
  )
14
15
  from specs.azure.clientgenerator.core.clientinitialization.models import Input
15
16
 
@@ -48,3 +49,11 @@ async def test_param_alias_client():
48
49
  async with ParamAliasClient("sample-blob") as client:
49
50
  await client.with_aliased_name()
50
51
  await client.with_original_name()
52
+
53
+
54
+ # @pytest.mark.asyncio
55
+ # async def test_parent_child_client():
56
+ # async with ParentClient() as client:
57
+ # await client.child_client.with_query()
58
+ # await client.child_client.get_standalone()
59
+ # await client.child_client.delete_standalone()
@@ -0,0 +1,20 @@
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 specs.azure.clientgenerator.core.emptystring.aio import DeserializeEmptyStringAsNullClient
8
+ from specs.azure.clientgenerator.core.emptystring import models
9
+
10
+
11
+ @pytest.fixture
12
+ async def client():
13
+ async with DeserializeEmptyStringAsNullClient() as client:
14
+ yield client
15
+
16
+
17
+ @pytest.mark.asyncio
18
+ async def test_get(client: DeserializeEmptyStringAsNullClient):
19
+ result = await client.get()
20
+ assert result == models.ResponseModel(sample_url="")
@@ -29,3 +29,10 @@ async def test_model_usage(client: UsageClient):
29
29
  assert models.RoundTripModel(
30
30
  result=models.ResultModel(name="Madge")
31
31
  ) == await client.model_in_operation.model_in_read_only_property(body=models.RoundTripModel())
32
+
33
+
34
+ # @pytest.mark.asyncio
35
+ # async def test_orphan_model_serializable(client: UsageClient):
36
+ # await client.model_in_operation.orphan_model_serializable(
37
+ # body=models.OrphanModel(model_name="name", description="desc")
38
+ # )
@@ -0,0 +1,19 @@
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 specs.azure.encode.duration.aio import DurationClient
8
+ from specs.azure.encode.duration import models
9
+
10
+
11
+ @pytest.fixture
12
+ async def client():
13
+ async with DurationClient() as client:
14
+ yield client
15
+
16
+
17
+ @pytest.mark.asyncio
18
+ async def test_duration_constant(client: DurationClient):
19
+ await client.duration_constant(models.DurationModel(input="1.02:59:59.5000000"))
@@ -6,6 +6,7 @@
6
6
  import pytest
7
7
  from azure.resourcemanager.commonproperties import CommonPropertiesClient
8
8
  from azure.resourcemanager.commonproperties import models
9
+ from azure.core import exceptions
9
10
 
10
11
  SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000"
11
12
  RESOURCE_GROUP_NAME = "test-rg"
@@ -58,3 +59,31 @@ def test_managed_identity_update_with_user_assigned_and_system_assigned(client):
58
59
  assert result.location == "eastus"
59
60
  assert result.identity.type == "SystemAssigned,UserAssigned"
60
61
  assert result.properties.provisioning_state == "Succeeded"
62
+
63
+
64
+ def test_error_get_for_predefined_error(client):
65
+ try:
66
+ client.error.get_for_predefined_error(
67
+ resource_group_name=RESOURCE_GROUP_NAME,
68
+ confidential_resource_name="confidential",
69
+ )
70
+ except exceptions.ResourceNotFoundError as e:
71
+ assert e.status_code == 404
72
+ assert (
73
+ e.error.message
74
+ == "The Resource 'Azure.ResourceManager.CommonProperties/confidentialResources/confidential' under resource group 'test-rg' was not found."
75
+ )
76
+
77
+
78
+ def test_error_create_for_user_defined_error(client):
79
+ try:
80
+ client.error.create_for_user_defined_error(
81
+ resource_group_name=RESOURCE_GROUP_NAME,
82
+ confidential_resource_name="confidential",
83
+ resource=models.ConfidentialResource(
84
+ location="eastus", properties=models.ConfidentialResourceProperties(username="00")
85
+ ),
86
+ )
87
+ except exceptions.HttpResponseError as e:
88
+ assert e.status_code == 400
89
+ assert e.error.message == "Username should not contain only numbers."
@@ -0,0 +1,27 @@
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 azure.resourcemanager.largeheader import LargeHeaderClient
8
+ from azure.resourcemanager.largeheader import models
9
+
10
+ SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000"
11
+ RESOURCE_GROUP_NAME = "test-rg"
12
+
13
+
14
+ @pytest.fixture
15
+ def client(credential, authentication_policy):
16
+ with LargeHeaderClient(
17
+ credential, SUBSCRIPTION_ID, "http://localhost:3000", authentication_policy=authentication_policy
18
+ ) as client:
19
+ yield client
20
+
21
+
22
+ def test_large_headers_begin_two6_k(client: LargeHeaderClient):
23
+ result = client.large_headers.begin_two6_k(
24
+ resource_group_name=RESOURCE_GROUP_NAME,
25
+ large_header_name="header1",
26
+ ).result()
27
+ assert result == models.CancelResult(succeeded=True)
@@ -0,0 +1,34 @@
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 azure.resourcemanager.nonresource import NonResourceClient
8
+ from azure.resourcemanager.nonresource import models
9
+
10
+ SUBSCRIPTION_ID = "00000000-0000-0000-0000-000000000000"
11
+ RESOURCE_GROUP_NAME = "test-rg"
12
+
13
+
14
+ @pytest.fixture
15
+ def client(credential, authentication_policy):
16
+ with NonResourceClient(
17
+ credential, SUBSCRIPTION_ID, "http://localhost:3000", authentication_policy=authentication_policy
18
+ ) as client:
19
+ yield client
20
+
21
+
22
+ def test_non_resource_create(client: NonResourceClient):
23
+ result = client.non_resource_operations.create(
24
+ location="eastus", parameter="hello", body=models.NonResource(id="id", name="hello", type="nonResource")
25
+ )
26
+ assert result == models.NonResource(id="id", name="hello", type="nonResource")
27
+
28
+
29
+ def test_non_resource_get(client: NonResourceClient):
30
+ result = client.non_resource_operations.get(
31
+ location="eastus",
32
+ parameter="hello",
33
+ )
34
+ assert result == models.NonResource(id="id", name="hello", type="nonResource")
@@ -9,6 +9,7 @@ from specs.azure.clientgenerator.core.clientinitialization import (
9
9
  MixedParamsClient,
10
10
  PathParamClient,
11
11
  ParamAliasClient,
12
+ ParentClient,
12
13
  )
13
14
  from specs.azure.clientgenerator.core.clientinitialization.models import Input
14
15
 
@@ -42,3 +43,10 @@ def test_param_alias_client():
42
43
  with ParamAliasClient("sample-blob") as client:
43
44
  client.with_aliased_name()
44
45
  client.with_original_name()
46
+
47
+
48
+ # def test_parent_child_client():
49
+ # with ParentClient() as client:
50
+ # client.child_client.with_query()
51
+ # client.child_client.get_standalone()
52
+ # client.child_client.delete_standalone()
@@ -0,0 +1,19 @@
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 specs.azure.clientgenerator.core.emptystring import DeserializeEmptyStringAsNullClient
8
+ from specs.azure.clientgenerator.core.emptystring import models
9
+
10
+
11
+ @pytest.fixture
12
+ def client():
13
+ with DeserializeEmptyStringAsNullClient() as client:
14
+ yield client
15
+
16
+
17
+ def test_get(client: DeserializeEmptyStringAsNullClient):
18
+ result = client.get()
19
+ assert result == models.ResponseModel(sample_url="")
@@ -26,3 +26,7 @@ def test_model_usage(client: UsageClient):
26
26
  assert models.RoundTripModel(
27
27
  result=models.ResultModel(name="Madge")
28
28
  ) == client.model_in_operation.model_in_read_only_property(body=models.RoundTripModel())
29
+
30
+
31
+ # def test_orphan_model_serializable(client: UsageClient):
32
+ # client.model_in_operation.orphan_model_serializable(body=models.OrphanModel(model_name="name", description="desc"))
@@ -0,0 +1,18 @@
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 specs.azure.encode.duration import DurationClient
8
+ from specs.azure.encode.duration import models
9
+
10
+
11
+ @pytest.fixture
12
+ def client():
13
+ with DurationClient() as client:
14
+ yield client
15
+
16
+
17
+ def test_duration_constant(client: DurationClient):
18
+ client.duration_constant(models.DurationModel(input="1.02:59:59.5000000"))
@@ -5,6 +5,7 @@ azure-mgmt-core==1.5.0
5
5
  # only for azure
6
6
  -e ./generated/azure-client-generator-core-access
7
7
  -e ./generated/azure-client-generator-core-client-initialization
8
+ -e ./generated/azure-client-generator-core-deserialize-empty-string-as-null
8
9
  -e ./generated/azure-client-generator-core-flatten-property
9
10
  -e ./generated/azure-client-generator-core-usage
10
11
  -e ./generated/azure-core-basic
@@ -14,9 +15,12 @@ azure-mgmt-core==1.5.0
14
15
  -e ./generated/azure-core-model
15
16
  -e ./generated/azure-core-traits
16
17
  -e ./generated/azure-core-page
18
+ -e ./generated/azure-encode-duration
17
19
  -e ./generated/azure-special-headers-client-request-id/
18
20
  -e ./generated/azure-example-basic
19
21
  -e ./generated/azure-resource-manager-common-properties
22
+ -e ./generated/azure-resource-manager-large-header
23
+ -e ./generated/azure-resource-manager-non-resource
20
24
  -e ./generated/azure-resource-manager-operation-templates
21
25
  -e ./generated/azure-resource-manager-resources
22
26
  # -e ./generated/client-namespace
@@ -36,11 +36,11 @@ def code_model():
36
36
  "namespace": "namespace",
37
37
  },
38
38
  options={
39
- "show_send_request": True,
40
- "builders_visibility": "public",
41
- "show_operations": True,
42
- "models_mode": "dpg",
43
- "version_tolerant": True,
39
+ "show-send-request": True,
40
+ "builders-visibility": "public",
41
+ "show-operations": True,
42
+ "models-mode": "dpg",
43
+ "version-tolerant": True,
44
44
  },
45
45
  )
46
46
 
@@ -23,11 +23,11 @@ def get_code_model():
23
23
  "namespace": "namespace",
24
24
  },
25
25
  options={
26
- "show_send_request": True,
27
- "builders_visibility": "public",
28
- "show_operations": True,
29
- "models_mode": "dpg",
30
- "only_path_and_body_params_positional": True,
26
+ "show-send-request": True,
27
+ "builders-visibility": "public",
28
+ "show-operations": True,
29
+ "models-mode": "dpg",
30
+ "only-path-and-body-params-positional": True,
31
31
  },
32
32
  )
33
33
 
@@ -23,10 +23,10 @@ def get_code_model():
23
23
  "namespace": "namespace",
24
24
  },
25
25
  options={
26
- "show_send_request": True,
27
- "builders_visibility": "public",
28
- "show_operations": True,
29
- "models_mode": "dpg",
26
+ "show-send-request": True,
27
+ "builders-visibility": "public",
28
+ "show-operations": True,
29
+ "models-mode": "dpg",
30
30
  },
31
31
  )
32
32
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typespec/http-client-python",
3
- "version": "0.13.0-dev.1",
3
+ "version": "0.13.0-dev.3",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec emitter for Python SDKs",
6
6
  "homepage": "https://typespec.io",