@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.
- package/dist/emitter/code-model.d.ts.map +1 -1
- package/dist/emitter/code-model.js +10 -7
- package/dist/emitter/code-model.js.map +1 -1
- package/dist/emitter/emitter.d.ts.map +1 -1
- package/dist/emitter/emitter.js +35 -7
- package/dist/emitter/emitter.js.map +1 -1
- package/dist/emitter/http.js +1 -1
- package/dist/emitter/http.js.map +1 -1
- package/dist/emitter/lib.d.ts +1 -0
- package/dist/emitter/lib.d.ts.map +1 -1
- package/dist/emitter/lib.js +1 -0
- package/dist/emitter/lib.js.map +1 -1
- package/dist/emitter/types.d.ts.map +1 -1
- package/dist/emitter/types.js +7 -4
- package/dist/emitter/types.js.map +1 -1
- package/dist/emitter/utils.d.ts +1 -0
- package/dist/emitter/utils.d.ts.map +1 -1
- package/dist/emitter/utils.js +19 -0
- package/dist/emitter/utils.js.map +1 -1
- package/emitter/src/code-model.ts +16 -6
- package/emitter/src/emitter.ts +37 -11
- package/emitter/src/http.ts +1 -1
- package/emitter/src/lib.ts +4 -0
- package/emitter/src/types.ts +16 -4
- package/emitter/src/utils.ts +27 -0
- package/emitter/temp/tsconfig.tsbuildinfo +1 -1
- package/eng/scripts/Test-Packages.ps1 +1 -1
- package/eng/scripts/ci/regenerate.ts +21 -14
- package/eng/scripts/setup/__pycache__/venvtools.cpython-38.pyc +0 -0
- package/eng/scripts/setup/install.py +0 -5
- package/eng/scripts/setup/install.ts +0 -20
- package/generator/build/lib/pygen/black.py +2 -2
- package/generator/build/lib/pygen/codegen/__init__.py +6 -4
- package/generator/build/lib/pygen/codegen/_utils.py +4 -0
- package/generator/build/lib/pygen/codegen/models/base.py +2 -3
- package/generator/build/lib/pygen/codegen/models/base_builder.py +5 -3
- package/generator/build/lib/pygen/codegen/models/client.py +28 -19
- package/generator/build/lib/pygen/codegen/models/code_model.py +200 -33
- package/generator/build/lib/pygen/codegen/models/combined_type.py +8 -5
- package/generator/build/lib/pygen/codegen/models/constant_type.py +2 -3
- package/generator/build/lib/pygen/codegen/models/credential_types.py +1 -2
- package/generator/build/lib/pygen/codegen/models/dictionary_type.py +2 -3
- package/generator/build/lib/pygen/codegen/models/enum_type.py +47 -24
- package/generator/build/lib/pygen/codegen/models/imports.py +14 -12
- package/generator/build/lib/pygen/codegen/models/list_type.py +2 -3
- package/generator/build/lib/pygen/codegen/models/lro_operation.py +8 -4
- package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +2 -2
- package/generator/build/lib/pygen/codegen/models/model_type.py +34 -19
- package/generator/build/lib/pygen/codegen/models/operation.py +66 -29
- package/generator/build/lib/pygen/codegen/models/operation_group.py +56 -11
- package/generator/build/lib/pygen/codegen/models/paging_operation.py +9 -6
- package/generator/build/lib/pygen/codegen/models/parameter.py +10 -10
- package/generator/build/lib/pygen/codegen/models/parameter_list.py +7 -7
- package/generator/build/lib/pygen/codegen/models/primitive_types.py +23 -43
- package/generator/build/lib/pygen/codegen/models/property.py +7 -7
- package/generator/build/lib/pygen/codegen/models/request_builder.py +9 -15
- package/generator/build/lib/pygen/codegen/models/response.py +6 -8
- package/generator/build/lib/pygen/codegen/models/utils.py +11 -0
- package/generator/build/lib/pygen/codegen/serializers/__init__.py +201 -242
- package/generator/build/lib/pygen/codegen/serializers/base_serializer.py +19 -1
- package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +53 -35
- package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +9 -5
- package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +17 -3
- package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +26 -14
- package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +26 -8
- package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +9 -4
- package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +62 -22
- package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +19 -16
- package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +5 -10
- package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +10 -7
- package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +10 -1
- package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +7 -10
- package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +24 -28
- package/generator/build/lib/pygen/codegen/serializers/types_serializer.py +6 -1
- package/generator/build/lib/pygen/codegen/serializers/utils.py +1 -15
- package/generator/build/lib/pygen/codegen/templates/client_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/enum_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/model_container.py.jinja2 +1 -1
- package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +2 -4
- package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +3 -3
- package/generator/build/lib/pygen/codegen/templates/testpreparer.py.jinja2 +2 -2
- package/generator/build/lib/pygen/codegen/templates/vendor.py.jinja2 +4 -4
- package/generator/build/lib/pygen/preprocess/__init__.py +0 -4
- package/generator/dev_requirements.txt +2 -2
- package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
- package/generator/pygen/black.py +2 -2
- package/generator/pygen/codegen/__init__.py +6 -4
- package/generator/pygen/codegen/_utils.py +4 -0
- package/generator/pygen/codegen/models/base.py +2 -3
- package/generator/pygen/codegen/models/base_builder.py +5 -3
- package/generator/pygen/codegen/models/client.py +28 -19
- package/generator/pygen/codegen/models/code_model.py +200 -33
- package/generator/pygen/codegen/models/combined_type.py +8 -5
- package/generator/pygen/codegen/models/constant_type.py +2 -3
- package/generator/pygen/codegen/models/credential_types.py +1 -2
- package/generator/pygen/codegen/models/dictionary_type.py +2 -3
- package/generator/pygen/codegen/models/enum_type.py +47 -24
- package/generator/pygen/codegen/models/imports.py +14 -12
- package/generator/pygen/codegen/models/list_type.py +2 -3
- package/generator/pygen/codegen/models/lro_operation.py +8 -4
- package/generator/pygen/codegen/models/lro_paging_operation.py +2 -2
- package/generator/pygen/codegen/models/model_type.py +34 -19
- package/generator/pygen/codegen/models/operation.py +66 -29
- package/generator/pygen/codegen/models/operation_group.py +56 -11
- package/generator/pygen/codegen/models/paging_operation.py +9 -6
- package/generator/pygen/codegen/models/parameter.py +10 -10
- package/generator/pygen/codegen/models/parameter_list.py +7 -7
- package/generator/pygen/codegen/models/primitive_types.py +23 -43
- package/generator/pygen/codegen/models/property.py +7 -7
- package/generator/pygen/codegen/models/request_builder.py +9 -15
- package/generator/pygen/codegen/models/response.py +6 -8
- package/generator/pygen/codegen/models/utils.py +11 -0
- package/generator/pygen/codegen/serializers/__init__.py +201 -242
- package/generator/pygen/codegen/serializers/base_serializer.py +19 -1
- package/generator/pygen/codegen/serializers/builder_serializer.py +53 -35
- package/generator/pygen/codegen/serializers/client_serializer.py +9 -5
- package/generator/pygen/codegen/serializers/enum_serializer.py +17 -3
- package/generator/pygen/codegen/serializers/general_serializer.py +26 -14
- package/generator/pygen/codegen/serializers/metadata_serializer.py +26 -8
- package/generator/pygen/codegen/serializers/model_init_serializer.py +9 -4
- package/generator/pygen/codegen/serializers/model_serializer.py +62 -22
- package/generator/pygen/codegen/serializers/operation_groups_serializer.py +19 -16
- package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -10
- package/generator/pygen/codegen/serializers/parameter_serializer.py +10 -7
- package/generator/pygen/codegen/serializers/request_builders_serializer.py +10 -1
- package/generator/pygen/codegen/serializers/sample_serializer.py +7 -10
- package/generator/pygen/codegen/serializers/test_serializer.py +24 -28
- package/generator/pygen/codegen/serializers/types_serializer.py +6 -1
- package/generator/pygen/codegen/serializers/utils.py +1 -15
- package/generator/pygen/codegen/templates/client_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/config_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/enum_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/init.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/model_container.py.jinja2 +1 -1
- package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +2 -4
- package/generator/pygen/codegen/templates/test.py.jinja2 +3 -3
- package/generator/pygen/codegen/templates/testpreparer.py.jinja2 +2 -2
- package/generator/pygen/codegen/templates/vendor.py.jinja2 +4 -4
- package/generator/pygen/preprocess/__init__.py +0 -4
- package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_flatten_async.py +1 -1
- 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
- package/generator/test/azure/mock_api_tests/asynctests/test_client_namespace_async.py +31 -0
- package/generator/test/azure/mock_api_tests/conftest.py +5 -4
- package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_flatten.py +1 -1
- package/generator/test/{generic_mock_api_tests/test_payload_pageable.py → azure/mock_api_tests/test_azure_payload_pageable.py} +1 -1
- package/generator/test/azure/mock_api_tests/test_client_namespace.py +29 -0
- package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/test_resiliency_srv_driven.py +4 -2
- package/generator/test/{generic_mock_api_tests/asynctests → azure/mock_api_tests}/test_resiliency_srv_driven_async.py +4 -2
- package/generator/test/azure/requirements.txt +11 -9
- package/generator/test/azure/tox.ini +2 -2
- package/generator/test/generic_mock_api_tests/conftest.py +9 -4
- package/generator/test/unbranded/mock_api_tests/conftest.py +4 -4
- package/generator/test/unbranded/mock_api_tests/test_unbranded.py +1 -1
- package/generator/test/unbranded/requirements.txt +2 -9
- package/generator/test/unbranded/tox.ini +2 -2
- package/package.json +5 -6
- package/generator/requirements.txt +0 -7
- /package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/asynctests/test_client_naming_async.py +0 -0
- /package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/asynctests/test_client_structure_async.py +0 -0
- /package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/test_client_naming.py +0 -0
- /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
|
|
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 %}
|
|
@@ -7,11 +7,9 @@
|
|
|
7
7
|
{{ op_tools.serialize(operation_group_imports()) }}
|
|
8
8
|
{{ keywords.patch_imports() }}
|
|
9
9
|
__all__ = [
|
|
10
|
-
|
|
11
|
-
{% for operation_group in client.operation_groups %}
|
|
10
|
+
{% for operation_group in operation_groups %}
|
|
12
11
|
'{{ operation_group.class_name }}',
|
|
13
|
-
|
|
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.
|
|
4
|
-
{% set async_suffix = "_async" if test.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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
|
|
|
@@ -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
|
-
|
|
17
|
-
os.
|
|
18
|
-
|
|
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
|
|
34
|
+
"""Start spector ranch mock api tests"""
|
|
34
35
|
server = start_server_process()
|
|
35
36
|
yield
|
|
36
37
|
terminate_server_process(server)
|
|
@@ -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)
|
package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/test_resiliency_srv_driven.py
RENAMED
|
@@ -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(
|
|
94
|
-
|
|
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(
|
|
98
|
-
|
|
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.
|
|
9
|
+
pyright==1.1.391
|
|
10
10
|
pylint==3.2.7
|
|
11
11
|
tox==4.18.1
|
|
12
|
-
mypy==1.
|
|
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.
|
|
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.
|
|
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
|
-
|
|
19
|
-
os.
|
|
20
|
-
|
|
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
|
|
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
|
-
|
|
16
|
-
os.chdir(
|
|
17
|
-
cmd = "
|
|
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
|
|
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
|
|
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.
|
|
7
|
+
pyright==1.1.391
|
|
8
8
|
pylint==3.2.7
|
|
9
9
|
tox==4.18.1
|
|
10
|
-
mypy==1.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
82
|
-
"@azure-tools/
|
|
83
|
-
"@
|
|
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",
|
|
File without changes
|
|
File without changes
|
/package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/test_client_naming.py
RENAMED
|
File without changes
|
/package/generator/test/{generic_mock_api_tests → azure/mock_api_tests}/test_client_structure.py
RENAMED
|
File without changes
|