@typespec/http-client-python 0.12.3 → 0.12.5

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 (34) 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/ci/regenerate.ts +3 -0
  7. package/eng/scripts/setup/__pycache__/package_manager.cpython-39.pyc +0 -0
  8. package/eng/scripts/setup/__pycache__/venvtools.cpython-39.pyc +0 -0
  9. package/eng/scripts/setup/build_pygen_wheel.py +9 -10
  10. package/eng/scripts/setup/install.py +13 -17
  11. package/eng/scripts/setup/package_manager.py +139 -0
  12. package/eng/scripts/setup/prepare.py +4 -12
  13. package/eng/scripts/setup/venvtools.py +1 -42
  14. package/generator/build/lib/pygen/codegen/models/property.py +6 -0
  15. package/generator/build/lib/pygen/codegen/templates/packaging_templates/README.md.jinja2 +31 -0
  16. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  17. package/generator/pygen/codegen/models/property.py +6 -0
  18. package/generator/pygen/codegen/templates/packaging_templates/README.md.jinja2 +31 -0
  19. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_commonproperties_async.py +31 -0
  20. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_largeheader_async.py +30 -0
  21. package/generator/test/azure/mock_api_tests/asynctests/test_azure_arm_nonresource_async.py +36 -0
  22. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_client_initialization_async.py +9 -0
  23. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_deserialize_empty_string_as_null_async.py +20 -0
  24. package/generator/test/azure/mock_api_tests/asynctests/test_azure_client_generator_core_usage_async.py +7 -0
  25. package/generator/test/azure/mock_api_tests/asynctests/test_azure_encode_duration_async.py +19 -0
  26. package/generator/test/azure/mock_api_tests/test_azure_arm_commonproperties.py +29 -0
  27. package/generator/test/azure/mock_api_tests/test_azure_arm_largeheader.py +27 -0
  28. package/generator/test/azure/mock_api_tests/test_azure_arm_nonresource.py +34 -0
  29. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_client_initialization.py +8 -0
  30. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_deserialize_empty_string_as_null.py +19 -0
  31. package/generator/test/azure/mock_api_tests/test_azure_client_generator_core_usage.py +4 -0
  32. package/generator/test/azure/mock_api_tests/test_azure_encode_duration.py +18 -0
  33. package/generator/test/azure/requirements.txt +4 -0
  34. package/package.json +3 -3
@@ -11,28 +11,27 @@ if not sys.version_info >= (3, 9, 0):
11
11
  raise Exception("Autorest for Python extension requires Python 3.9 at least")
12
12
 
13
13
  try:
14
- import pip
15
- except (ImportError, ModuleNotFoundError):
16
- raise Exception("Your Python installation doesn't have pip available")
14
+ from package_manager import detect_package_manager, PackageManagerNotFoundError
15
+ detect_package_manager() # Just check if we have a package manager
16
+ except (ImportError, ModuleNotFoundError, PackageManagerNotFoundError):
17
+ raise Exception("Your Python installation doesn't have a suitable package manager (pip or uv) available")
17
18
 
18
19
 
19
- # Now we have pip and Py >= 3.9, go to work
20
+ # Now we have a package manager (pip or uv) and Py >= 3.9, go to work
20
21
 
21
22
  from pathlib import Path
22
23
 
23
- from venvtools import ExtendedEnvBuilder, python_run
24
+ from venvtools import python_run
25
+ from package_manager import install_packages, create_venv_with_package_manager
24
26
 
25
27
  _ROOT_DIR = Path(__file__).parent.parent.parent.parent
26
28
 
27
29
 
28
30
  def main():
29
31
  venv_path = _ROOT_DIR / "venv_build_wheel"
30
- env_builder = ExtendedEnvBuilder(with_pip=True, upgrade_deps=True)
31
- env_builder.create(venv_path)
32
- venv_context = env_builder.context
32
+ venv_context = create_venv_with_package_manager(venv_path)
33
33
 
