@typespec/http-client-python 0.5.0 → 0.6.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 (163) hide show
  1. package/dist/emitter/code-model.d.ts.map +1 -1
  2. package/dist/emitter/code-model.js +10 -7
  3. package/dist/emitter/code-model.js.map +1 -1
  4. package/dist/emitter/emitter.d.ts.map +1 -1
  5. package/dist/emitter/emitter.js +35 -7
  6. package/dist/emitter/emitter.js.map +1 -1
  7. package/dist/emitter/http.js +1 -1
  8. package/dist/emitter/http.js.map +1 -1
  9. package/dist/emitter/lib.d.ts +1 -0
  10. package/dist/emitter/lib.d.ts.map +1 -1
  11. package/dist/emitter/lib.js +1 -0
  12. package/dist/emitter/lib.js.map +1 -1
  13. package/dist/emitter/types.d.ts.map +1 -1
  14. package/dist/emitter/types.js +7 -4
  15. package/dist/emitter/types.js.map +1 -1
  16. package/dist/emitter/utils.d.ts +1 -0
  17. package/dist/emitter/utils.d.ts.map +1 -1
  18. package/dist/emitter/utils.js +19 -0
  19. package/dist/emitter/utils.js.map +1 -1
  20. package/emitter/src/code-model.ts +16 -6
  21. package/emitter/src/emitter.ts +37 -11
  22. package/emitter/src/http.ts +1 -1
  23. package/emitter/src/lib.ts +4 -0
  24. package/emitter/src/types.ts +16 -4
  25. package/emitter/src/utils.ts +27 -0
  26. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  27. package/eng/scripts/Test-Packages.ps1 +1 -1
  28. package/eng/scripts/ci/regenerate.ts +21 -14
  29. package/eng/scripts/setup/__pycache__/venvtools.cpython-38.pyc +0 -0
  30. package/eng/scripts/setup/install.py +0 -5
  31. package/eng/scripts/setup/install.ts +0 -20
  32. package/generator/build/lib/pygen/black.py +2 -2
  33. package/generator/build/lib/pygen/codegen/__init__.py +6 -4
  34. package/generator/build/lib/pygen/codegen/_utils.py +4 -0
  35. package/generator/build/lib/pygen/codegen/models/base.py +2 -3
  36. package/generator/build/lib/pygen/codegen/models/base_builder.py +5 -3
  37. package/generator/build/lib/pygen/codegen/models/client.py +28 -19
  38. package/generator/build/lib/pygen/codegen/models/code_model.py +200 -33
  39. package/generator/build/lib/pygen/codegen/models/combined_type.py +8 -5
  40. package/generator/build/lib/pygen/codegen/models/constant_type.py +2 -3
  41. package/generator/build/lib/pygen/codegen/models/credential_types.py +1 -2
  42. package/generator/build/lib/pygen/codegen/models/dictionary_type.py +2 -3
  43. package/generator/build/lib/pygen/codegen/models/enum_type.py +47 -24
  44. package/generator/build/lib/pygen/codegen/models/imports.py +14 -12
  45. package/generator/build/lib/pygen/codegen/models/list_type.py +2 -3
  46. package/generator/build/lib/pygen/codegen/models/lro_operation.py +8 -4
  47. package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +2 -2
  48. package/generator/build/lib/pygen/codegen/models/model_type.py +34 -19
  49. package/generator/build/lib/pygen/codegen/models/operation.py +66 -29
  50. package/generator/build/lib/pygen/codegen/models/operation_group.py +56 -11
  51. package/generator/build/lib/pygen/codegen/models/paging_operation.py +9 -6
  52. package/generator/build/lib/pygen/codegen/models/parameter.py +10 -10
  53. package/generator/build/lib/pygen/codegen/models/parameter_list.py +7 -7
  54. package/generator/build/lib/pygen/codegen/models/primitive_types.py +23 -43
  55. package/generator/build/lib/pygen/codegen/models/property.py +7 -7
  56. package/generator/build/lib/pygen/codegen/models/request_builder.py +9 -15
  57. package/generator/build/lib/pygen/codegen/models/response.py +6 -8
  58. package/generator/build/lib/pygen/codegen/models/utils.py +11 -0
  59. package/generator/build/lib/pygen/codegen/serializers/__init__.py +201 -242
  60. package/generator/build/lib/pygen/codegen/serializers/base_serializer.py +19 -1
  61. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +53 -35
  62. package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +9 -5
  63. package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +17 -3
  64. package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +26 -14
  65. package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +26 -8
  66. package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +9 -4
  67. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +62 -22
  68. package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +19 -16
  69. package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +5 -10
  70. package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +10 -7
  71. package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +10 -1
  72. package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +7 -10
  73. package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +24 -28
  74. package/generator/build/lib/pygen/codegen/serializers/types_serializer.py +6 -1
  75. package/generator/build/lib/pygen/codegen/serializers/utils.py +1 -15
  76. package/generator/build/lib/pygen/codegen/templates/client_container.py.jinja2 +1 -1
  77. package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +1 -1
  78. package/generator/build/lib/pygen/codegen/templates/enum_container.py.jinja2 +1 -1
  79. package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +1 -1
  80. package/generator/build/lib/pygen/codegen/templates/model_container.py.jinja2 +1 -1
  81. package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +2 -4
  82. package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +3 -3
  83. package/generator/build/lib/pygen/codegen/templates/testpreparer.py.jinja2 +2 -2
  84. package/generator/build/lib/pygen/codegen/templates/vendor.py.jinja2 +4 -4
  85. package/generator/build/lib/pygen/preprocess/__init__.py +0 -4
  86. package/generator/dev_requirements.txt +2 -2
  87. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  88. package/generator/pygen/black.py +2 -2
  89. package/generator/pygen/codegen/__init__.py +6 -4
  90. package/generator/pygen/codegen/_utils.py +4 -0
  91. package/generator/pygen/codegen/models/base.py +2 -3
  92. package/generator/pygen/codegen/models/base_builder.py +5 -3
  93. package/generator/pygen/codegen/models/client.py +28 -19
  94. package/generator/pygen/codegen/models/code_model.py +200 -33
  95. package/generator/pygen/codegen/models/combined_type.py +8 -5
  96. package/generator/pygen/codegen/models/constant_type.py +2 -3
  97. package/generator/pygen/codegen/models/credential_types.py +1 -2
  98. package/generator/pygen/codegen/models/dictionary_type.py +2 -3
  99. package/generator/pygen/codegen/models/enum_type.py +47 -24
  100. package/generator/pygen/codegen/models/imports.py +14 -12
  101. package/generator/pygen/codegen/models/list_type.py +2 -3
  102. package/generator/pygen/codegen/models/lro_operation.py +8 -4
  103. package/generator/pygen/codegen/models/lro_paging_operation.py +2 -2
  104. package/generator/pygen/codegen/models/model_type.py +34 -19
  105. package/generator/pygen/codegen/models/operation.py +66 -29
  106. package/generator/pygen/codegen/models/operation_group.py +56 -11
  107. package/generator/pygen/codegen/models/paging_operation.py +9 -6
  108. package/generator/pygen/codegen/models/parameter.py +10 -10
  109. package/generator/pygen/codegen/models/parameter_list.py +7 -7
  110. package/generator/pygen/codegen/models/primitive_types.py +23 -43
  111. package/generator/pygen/codegen/models/property.py +7 -7
  112. package/generator/pygen/codegen/models/request_builder.py +9 -15
  113. package/generator/pygen/codegen/models/response.py +6 -8
  114. package/generator/pygen/codegen/models/utils.py +11 -0
  115. package/generator/pygen/codegen/serializers/__init__.py +201 -242
  116. package/generator/pygen/codegen/serializers/base_serializer.py +19 -1
  117. package/generator/pygen/codegen/serializers/builder_serializer.py +53 -35
  118. package/generator/pygen/codegen/serializers/client_serializer.py +9 -5
  119. package/generator/pygen/codegen/serializers/enum_serializer.py +17 -3
  120. package/generator/pygen/codegen/serializers/general_serializer.py +26 -14
  121. package/generator/pygen/codegen/serializers/metadata_serializer.py +26 -8
  122. package/generator/pygen/codegen/serializers/model_init_serializer.py +9 -4
  123. package/generator/pygen/codegen/serializers/model_serializer.py +62 -22
  124. package/generator/pygen/codegen/serializers/operation_groups_serializer.py +19 -16
  125. package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -10
  126. package/generator/pygen/codegen/serializers/parameter_serializer.py +10 -7
  127. package/generator/pygen/codegen/serializers/request_builders_serializer.py +10 -1
  128. package/generator/pygen/codegen/serializers/sample_serializer.py +7 -10
  129. package/generator/pygen/codegen/serializers/test_serializer.py +24 -28
  130. package/generator/pygen/codegen/serializers/types_serializer.py +6 -1
  131. package/generator/pygen/codegen/serializers/utils.py +1 -15
  132. package/generator/pygen/codegen/templates/client_container.py.jinja2 +1 -1
  133. package/generator/pygen/codegen/templates/config_container.py.jinja2 +1 -1
  134. package/generator/pygen/codegen/templates/enum_container.py.jinja2 +1 -1
  135. package/generator/pygen/codegen/templates/init.py.jinja2 +1 -1
  136. package/generator/pygen/codegen/templates/model_container.py.jinja2 +1 -1
  137. package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +2 -4
  138. package/generator/pygen/codegen/templates/test.py.jinja2 +3 -3
  139. package/generator/pygen/codegen/templates/testpreparer.py.jinja2 +2 -2
  140. package/generator/pygen/codegen/templates/vendor.py.jinja2 +4 -4
  141. package/generator/pygen/preprocess/__init__.py +0 -4
  142. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_flatten_async.py +1 -1
  143. package/generator/test/{generic_mock_api_tests/asynctests/test_payload_pageable_async.py → azure/mock_api_tests/asynctests/test_azure_payload_pageable_async.py} +1 -1
  144. package/generator/test/azure/mock_api_tests/asynctests/test_client_namespace_async.py +31 -0
  145. package/generator/test/azure/mock_api_tests/conftest.py +5 -4
  146. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_flatten.py +1 -1
  147. package/generator/test/{generic_mock_api_tests/test_payload_pageable.py → azure/mock_api_tests/test_azure_payload_pageable.py} +1 -1
  148. package/generator/test/azure/mock_api_tests/test_client_namespace.py +29 -0
  149. package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/test_resiliency_srv_driven.py +4 -2
  150. package/generator/test/{generic_mock_api_tests/asynctests → azure/mock_api_tests}/test_resiliency_srv_driven_async.py +4 -2
  151. package/generator/test/azure/requirements.txt +11 -9
  152. package/generator/test/azure/tox.ini +2 -2
  153. package/generator/test/generic_mock_api_tests/conftest.py +9 -4
  154. package/generator/test/unbranded/mock_api_tests/conftest.py +4 -4
  155. package/generator/test/unbranded/mock_api_tests/test_unbranded.py +1 -1
  156. package/generator/test/unbranded/requirements.txt +2 -9
  157. package/generator/test/unbranded/tox.ini +2 -2
  158. package/package.json +5 -6
  159. package/generator/requirements.txt +0 -7
  160. /package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/asynctests/test_client_naming_async.py +0 -0
  161. /package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/asynctests/test_client_structure_async.py +0 -0
  162. /package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/test_client_naming.py +0 -0
  163. /package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/test_client_structure.py +0 -0