34
- python_run(venv_context, "pip", ["install", "-U", "pip"])
35
- python_run(venv_context, "pip", ["install", "build"])
34
+ install_packages(["build"], venv_context)
36
35
  python_run(venv_context, "build", ["--wheel"], additional_dir="generator")
37
36
 
38
37
 
@@ -13,10 +13,11 @@ if not sys.version_info >= (3, 9, 0):
13
13
  )
14
14
 
15
15
  try:
16
- import pip
17
- except (ImportError, ModuleNotFoundError):
16
+ from package_manager import detect_package_manager, PackageManagerNotFoundError
17
+ detect_package_manager() # Just check if we have a package manager
18
+ except (ImportError, ModuleNotFoundError, PackageManagerNotFoundError):
18
19
  raise Warning(
19
- "Your Python installation doesn't have pip available. We will run your code with Pyodide since your Python version isn't adequate."
20
+ "Your Python installation doesn't have a suitable package manager (pip or uv) available. We will run your code with Pyodide since your Python environment isn't adequate."
20
21
  )
21
22
 
22
23
  try:
@@ -27,28 +28,23 @@ except (ImportError, ModuleNotFoundError):
27
28
  )
28
29
 
29
30
 
30
- # Now we have pip and Py >= 3.8, go to work
31
+ # Now we have a package manager (uv or pip) and Py >= 3.8, go to work
31
32
 
32
33
  from pathlib import Path
33
34
 
34
- from venvtools import ExtendedEnvBuilder, python_run
35
-
36
35
  _ROOT_DIR = Path(__file__).parent.parent.parent.parent
37
36
 
38
37
 
39
38
  def main():
40
39
  venv_path = _ROOT_DIR / "venv"
41
- if venv_path.exists():
42
- env_builder = venv.EnvBuilder(with_pip=True)
43
- venv_context = env_builder.ensure_directories(venv_path)
44
- else:
45
- env_builder = ExtendedEnvBuilder(with_pip=True, upgrade_deps=True)
46
- env_builder.create(venv_path)
47
- venv_context = env_builder.context
48
-
49
- python_run(venv_context, "pip", ["install", "-U", "pip"])
50
- python_run(venv_context, "pip", ["install", "-U", "black"])
51
- python_run(venv_context, "pip", ["install", "-e", f"{_ROOT_DIR}/generator"])
40
+
41
+ # Create virtual environment using package manager abstraction
42
+ from package_manager import create_venv_with_package_manager, install_packages
43
+ venv_context = create_venv_with_package_manager(venv_path)
44
+
45
+ # Install required packages - install_packages handles package manager logic
46
+ install_packages(["-U", "black"], venv_context)
47
+ install_packages(["-e", f"{_ROOT_DIR}/generator"], venv_context)
52
48
 
53
49
 
54
50
  if __name__ == "__main__":