@@ -5,6 +5,6 @@
5
5
  from enum import Enum
6
6
  from {{ code_model.core_library }}{{ "" if code_model.is_azure_flavor else ".utils" }} import CaseInsensitiveEnumMeta
7
7
 
8
- {% for enum in code_model.enums | sort %}
8
+ {% for enum in enums | sort %}
9
9
  {% include "enum.py.jinja2" %}
10
10
  {% endfor %}
@@ -8,7 +8,7 @@ from .{{ client.filename }} import {{ client.name }} # type: ignore
8
8
  {% endfor %}
9
9
  {% endif %}
10
10
  {% if not async_mode and code_model.options['package_version']%}
11
- from ._version import VERSION
11
+ from {{ code_model.get_relative_import_path(serialize_namespace, module_name="_version") }} import VERSION
12
12
 
13
13
  __version__ = VERSION
14
14
  {% endif %}
@@ -6,7 +6,7 @@
6
6
  {% endif %}
7
7
 
8
8
  {{ imports }}
9
- {% for model in code_model.model_types %}
9
+ {% for model in models %}
10
10
  {% if model.base == "dpg" %}
11
11
  {% include "model_dpg.py.jinja2" %}
12
12
  {% elif model.base == "msrest" %}
@@ -7,11 +7,9 @@
7
7
  {{ op_tools.serialize(operation_group_imports()) }}