@@ -0,0 +1,139 @@
1
+ #!/usr/bin/env python
2
+
3
+ # -------------------------------------------------------------------------
4
+ # Copyright (c) Microsoft Corporation. All rights reserved.
5
+ # Licensed under the MIT License. See License.txt in the project root for
6
+ # license information.
7
+ # --------------------------------------------------------------------------
8
+ """Package manager utilities for detecting and using pip or uv."""
9
+
10
+ import subprocess
11
+ import sys
12
+ import venv
13
+ from pathlib import Path
14
+ from venvtools import ExtendedEnvBuilder
15
+
16
+
17
+ class PackageManagerNotFoundError(Exception):
18
+ """Raised when no suitable package manager is found."""
19
+ pass
20
+
21
+
22
+ def _check_command_available(command: str) -> bool:
23
+ """Check if a command is available in the environment."""
24
+ try:
25
+ subprocess.run([command, "--version"], capture_output=True, check=True)
26
+ return True
27
+ except (subprocess.CalledProcessError, FileNotFoundError):
28
+ return False
29
+
30
+
31
+ def detect_package_manager() -> str:
32
+ """Detect the best available package manager.
33
+
34
+ Returns:
35
+ str: The package manager command ('uv' or 'pip')
36
+
37
+ Raises:
38
+ PackageManagerNotFoundError: If no suitable package manager is found
39
+ """
40
+ # Check for uv first since it's more modern and faster
41
+ if _check_command_available("uv"):
42
+ return "uv"
43
+
44
+ # Fall back to pip
45
+ if _check_command_available("pip"):
46
+ return "pip"
47
+
48
+ # As a last resort, try using python -m pip
49
+ try:
50
+ subprocess.run([sys.executable, "-m", "pip", "--version"],
51
+ capture_output=True, check=True)
52
+ return "python -m pip"
53
+ except (subprocess.CalledProcessError, FileNotFoundError):
54
+ pass
55
+
56
+ raise PackageManagerNotFoundError(
57
+ "No suitable package manager found. Please install either uv or pip."
58
+ )
59
+
60
+
61
+ def get_install_command(package_manager: str, venv_context=None) -> list:
62
+ """Get the install command for the given package manager.
63
+
64
+ Args:
65
+ package_manager: The package manager command ('uv', 'pip', or 'python -m pip')
66
+ venv_context: The virtual environment context (optional, used for pip)
67
+
68
+ Returns:
69
+ list: The base install command as a list
70
+ """
71
+ if package_manager == "uv":
72
+ cmd = ["uv", "pip", "install"]
73
+ if venv_context:
74
+ cmd.extend(["--python", venv_context.env_exe])
75
+ return cmd
76
+ elif package_manager == "pip":
77
+ if venv_context:
78
+ return [venv_context.env_exe, "-m", "pip", "install"]
79
+ else:
80
+ return ["pip", "install"]
81
+ elif package_manager == "python -m pip":
82
+ if venv_context:
83
+ return [venv_context.env_exe, "-m", "pip", "install"]
84
+ else:
85
+ return [sys.executable, "-m", "pip", "install"]
86
+ else:
87
+ raise ValueError(f"Unknown package manager: {package_manager}")
88
+
89
+
90
+ def install_packages(packages: list, venv_context=None, package_manager: str = None) -> None:
91
+ """Install packages using the available package manager.
92
+
93
+ Args:
94
+ packages: List of packages to install
95
+ venv_context: Virtual environment context (optional)
96
+ package_manager: Package manager to use (auto-detected if None)
97
+ """
98
+ if package_manager is None:
99
+ package_manager = detect_package_manager()
100
+
101
+ install_cmd = get_install_command(package_manager, venv_context)
102
+
103
+ try:
104
+ subprocess.check_call(install_cmd + packages)
105
+ except subprocess.CalledProcessError as e:
106
+ raise RuntimeError(f"Failed to install packages with {package_manager}: {e}")
107
+
108
+
109
+ def create_venv_with_package_manager(venv_path):
110
+ """Create virtual environment using the best available package manager.
111
+
112
+ Args:
113
+ venv_path: Path where to create the virtual environment
114
+
115
+ Returns:
116
+ venv_context: Virtual environment context object
117
+ """
118
+ package_manager = detect_package_manager()
119
+
120
+ if package_manager == "uv":
121
+ # Use uv to create and manage the virtual environment
122
+ if not venv_path.exists():
123
+ subprocess.check_call(["uv", "venv", str(venv_path)])
124
+
125
+ # Create a mock venv_context for compatibility
126
+ class MockVenvContext:
127
+ def __init__(self, venv_path):
128
+ self.env_exe = str(venv_path / "bin" / "python") if sys.platform != "win32" else str(venv_path / "Scripts" / "python.exe")
129
+
130
+ return MockVenvContext(venv_path)
131
+ else:
132
+ # Use standard venv for pip
133
+ if venv_path.exists():
134
+ env_builder = venv.EnvBuilder(with_pip=True)
135
+ return env_builder.ensure_directories(venv_path)
136
+ else:
137
+ env_builder = ExtendedEnvBuilder(with_pip=True, upgrade_deps=True)
138
+ env_builder.create(venv_path)
139
+ return env_builder.context
@@ -6,8 +6,6 @@
6
6
  # license information.
7
7
  # --------------------------------------------------------------------------
8
8
  import sys
9
- import os
10
- import argparse
11
9
 
12
10
  if not sys.version_info >= (3, 9, 0):
13
11
  raise Warning(
@@ -15,9 +13,7 @@ if not sys.version_info >= (3, 9, 0):
15
13
  )
16
14
 
17
15
  from pathlib import Path
18
- import venv
19
-
20
- from venvtools import python_run
16
+ from package_manager import create_venv_with_package_manager, install_packages
21
17
 
22
18
  _ROOT_DIR = Path(__file__).parent.parent.parent.parent
23
19
 
@@ -28,14 +24,10 @@ def main():
28
24
 
29
25
  assert venv_preexists # Otherwise install was not done
30
26
 
31
- env_builder = venv.EnvBuilder(with_pip=True)
32
- venv_context = env_builder.ensure_directories(venv_path)
27
+ venv_context = create_venv_with_package_manager(venv_path)
28
+
33
29
  try:
34
- python_run(
35
- venv_context,
36
- "pip",
37
- ["install", "-r", f"{_ROOT_DIR}/generator/dev_requirements.txt"],
38
- )
30
+ install_packages(["-r", f"{_ROOT_DIR}/generator/dev_requirements.txt"], venv_context)
39
31
  except FileNotFoundError as e:
40
32
  raise ValueError(e.filename)
41
33
 
@@ -3,8 +3,6 @@
3
3
  # Licensed under the MIT License. See License.txt in the project root for
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
- from contextlib import contextmanager
7
- import tempfile
8
6
  import subprocess
9
7
  import venv
10
8
  import sys
@@ -31,51 +29,12 @@ class ExtendedEnvBuilder(venv.EnvBuilder):
31
29
  return self.context
32
30
 
33
31
 
34
- def create(
35
- env_dir,
36
- system_site_packages=False,
37
- clear=False,
38
- symlinks=False,
39
- with_pip=False,
40
- prompt=None,
41
- upgrade_deps=False,
42
- ):
43
- """Create a virtual environment in a directory."""
44
- builder = ExtendedEnvBuilder(
45
- system_site_packages=system_site_packages,
46
- clear=clear,
47
- symlinks=symlinks,
48
- with_pip=with_pip,
49
- prompt=prompt,
50
- upgrade_deps=upgrade_deps,
51
- )
52
- builder.create(env_dir)
53
- return builder.context
54
-
55
-
56
- @contextmanager
57
- def create_venv_with_package(packages):
58
- """Create a venv with these packages in a temp dir and yield the env.
59
-
60
- packages should be an iterable of pip version instruction (e.g. package~=1.2.3)
61
- """
62
- with tempfile.TemporaryDirectory() as tempdir:
63
- my_env = create(tempdir, with_pip=True, upgrade_deps=True)
64
- pip_call = [
65
- my_env.env_exe,
66
- "-m",
67
- "pip",
68
- "install",
69
- ]
70
- subprocess.check_call(pip_call + ["-U", "pip"])
71
- if packages:
72
- subprocess.check_call(pip_call + packages)
73
- yield my_env
74
32
 
75
33
 
76
34
  def python_run(venv_context, module, command=None, *, additional_dir="."):
77
35
  try:
78
36
  cmd_line = [venv_context.env_exe, "-m", module] + (command if command else [])
37
+
79
38
  print("Executing: {}".format(" ".join(cmd_line)))