8
8
  {{ keywords.patch_imports() }}
9
9
  __all__ = [
10
- {% for client in clients %}
11
- {% for operation_group in client.operation_groups %}
10
+ {% for operation_group in operation_groups %}
12
11
  '{{ operation_group.class_name }}',
13
- {% endfor %}
14
- {% endfor %}
12
+ {% endfor %}
15
13
  ]
16
14
  {{ keywords.extend_all }}
17
15
  _patch_sdk()
@@ -1,7 +1,7 @@
1
1
  {% set prefix_lower = test.prefix|lower %}
2
2
  {% set client_var = "self.client" if code_model.options["azure_arm"] else "client" %}
3
- {% set async = "async " if test.is_async else "" %}
4
- {% set async_suffix = "_async" if test.is_async else "" %}
3
+ {% set async = "async " if test.async_mode else "" %}
4
+ {% set async_suffix = "_async" if test.async_mode else "" %}
5
5
  # coding=utf-8
6
6
  {{ code_model.options['license_header'] }}
7
7
  import pytest
@@ -15,7 +15,7 @@ AZURE_LOCATION = "eastus"
15
15
  class {{ test.test_class_name }}({{ test.base_test_class_name }}):
16
16
  {% if code_model.options["azure_arm"] %}
17
17
  def setup_method(self, method):