80
39
  subprocess.run(
81
40
  cmd_line,
@@ -87,11 +87,17 @@ class Property(BaseModel): # pylint: disable=too-many-instance-attributes
87
87
  def is_enum_discriminator(self) -> bool:
88
88
  return self.is_discriminator and self.type.type == "enum"
89
89
 
90
+ @property
91
+ def is_combined_discriminator(self) -> bool:
92
+ return self.is_discriminator and self.type.type == "combined"
93
+
90
94
  @property
91
95
  def is_base_discriminator(self) -> bool:
92
96
  """If this discriminator is on the base model for polymorphic inheritance"""
93
97
  if self.is_enum_discriminator:
94
98
  return self.is_polymorphic and self.client_default_value is None
99
+ if self.is_combined_discriminator:
100
+ return True
95
101
  return self.is_discriminator and self.is_polymorphic and cast(ConstantType, self.type).value is None
96
102
 
97
103
  @property
@@ -104,4 +104,35 @@ additional questions or comments.
104
104
  [pip]: https://pypi.org/project/pip/
105
105
  [azure_sub]: https://azure.microsoft.com/free/
106
106
  {% endif %}
107
+ {% else %}
108
+ # Overview
109
+
110
+ This package is generated by `@typespec/http-client-python` with Typespec.
111
+
112
+ ## Getting started
113
+
114
+ ### Prequisites
115
+
116
+ - Python 3.9 or later is required to use this package.
117
+
118
+ ### Install the package
119
+
120
+ Step into folder where setup.py is then run:
121
+
122
+ ```bash
123
+ pip install -e .
124
+ ```
125
+
126
+ ### Examples
127
+
128
+ ```python
129
+ >>> from {{ code_model.namespace }} import {{ client_name }}
130
+ >>> from {{ code_model.core_library }}.exceptions import HttpResponseError
131
+
132
+ >>> client = {{ client_name }}(endpoint='<endpoint>')
133
+ >>> try:
134
+ <!-- write code here -->
135
+ except HttpResponseError as e:
136
+ print('service responds error: {}'.format(e.response.json()))
137
+ ```
107
138
  {% endif %}
@@ -87,11 +87,17 @@ class Property(BaseModel): # pylint: disable=too-many-instance-attributes
87
87
  def is_enum_discriminator(self) -> bool:
88
88
  return self.is_discriminator and self.type.type == "enum"
89
89
 
90
+ @property
91
+ def is_combined_discriminator(self) -> bool:
92
+ return self.is_discriminator and self.type.type == "combined"
93
+
90
94
  @property
91
95
  def is_base_discriminator(self) -> bool:
92
96
  """If this discriminator is on the base model for polymorphic inheritance"""
93
97
  if self.is_enum_discriminator:
94
98
  return self.is_polymorphic and self.client_default_value is None
99
+ if self.is_combined_discriminator:
100
+ return True
95
101
  return self.is_discriminator and self.is_polymorphic and cast(ConstantType, self.type).value is None
96
102
 
97
103
  @property
@@ -104,4 +104,35 @@ additional questions or comments.
104
104
  [pip]: https://pypi.org/project/pip/
105
105
  [azure_sub]: https://azure.microsoft.com/free/
106
106
  {% endif %}
107
+ {% else %}
108
+ # Overview
109
+
110
+ This package is generated by `@typespec/http-client-python` with Typespec.
111
+
112
+ ## Getting started
113
+
114
+ ### Prequisites
115
+
116
+ - Python 3.9 or later is required to use this package.
117
+
118
+ ### Install the package
119
+
120
+ Step into folder where setup.py is then run:
121
+
122
+ ```bash
123
+ pip install -e .
124
+ ```
125
+
126
+ ### Examples
127
+
128
+ ```python
129
+ >>> from {{ code_model.namespace }} import {{ client_name }}
130
+ >>> from {{ code_model.core_library }}.exceptions import HttpResponseError
131
+
132
+ >>> client = {{ client_name }}(endpoint='<endpoint>')
133
+ >>> try:
134
+ <!-- write code here -->
135
+ except HttpResponseError as e:
136
+ print('service responds error: {}'.format(e.response.json()))
137
+ ```
107
138
  {% endif %}
@@ -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."