18
- {% if test.is_async %}
18
+ {% if test.async_mode %}
19
19
  self.client = self.create_mgmt_client({{ test.client_name }}, is_async=True)
20
20
  {% else %}
21
21
  self.client = self.create_mgmt_client({{ test.client_name }})
@@ -3,7 +3,7 @@
3
3
  {{ imports }}
4
4
 
5
5
  {% for test_name in test_names %}
6
- {% set extra_async = ", is_async=True" if test_name.is_async else ""%}
6
+ {% set extra_async = ", is_async=True" if test_name.async_mode else ""%}
7
7
  {% set prefix_lower = test_name.prefix|lower %}
8
8
  class {{ test_name.base_test_class_name }}(AzureRecordedTestCase):
9
9
 
@@ -15,7 +15,7 @@ class {{ test_name.base_test_class_name }}(AzureRecordedTestCase):
15
15
  endpoint=endpoint,
16
16
  )
17
17
 
18
- {% if not test_name.is_async %}
18
+ {% if not test_name.async_mode %}
19
19
  {{ test_name.preparer_name }} = functools.partial(
20
20
  PowerShellPreparer,
21
21
  "{{ prefix_lower }}",
@@ -3,7 +3,7 @@
3
3
 
4
4
  {{ imports }}
5
5
 
6
- {% if code_model.need_mixin_abc %}
6
+ {% if code_model.need_vendored_mixin(client_namespace) %}
7
7
  {% for client in clients | selectattr("has_mixin") %}
8
8
  {% set pylint_disable = "# pylint: disable=name-too-long" if (client.name | length) + ("MixinABC" | length) > 40 else "" %}
9
9
  class {{ client.name }}MixinABC( {{ pylint_disable }}
@@ -16,7 +16,7 @@ class {{ client.name }}MixinABC( {{ pylint_disable }}
16
16
  _deserialize: "Deserializer"
17
17
  {% endfor %}
18
18
  {% endif %}
19
- {% if code_model.has_abstract_operations %}
19
+ {% if code_model.need_vendored_abstract(client_namespace) %}
20
20
 
21
21
  def raise_if_not_implemented(cls, abstract_methods):
22
22
  not_implemented = [f for f in abstract_methods if not callable(getattr(cls, f, None))]
@@ -27,7 +27,7 @@ def raise_if_not_implemented(cls, abstract_methods):
27
27
  )
28
28
  {% endif %}
29
29
 
30
- {% if code_model.has_etag %}
30
+ {% if code_model.need_vendored_etag(client_namespace) %}
31
31
  def quote_etag(etag: Optional[str]) -> Optional[str]:
32
32
  if not etag or etag == "*":
33
33
  return etag
@@ -57,7 +57,7 @@ def prep_if_none_match(etag: Optional[str], match_condition: Optional[MatchCondi
57
57
  return "*"
58
58
  return None
59
59
  {% endif %}
60
- {% if code_model.has_form_data and code_model.options["models_mode"] == "dpg" and not async_mode %}
60
+ {% if code_model.need_vendored_form_data(async_mode, client_namespace) %}
61
61
  # file-like tuple could be `(filename, IO (or bytes))` or `(filename, IO (or bytes), content_type)`
62
62
  FileContent = Union[str, bytes, IO[str], IO[bytes]]
63
63
 
@@ -501,10 +501,6 @@ class PreProcessPlugin(YamlUpdatePlugin):
501
501
  for client in yaml_data["clients"]:
502
502
  self.update_client(client)
503
503
  self.update_operation_groups(yaml_data, client)
504
- for clients in yaml_data["subnamespaceToClients"].values():
505
- for client in clients:
506
- self.update_client(client)
507
- self.update_operation_groups(yaml_data, client)
508
504
  if yaml_data.get("namespace"):
509
505
  yaml_data["namespace"] = pad_builtin_namespaces(yaml_data["namespace"])
510
506
 
@@ -19,7 +19,7 @@ async def client():
19
19
  yield client
20
20
 
21
21
 
22
- # ========== test for cadl-ranch ==========
22
+ # ========== test for spector ==========
23
23
 
24
24
 
25
25
  @pytest.mark.asyncio
@@ -4,7 +4,7 @@
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
6
  import pytest
7
- from payload.pageable.aio import PageableClient
7
+ from specs.azure.payload.pageable.aio import PageableClient
8
8
 
9
9
 
10
10
  @pytest.fixture
@@ -0,0 +1,31 @@
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.clientnamespace.aio import ClientNamespaceFirstClient
8
+ # from client.clientnamespace.first.models import FirstClientResult
9
+
10
+ # from client.clientnamespace.second.aio import ClientNamespaceSecondClient
11
+ # from client.clientnamespace.second.models import SecondClientResult
12
+ # from client.clientnamespace.second.sub.models import SecondClientEnumType
13
+
14
+
15
+ # @pytest.fixture
16
+ # async def first_client():
17
+ # async with ClientNamespaceFirstClient() as client:
18
+ # yield client
19
+
20
+ # @pytest.fixture
21
+ # async def second_client():
22
+ # async with ClientNamespaceSecondClient() as client:
23
+ # yield client
24
+
25
+ # @pytest.mark.asyncio
26
+ # async def test_get_first(first_client: ClientNamespaceFirstClient):
27
+ # assert await first_client.get_first() == FirstClientResult(name="first")
28
+
29
+ # @pytest.mark.asyncio
30
+ # async def test_get_second(second_client: ClientNamespaceSecondClient):
31
+ # assert await second_client.get_second() == SecondClientResult(type=SecondClientEnumType.SECOND)
@@ -13,9 +13,10 @@ from pathlib import Path
13
13
 
14
14
 
15
15
  def start_server_process():
16
- path = Path(os.path.dirname(__file__)) / Path("../../../../node_modules/@azure-tools/cadl-ranch-specs")
17
- os.chdir(path.resolve())
18
- cmd = "cadl-ranch serve ./http --coverageFile ./cadl-ranch-coverage-python-standard.json"
16
+ azure_http_path = Path(os.path.dirname(__file__)) / Path("../../../../node_modules/@azure-tools/azure-http-specs")
17
+ http_path = Path(os.path.dirname(__file__)) / Path("../../../../node_modules/@typespec/http-specs")
18
+ os.chdir(azure_http_path.resolve())
19
+ cmd = f"tsp-spector serve ./specs {(http_path / 'specs').resolve()}"
19
20
  if os.name == "nt":
20
21
  return subprocess.Popen(cmd, shell=True)
21
22
  return subprocess.Popen(cmd, shell=True, preexec_fn=os.setsid)
@@ -30,7 +31,7 @@ def terminate_server_process(process):
30
31
 
31
32
  @pytest.fixture(scope="session", autouse=True)
32
33
  def testserver():
33
- """Start cadl ranch mock api tests"""
34
+ """Start spector ranch mock api tests"""
34
35
  server = start_server_process()
35
36
  yield
36
37
  terminate_server_process(server)
@@ -19,7 +19,7 @@ def client():
19
19
  yield client
20
20
 
21
21
 
22
- # ========== test for cadl-ranch ==========
22
+ # ========== test for spector ==========
23
23
 
24
24
 
25
25
  def test_put_flatten_model(client: FlattenPropertyClient):
@@ -4,7 +4,7 @@
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
6
  import pytest
7
- from payload.pageable import PageableClient
7
+ from specs.azure.payload.pageable import PageableClient
8
8
 
9
9
 
10
10
  @pytest.fixture
@@ -0,0 +1,29 @@
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.clientnamespace import ClientNamespaceFirstClient
8
+ # from client.clientnamespace.first.models import FirstClientResult
9
+
10
+ # from client.clientnamespace.second import ClientNamespaceSecondClient
11
+ # from client.clientnamespace.second.models import SecondClientResult
12
+ # from client.clientnamespace.second.sub.models import SecondClientEnumType
13
+
14
+
15
+ # @pytest.fixture
16
+ # def first_client():
17
+ # with ClientNamespaceFirstClient() as client:
18
+ # yield client
19
+
20
+ # @pytest.fixture
21
+ # def second_client():
22
+ # with ClientNamespaceSecondClient() as client:
23
+ # yield client
24
+
25
+ # def test_get_first(first_client: ClientNamespaceFirstClient):
26
+ # assert first_client.get_first() == FirstClientResult(name="first")
27
+
28
+ # def test_get_second(second_client: ClientNamespaceSecondClient):
29
+ # assert second_client.get_second() == SecondClientResult(type=SecondClientEnumType.SECOND)
@@ -90,8 +90,10 @@ def test_add_optional_param_from_one_optional():
90
90
  client.from_one_optional(parameter="optional", new_parameter="new")
91
91
 
92
92
 
93
- def test_break_the_glass(core_library):
94
- request = core_library.rest.HttpRequest(method="DELETE", url="/add-operation")
93
+ def test_break_the_glass():
94
+ from azure.core.rest import HttpRequest
95
+
96
+ request = HttpRequest(method="DELETE", url="/add-operation")
95
97
  with V1Client(
96
98
  endpoint="http://localhost:3000",
97
99
  service_deployment_version="v2",
@@ -94,8 +94,10 @@ async def test_add_optional_param_from_one_optional():
94
94
 
95
95
 
96
96
  @pytest.mark.asyncio
97
- async def test_break_the_glass(core_library):
98
- request = core_library.rest.HttpRequest(method="DELETE", url="/add-operation")
97
+ async def test_break_the_glass():
98
+ from azure.core.rest import HttpRequest
99
+
100
+ request = HttpRequest(method="DELETE", url="/add-operation")
99
101
  async with V1Client(
100
102
  endpoint="http://localhost:3000",
101
103
  service_deployment_version="v2",
@@ -6,10 +6,10 @@ pytest
6
6
  pytest-asyncio==0.14.0;python_full_version>="3.5.2"
7
7
  azure-core==1.30.0
8
8
  azure-mgmt-core==1.3.2
9
- pyright==1.1.389
9
+ pyright==1.1.391
10
10
  pylint==3.2.7
11
11
  tox==4.18.1
12
- mypy==1.13.0
12
+ mypy==1.14.1
13
13
 
14
14
  # only for azure
15
15
  -e ./generated/azure-client-generator-core-access
@@ -26,20 +26,26 @@ mypy==1.13.0
26
26
  -e ./generated/azure-example-basic
27
27
  -e ./generated/azure-resource-manager-common-properties
28
28
  -e ./generated/azure-resource-manager-resources
29
+ # -e ./generated/client-namespace
30
+ -e ./generated/azure-payload-pageable
31
+ -e ./generated/client-naming
32
+ -e ./generated/client-structure-default
33
+ -e ./generated/client-structure-multiclient
34
+ -e ./generated/client-structure-renamedoperation
35
+ -e ./generated/client-structure-twooperationgroup
36
+ -e ./generated/resiliency-srv-driven1
37
+ -e ./generated/resiliency-srv-driven2
29
38
 
30
39
  # common test case
31
40
  -e ./generated/authentication-api-key
32
41
  -e ./generated/authentication-http-custom
33
42
  -e ./generated/authentication-oauth2
34
43
  -e ./generated/authentication-union
35
- -e ./generated/client-naming
36
44
  -e ./generated/encode-duration
37
45
  -e ./generated/encode-numeric
38
46
  -e ./generated/parameters-basic
39
47
  -e ./generated/parameters-collection-format
40
48
  -e ./generated/parameters-spread
41
- -e ./generated/resiliency-srv-driven1
42
- -e ./generated/resiliency-srv-driven2
43
49
  -e ./generated/serialization-encoded-name-json
44
50
  -e ./generated/server-endpoint-not-defined
45
51
  -e ./generated/server-path-multiple
@@ -72,10 +78,6 @@ mypy==1.13.0
72
78
  -e ./generated/special-headers-conditional-request
73
79
  -e ./generated/encode-datetime
74
80
  -e ./generated/encode-bytes
75
- -e ./generated/client-structure-default
76
- -e ./generated/client-structure-multiclient
77
- -e ./generated/client-structure-renamedoperation
78
- -e ./generated/client-structure-twooperationgroup
79
81
  -e ./generated/payload-content-negotiation
80
82
  -e ./generated/payload-json-merge-patch
81
83
  -e ./generated/payload-pageable
@@ -10,7 +10,7 @@ commands =
10
10
  pytest mock_api_tests ../generic_mock_api_tests
11
11
 
12
12
  # pylint
13
- pip install azure-pylint-guidelines-checker==0.4.1 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/"
13
+ pip install azure-pylint-guidelines-checker==0.5.0 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/"
14
14
  python ../../../eng/scripts/ci/run_pylint.py -t azure -s "generated" {posargs}
15
15
 
16
16
  # mypy
@@ -33,7 +33,7 @@ commands =
33
33
  deps=
34
34
  -r requirements.txt
35
35
  commands =
36
- pip install azure-pylint-guidelines-checker==0.4.1 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/"
36
+ pip install azure-pylint-guidelines-checker==0.5.0 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/"
37
37
  python ../../../eng/scripts/ci/run_pylint.py -t azure -s "generated" {posargs}
38
38
 
39
39
  [testenv:mypy]
@@ -15,9 +15,14 @@ FILE_FOLDER = Path(__file__).parent
15
15
 
16
16
 
17
17
  def start_server_process():
18
- path = Path(os.path.dirname(__file__)) / Path("../../../node_modules/@azure-tools/cadl-ranch-specs")
19
- os.chdir(path.resolve())
20
- cmd = "cadl-ranch serve ./http"
18
+ azure_http_path = Path(os.path.dirname(__file__)) / Path("../../../node_modules/@azure-tools/azure-http-specs")
19
+ http_path = Path(os.path.dirname(__file__)) / Path("../../../node_modules/@typespec/http-specs")
20
+ if "unbranded" in Path(os.getcwd()).parts:
21
+ os.chdir(http_path.resolve())
22
+ cmd = "npx tsp-spector serve ./specs"
23
+ else:
24
+ os.chdir(azure_http_path.resolve())
25
+ cmd = f"npx tsp-spector serve ./specs {(http_path / 'specs').resolve()}"
21
26
  if os.name == "nt":
22
27
  return subprocess.Popen(cmd, shell=True)
23
28
  return subprocess.Popen(cmd, shell=True, preexec_fn=os.setsid)
@@ -32,7 +37,7 @@ def terminate_server_process(process):
32
37
 
33
38
  @pytest.fixture(scope="session", autouse=True)
34
39
  def testserver():
35
- """Start cadl ranch mock api tests"""
40
+ """Start spector mock api tests"""
36
41
  server = start_server_process()
37
42
  yield
38
43
  terminate_server_process(server)
@@ -12,9 +12,9 @@ from pathlib import Path
12
12
 
13
13
 
14
14
  def start_server_process():
15
- path = Path(os.path.dirname(__file__)) / Path("../../../../node_modules/@azure-tools/cadl-ranch-specs")
16
- os.chdir(path.resolve())
17
- cmd = "cadl-ranch serve ./http"
15
+ http_path = Path(os.path.dirname(__file__)) / Path("../../../../node_modules/@typespec/http-specs")
16
+ os.chdir(http_path.resolve())
17
+ cmd = "tsp-spector serve ./specs"
18
18
  if os.name == "nt":
19
19
  return subprocess.Popen(cmd, shell=True)
20
20
  return subprocess.Popen(cmd, shell=True, preexec_fn=os.setsid)
@@ -29,7 +29,7 @@ def terminate_server_process(process):
29
29
 
30
30
  @pytest.fixture(scope="session", autouse=True)
31
31
  def testserver():
32
- """Start cadl ranch mock api tests"""
32
+ """Start spector mock api tests"""
33
33
  server = start_server_process()
34
34
  yield
35
35
  terminate_server_process(server)
@@ -53,5 +53,5 @@ def check_sensitive_word(folder: Path, word: str) -> str:
53
53
  def test_sensitive_word():
54
54
  check_folder = (Path(os.path.dirname(__file__)) / "../generated").resolve()
55
55
  assert [] == check_sensitive_word(check_folder, "azure")
56
- # after update cadl-ranch, it shall also equal to []
56
+ # after update spector, it shall also equal to []
57
57
  assert ["authentication-oauth2", "authentication-union"] == check_sensitive_word(check_folder, "microsoft")
@@ -4,10 +4,10 @@ aiohttp;python_full_version>="3.5.2"
4
4
  requests==2.32.2
5
5
  pytest
6
6
  pytest-asyncio==0.14.0;python_full_version>="3.5.2"
7
- pyright==1.1.389
7
+ pyright==1.1.391
8
8
  pylint==3.2.7
9
9
  tox==4.18.1
10
- mypy==1.13.0
10
+ mypy==1.14.1
11
11
 
12
12
 
13
13
  # common test case
@@ -15,14 +15,11 @@ mypy==1.13.0
15
15
  -e ./generated/authentication-http-custom
16
16
  -e ./generated/authentication-oauth2
17
17
  -e ./generated/authentication-union
18
- -e ./generated/client-naming
19
18
  -e ./generated/encode-duration
20
19
  -e ./generated/encode-numeric
21
20
  -e ./generated/parameters-basic
22
21
  -e ./generated/parameters-collection-format
23
22
  -e ./generated/parameters-spread
24
- -e ./generated/resiliency-srv-driven1
25
- -e ./generated/resiliency-srv-driven2
26
23
  -e ./generated/serialization-encoded-name-json
27
24
  -e ./generated/server-endpoint-not-defined
28
25
  -e ./generated/server-path-multiple
@@ -55,10 +52,6 @@ mypy==1.13.0
55
52
  -e ./generated/special-headers-conditional-request
56
53
  -e ./generated/encode-datetime
57
54
  -e ./generated/encode-bytes
58
- -e ./generated/client-structure-default
59
- -e ./generated/client-structure-multiclient
60
- -e ./generated/client-structure-renamedoperation
61
- -e ./generated/client-structure-twooperationgroup
62
55
  -e ./generated/payload-content-negotiation
63
56
  -e ./generated/payload-json-merge-patch
64
57
  -e ./generated/payload-pageable
@@ -10,7 +10,7 @@ commands =
10
10
  pytest mock_api_tests ../generic_mock_api_tests
11
11
 
12
12
  # pylint
13
- pip install azure-pylint-guidelines-checker==0.4.1 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/"
13
+ pip install azure-pylint-guidelines-checker==0.5.0 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/"
14
14
  python ../../../eng/scripts/ci/run_pylint.py -t unbranded -s "generated" {posargs}
15
15
 
16
16
  # mypy
@@ -33,7 +33,7 @@ commands =
33
33
  deps=
34
34
  -r requirements.txt
35
35
  commands =
36
- pip install azure-pylint-guidelines-checker==0.4.1 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/"
36
+ pip install azure-pylint-guidelines-checker==0.5.0 --index-url="https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/"
37
37
  python ../../../eng/scripts/ci/run_pylint.py -t unbranded -s "generated" {posargs}
38
38
 
39
39
  [testenv:mypy]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typespec/http-client-python",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec emitter for Python SDKs",
6
6
  "homepage": "https://typespec.io",
@@ -60,7 +60,7 @@
60
60
  "@azure-tools/typespec-azure-resource-manager": ">=0.49.0 <1.0.0",
61
61
  "@azure-tools/typespec-autorest": ">=0.49.0 <1.0.0",
62
62
  "@azure-tools/typespec-azure-rulesets": ">=0.49.0 <3.0.0",
63
- "@azure-tools/typespec-client-generator-core": ">=0.49.0 <1.0.0"
63
+ "@azure-tools/typespec-client-generator-core": ">=0.49.1 <1.0.0"
64
64
  },
65
65
  "dependencies": {
66
66
  "js-yaml": "~4.1.0",
@@ -78,10 +78,9 @@
78
78
  "@azure-tools/typespec-azure-core": "~0.49.0",
79
79
  "@azure-tools/typespec-azure-rulesets": "~0.49.0",
80
80
  "@azure-tools/typespec-azure-resource-manager": "~0.49.0",
81
- "@azure-tools/typespec-client-generator-core": "~0.49.0",
82
- "@azure-tools/cadl-ranch-specs": "~0.39.6",
83
- "@azure-tools/cadl-ranch-expect": "~0.15.7",
84
- "@azure-tools/cadl-ranch": "~0.16.2",
81
+ "@azure-tools/typespec-client-generator-core": "~0.49.1",
82
+ "@azure-tools/azure-http-specs": "0.1.0-alpha.4",
83
+ "@typespec/http-specs": "0.1.0-alpha.5",
85
84
  "@types/js-yaml": "~4.0.5",
86
85
  "@types/node": "~22.5.4",
87
86
  "@types/semver": "7.5.8",
@@ -1,7 +0,0 @@
1
- black==24.8.0
2
- docutils>=0.20.1
3
- Jinja2==3.1.3
4
- m2r2==0.3.3.post2
5
- PyYAML==6.0.1
6
- tomli==2.0.1
7
- setuptools==69.5.1