@autorest/python 6.38.1 → 6.39.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 (146) hide show
  1. package/README.md +2 -27
  2. package/autorest/codegen.py +0 -1
  3. package/autorest/jsonrpc/server.py +0 -3
  4. package/generator/build/lib/pygen/__init__.py +14 -23
  5. package/generator/build/lib/pygen/codegen/__init__.py +4 -4
  6. package/generator/build/lib/pygen/codegen/models/__init__.py +2 -2
  7. package/generator/build/lib/pygen/codegen/models/base.py +9 -12
  8. package/generator/build/lib/pygen/codegen/models/base_builder.py +4 -6
  9. package/generator/build/lib/pygen/codegen/models/client.py +61 -102
  10. package/generator/build/lib/pygen/codegen/models/code_model.py +29 -29
  11. package/generator/build/lib/pygen/codegen/models/combined_type.py +7 -7
  12. package/generator/build/lib/pygen/codegen/models/constant_type.py +4 -11
  13. package/generator/build/lib/pygen/codegen/models/credential_types.py +9 -11
  14. package/generator/build/lib/pygen/codegen/models/dictionary_type.py +7 -8
  15. package/generator/build/lib/pygen/codegen/models/enum_type.py +7 -7
  16. package/generator/build/lib/pygen/codegen/models/imports.py +24 -29
  17. package/generator/build/lib/pygen/codegen/models/list_type.py +15 -14
  18. package/generator/build/lib/pygen/codegen/models/lro_operation.py +6 -6
  19. package/generator/build/lib/pygen/codegen/models/lro_paging_operation.py +2 -2
  20. package/generator/build/lib/pygen/codegen/models/model_type.py +11 -11
  21. package/generator/build/lib/pygen/codegen/models/operation.py +26 -56
  22. package/generator/build/lib/pygen/codegen/models/operation_group.py +11 -22
  23. package/generator/build/lib/pygen/codegen/models/paging_operation.py +15 -19
  24. package/generator/build/lib/pygen/codegen/models/parameter.py +12 -21
  25. package/generator/build/lib/pygen/codegen/models/parameter_list.py +37 -39
  26. package/generator/build/lib/pygen/codegen/models/primitive_types.py +24 -18
  27. package/generator/build/lib/pygen/codegen/models/property.py +10 -10
  28. package/generator/build/lib/pygen/codegen/models/request_builder.py +7 -8
  29. package/generator/build/lib/pygen/codegen/models/request_builder_parameter.py +3 -3
  30. package/generator/build/lib/pygen/codegen/models/response.py +15 -40
  31. package/generator/build/lib/pygen/codegen/models/utils.py +2 -2
  32. package/generator/build/lib/pygen/codegen/serializers/__init__.py +26 -42
  33. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +103 -100
  34. package/generator/build/lib/pygen/codegen/serializers/client_serializer.py +22 -25
  35. package/generator/build/lib/pygen/codegen/serializers/enum_serializer.py +2 -2
  36. package/generator/build/lib/pygen/codegen/serializers/general_serializer.py +49 -61
  37. package/generator/build/lib/pygen/codegen/serializers/import_serializer.py +6 -7
  38. package/generator/build/lib/pygen/codegen/serializers/model_init_serializer.py +1 -2
  39. package/generator/build/lib/pygen/codegen/serializers/model_serializer.py +15 -17
  40. package/generator/build/lib/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
  41. package/generator/build/lib/pygen/codegen/serializers/operations_init_serializer.py +5 -6
  42. package/generator/build/lib/pygen/codegen/serializers/parameter_serializer.py +28 -18
  43. package/generator/build/lib/pygen/codegen/serializers/patch_serializer.py +1 -2
  44. package/generator/build/lib/pygen/codegen/serializers/request_builders_serializer.py +1 -2
  45. package/generator/build/lib/pygen/codegen/serializers/sample_serializer.py +9 -14
  46. package/generator/build/lib/pygen/codegen/serializers/test_serializer.py +7 -7
  47. package/generator/build/lib/pygen/codegen/serializers/utils.py +2 -2
  48. package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +30 -24
  49. package/generator/build/lib/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
  50. package/generator/build/lib/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
  51. package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
  52. package/generator/build/lib/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +2 -1
  53. package/generator/build/lib/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  54. package/generator/build/lib/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +13 -2
  55. package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +1 -1
  56. package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +11 -13
  57. package/generator/build/lib/pygen/codegen/templates/utils.py.jinja2 +6 -6
  58. package/generator/build/lib/pygen/preprocess/__init__.py +47 -30
  59. package/generator/build/lib/pygen/preprocess/helpers.py +2 -2
  60. package/generator/build/lib/pygen/utils.py +6 -6
  61. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  62. package/generator/pygen/__init__.py +14 -23
  63. package/generator/pygen/codegen/__init__.py +4 -4
  64. package/generator/pygen/codegen/models/__init__.py +2 -2
  65. package/generator/pygen/codegen/models/base.py +9 -12
  66. package/generator/pygen/codegen/models/base_builder.py +4 -6
  67. package/generator/pygen/codegen/models/client.py +61 -102
  68. package/generator/pygen/codegen/models/code_model.py +29 -29
  69. package/generator/pygen/codegen/models/combined_type.py +7 -7
  70. package/generator/pygen/codegen/models/constant_type.py +4 -11
  71. package/generator/pygen/codegen/models/credential_types.py +9 -11
  72. package/generator/pygen/codegen/models/dictionary_type.py +7 -8
  73. package/generator/pygen/codegen/models/enum_type.py +7 -7
  74. package/generator/pygen/codegen/models/imports.py +24 -29
  75. package/generator/pygen/codegen/models/list_type.py +15 -14
  76. package/generator/pygen/codegen/models/lro_operation.py +6 -6
  77. package/generator/pygen/codegen/models/lro_paging_operation.py +2 -2
  78. package/generator/pygen/codegen/models/model_type.py +11 -11
  79. package/generator/pygen/codegen/models/operation.py +26 -56
  80. package/generator/pygen/codegen/models/operation_group.py +11 -22
  81. package/generator/pygen/codegen/models/paging_operation.py +15 -19
  82. package/generator/pygen/codegen/models/parameter.py +12 -21
  83. package/generator/pygen/codegen/models/parameter_list.py +37 -39
  84. package/generator/pygen/codegen/models/primitive_types.py +24 -18
  85. package/generator/pygen/codegen/models/property.py +10 -10
  86. package/generator/pygen/codegen/models/request_builder.py +7 -8
  87. package/generator/pygen/codegen/models/request_builder_parameter.py +3 -3
  88. package/generator/pygen/codegen/models/response.py +15 -40
  89. package/generator/pygen/codegen/models/utils.py +2 -2
  90. package/generator/pygen/codegen/serializers/__init__.py +26 -42
  91. package/generator/pygen/codegen/serializers/builder_serializer.py +103 -100
  92. package/generator/pygen/codegen/serializers/client_serializer.py +22 -25
  93. package/generator/pygen/codegen/serializers/enum_serializer.py +2 -2
  94. package/generator/pygen/codegen/serializers/general_serializer.py +49 -61
  95. package/generator/pygen/codegen/serializers/import_serializer.py +6 -7
  96. package/generator/pygen/codegen/serializers/model_init_serializer.py +1 -2
  97. package/generator/pygen/codegen/serializers/model_serializer.py +15 -17
  98. package/generator/pygen/codegen/serializers/operation_groups_serializer.py +3 -3
  99. package/generator/pygen/codegen/serializers/operations_init_serializer.py +5 -6
  100. package/generator/pygen/codegen/serializers/parameter_serializer.py +28 -18
  101. package/generator/pygen/codegen/serializers/patch_serializer.py +1 -2
  102. package/generator/pygen/codegen/serializers/request_builders_serializer.py +1 -2
  103. package/generator/pygen/codegen/serializers/sample_serializer.py +9 -14
  104. package/generator/pygen/codegen/serializers/test_serializer.py +7 -7
  105. package/generator/pygen/codegen/serializers/utils.py +2 -2
  106. package/generator/pygen/codegen/templates/model_base.py.jinja2 +30 -24
  107. package/generator/pygen/codegen/templates/model_dpg.py.jinja2 +1 -1
  108. package/generator/pygen/codegen/templates/operation_group.py.jinja2 +1 -11
  109. package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +1 -1
  110. package/generator/pygen/codegen/templates/packaging_templates/CHANGELOG.md.jinja2 +2 -1
  111. package/generator/pygen/codegen/templates/packaging_templates/dev_requirements.txt.jinja2 +1 -1
  112. package/generator/pygen/codegen/templates/packaging_templates/pyproject.toml.jinja2 +13 -2
  113. package/generator/pygen/codegen/templates/patch.py.jinja2 +1 -1
  114. package/generator/pygen/codegen/templates/serialization.py.jinja2 +11 -13
  115. package/generator/pygen/codegen/templates/utils.py.jinja2 +6 -6
  116. package/generator/pygen/preprocess/__init__.py +47 -30
  117. package/generator/pygen/preprocess/helpers.py +2 -2
  118. package/generator/pygen/utils.py +6 -6
  119. package/generator/pygen.egg-info/SOURCES.txt +0 -2
  120. package/package.json +2 -2
  121. package/scripts/__pycache__/venvtools.cpython-310.pyc +0 -0
  122. package/autorest/multiapi/__init__.py +0 -185
  123. package/autorest/multiapi/models/__init__.py +0 -16
  124. package/autorest/multiapi/models/client.py +0 -68
  125. package/autorest/multiapi/models/code_model.py +0 -142
  126. package/autorest/multiapi/models/config.py +0 -24
  127. package/autorest/multiapi/models/constant_global_parameter.py +0 -11
  128. package/autorest/multiapi/models/global_parameter.py +0 -34
  129. package/autorest/multiapi/models/global_parameters.py +0 -53
  130. package/autorest/multiapi/models/imports.py +0 -181
  131. package/autorest/multiapi/models/mixin_operation.py +0 -38
  132. package/autorest/multiapi/models/operation_group.py +0 -29
  133. package/autorest/multiapi/models/operation_mixin_group.py +0 -89
  134. package/autorest/multiapi/serializers/__init__.py +0 -145
  135. package/autorest/multiapi/serializers/import_serializer.py +0 -181
  136. package/autorest/multiapi/templates/multiapi_config.py.jinja2 +0 -89
  137. package/autorest/multiapi/templates/multiapi_init.py.jinja2 +0 -22
  138. package/autorest/multiapi/templates/multiapi_models.py.jinja2 +0 -9
  139. package/autorest/multiapi/templates/multiapi_operations_mixin.py.jinja2 +0 -39
  140. package/autorest/multiapi/templates/multiapi_service_client.py.jinja2 +0 -163
  141. package/autorest/multiapi/templates/multiapi_version.py.jinja2 +0 -8
  142. package/autorest/multiapi/utils.py +0 -51
  143. package/generator/build/lib/pygen/codegen/serializers/metadata_serializer.py +0 -216
  144. package/generator/build/lib/pygen/codegen/templates/metadata.json.jinja2 +0 -167
  145. package/generator/pygen/codegen/serializers/metadata_serializer.py +0 -216
  146. package/generator/pygen/codegen/templates/metadata.json.jinja2 +0 -167
@@ -1,145 +0,0 @@
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
- from pathlib import Path
7
- from typing import Any, Optional, Union, List
8
- from jinja2 import PackageLoader, Environment
9
- from pygen import ReaderAndWriter
10
- from pygen.utils import build_policies
11
-
12
- from .import_serializer import FileImportSerializer
13
-
14
- from ...jsonrpc import AutorestAPI
15
- from ..models import CodeModel, GlobalParameter
16
- from ... import ReaderAndWriterAutorest
17
-
18
-
19
- __all__ = [
20
- "MultiAPISerializer",
21
- ]
22
-
23
- _FILE_TO_TEMPLATE = {
24
- "init": "multiapi_init.py.jinja2",
25
- "client": "multiapi_service_client.py.jinja2",
26
- "config": "multiapi_config.py.jinja2",
27
- "models": "multiapi_models.py.jinja2",
28
- "operations_mixin": "multiapi_operations_mixin.py.jinja2",
29
- }
30
-
31
-
32
- def _method_signature_helper(parameters: List[GlobalParameter], async_mode: bool) -> List[str]:
33
- return [p.signature(async_mode) for p in sorted(parameters, key=lambda p: p.required, reverse=True)]
34
-
35
-
36
- def _get_file_path(filename: str, async_mode: bool) -> Path:
37
- filename += ".py"
38
- if async_mode:
39
- return Path("aio") / filename
40
- return Path(filename)
41
-
42
-
43
- class MultiAPISerializer(ReaderAndWriter): # pylint: disable=abstract-method
44
- def __init__(self, **kwargs: Any) -> None:
45
- super().__init__(**kwargs)
46
- self.env = Environment(
47
- loader=PackageLoader("autorest.multiapi", "templates"),
48
- keep_trailing_newline=True,
49
- line_statement_prefix="##",
50
- line_comment_prefix="###",
51
- trim_blocks=True,
52
- lstrip_blocks=True,
53
- )
54
-
55
- def _serialize_helper(self, code_model: CodeModel, async_mode: bool) -> None:
56
- def _render_template(file: str, **kwargs: Any) -> str:
57
- template = self.env.get_template(_FILE_TO_TEMPLATE[file])
58
- all_params = (
59
- code_model.global_parameters.parameters
60
- + code_model.global_parameters.service_client_specific_global_parameters
61
- )
62
- positional_params = [p for p in all_params if p.method_location == "positional"]
63
- keyword_only_params = [p for p in all_params if p.method_location == "keywordOnly"]
64
- return template.render(
65
- code_model=code_model,
66
- async_mode=async_mode,
67
- positional_params=_method_signature_helper(positional_params, async_mode),
68
- keyword_only_params=_method_signature_helper(keyword_only_params, async_mode),
69
- **kwargs
70
- )
71
-
72
- # serialize init file
73
- self.write_file(_get_file_path("__init__", async_mode), _render_template("init"))
74
-
75
- # serialize service client file
76
- imports = FileImportSerializer(code_model.client.imports(async_mode))
77
- config_policies = build_policies(code_model.azure_arm, async_mode, is_azure_flavor=True)
78
- self.write_file(
79
- _get_file_path(code_model.client.filename, async_mode),
80
- _render_template("client", imports=imports, config_policies=config_policies),
81
- )
82
-
83
- # serialize config file
84
- imports = FileImportSerializer(code_model.config.imports(async_mode))
85
- self.write_file(
86
- _get_file_path("_configuration", async_mode),
87
- _render_template("config", imports=imports),
88
- )
89
-
90
- # serialize mixins
91
- if code_model.operation_mixin_group.mixin_operations:
92
- imports = FileImportSerializer(
93
- code_model.operation_mixin_group.imports(async_mode),
94
- code_model.operation_mixin_group.typing_definitions(async_mode),
95
- )
96
- self.write_file(
97
- _get_file_path("_operations_mixin", async_mode),
98
- _render_template("operations_mixin", imports=imports),
99
- )
100
-
101
- # serialize models
102
- self.write_file(Path("models.py"), _render_template("models"))
103
-
104
- def _serialize_version_file(self) -> None:
105
- if self.read_file("_version.py"):
106
- self.write_file("_version.py", self.read_file("_version.py"))
107
- elif self.read_file("version.py"):
108
- self.write_file("_version.py", self.read_file("version.py"))
109
- else:
110
- template = self.env.get_template("multiapi_version.py.jinja2")
111
- self.write_file(Path("_version.py"), template.render())
112
-
113
- def serialize(self, code_model: CodeModel, no_async: Optional[bool]) -> None:
114
- self._serialize_helper(code_model, async_mode=False)
115
- if not no_async:
116
- self._serialize_helper(code_model, async_mode=True)
117
-
118
- self._serialize_version_file()
119
-
120
- # don't erase patch file
121
- if self.read_file("_patch.py"):
122
- self.write_file("_patch.py", self.read_file("_patch.py"))
123
-
124
- self.write_file(Path("py.typed"), "# Marker file for PEP 561.")
125
-
126
- if not code_model.client.client_side_validation:
127
- codegen_env = Environment(
128
- loader=PackageLoader("pygen.codegen", "templates"),
129
- keep_trailing_newline=True,
130
- line_statement_prefix="##",
131
- line_comment_prefix="###",
132
- trim_blocks=True,
133
- lstrip_blocks=True,
134
- )
135
- self.write_file(
136
- Path("_serialization.py"),
137
- codegen_env.get_template("serialization.py.jinja2").render(
138
- code_model=code_model,
139
- ),
140
- )
141
-
142
-
143
- class MultiAPISerializerAutorest(MultiAPISerializer, ReaderAndWriterAutorest):
144
- def __init__(self, autorestapi: AutorestAPI, *, output_folder: Union[str, Path]) -> None:
145
- super().__init__(autorestapi=autorestapi, output_folder=output_folder)
@@ -1,181 +0,0 @@
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
- from copy import deepcopy
7
- from typing import Dict, Set, Optional, List, Tuple, Union
8
- from ..models import ImportType, FileImport, TypingSection
9
- from ..utils import convert_list_to_tuple
10
-
11
-
12
- def _serialize_package(
13
- package_name: str,
14
- module_list: Set[
15
- Optional[
16
- Union[
17
- str,
18
- Tuple[
19
- str,
20
- str,
21
- ],
22
- Tuple[
23
- str,
24
- Optional[str],
25
- Tuple[Tuple[Tuple[int, int], str, Optional[str]]],
26
- ],
27
- ]
28
- ]
29
- ],
30
- delimiter: str,
31
- ) -> str:
32
- buffer = []
33
-
34
- versioned_modules = set()
35
- normal_modules = set()
36
- for m in module_list:
37
- if m and isinstance(m, (tuple, list)) and len(m) > 2:
38
- versioned_modules.add(convert_list_to_tuple(m))
39
- else:
40
- normal_modules.add(m)
41
- if None in normal_modules:
42
- buffer.append(f"import {package_name}")
43
- if normal_modules != {None} and len(normal_modules) > 0:
44
- buffer.append(
45
- "from {} import {}".format(
46
- package_name,
47
- ", ".join(
48
- sorted(
49
- [
50
- mod if isinstance(mod, str) else f"{mod[0]} as {mod[1]}"
51
- for mod in normal_modules
52
- if mod is not None
53
- ]
54
- )
55
- ),
56
- )
57
- )
58
- for submodule_name, alias, version_modules in versioned_modules:
59
- for n, (version, module_name, comment) in enumerate(version_modules):
60
- buffer.append("{} sys.version_info >= {}:".format("if" if n == 0 else "elif", version))
61
- buffer.append(
62
- f" from {module_name} import {submodule_name}{f' as {alias}' if alias else ''}"
63
- f"{f' # {comment}' if comment else ''}"
64
- )
65
- buffer.append("else:")
66
- buffer.append(
67
- f" from {package_name} import {submodule_name}{f' as {alias}' if alias else ''}"
68
- " # type: ignore # pylint: disable=ungrouped-imports"
69
- )
70
- return delimiter.join(buffer)
71
-
72
-
73
- def _serialize_type(
74
- import_type_dict: Dict[
75
- str,
76
- Set[
77
- Optional[
78
- Union[
79
- str,
80
- Tuple[
81
- str,
82
- str,
83
- ],
84
- Tuple[
85
- str,
86
- Optional[str],
87
- Tuple[Tuple[Tuple[int, int], str, Optional[str]]],
88
- ],
89
- ]
90
- ]
91
- ],
92
- ],
93
- delimiter: str,
94
- ) -> str:
95
- """Serialize a given import type."""
96
- import_list = []
97
- for package_name in sorted(list(import_type_dict.keys())):
98
- module_list = import_type_dict[package_name]
99
- import_list.append(_serialize_package(package_name, module_list, delimiter))
100
- return delimiter.join(import_list)
101
-
102
-
103
- def _get_import_clauses(
104
- imports: Dict[
105
- ImportType,
106
- Dict[
107
- str,
108
- Set[
109
- Optional[
110
- Union[
111
- str,
112
- Tuple[
113
- str,
114
- str,
115
- ],
116
- Tuple[
117
- str,
118
- Optional[str],
119
- Tuple[Tuple[Tuple[int, int], str, Optional[str]]],
120
- ],
121
- ]
122
- ]
123
- ],
124
- ],
125
- ],
126
- delimiter: str,
127
- ) -> List[str]:
128
- import_clause = []
129
- for import_type in ImportType:
130
- if import_type in imports:
131
- import_clause.append(_serialize_type(imports[import_type], delimiter))
132
- return import_clause
133
-
134
-
135
- class FileImportSerializer:
136
- def __init__(self, file_import: FileImport, typing_definitions: str = "") -> None:
137
- self._file_import = file_import
138
- self._typing_definitions = typing_definitions
139
-
140
- def _switch_typing_section_key(self, new_key: TypingSection):
141
- switched_dictionary = {}
142
- switched_dictionary[new_key] = self._file_import.imports[TypingSection.CONDITIONAL]
143
- return switched_dictionary
144
-
145
- def _get_imports_dict(self, baseline_typing_section: TypingSection, add_conditional_typing: bool):
146
- # If this is a python 3 file, our regular imports include the CONDITIONAL category
147
- # If this is not a python 3 file, our typing imports include the CONDITIONAL category
148
- file_import_copy = deepcopy(self._file_import)
149
- if add_conditional_typing and self._file_import.imports.get(TypingSection.CONDITIONAL):
150
- # we switch the TypingSection key for the CONDITIONAL typing imports so we can merge
151
- # the imports together
152
- switched_imports_dictionary = self._switch_typing_section_key(baseline_typing_section)
153
- switched_imports = FileImport(switched_imports_dictionary)
154
- file_import_copy.merge(switched_imports)
155
- return file_import_copy.imports.get(baseline_typing_section, {})
156
-
157
- def _add_type_checking_import(self):
158
- if self._file_import.imports.get(TypingSection.TYPING):
159
- self._file_import.add_submodule_import("typing", "TYPE_CHECKING", ImportType.STDLIB)
160
-
161
- def __str__(self) -> str:
162
- self._add_type_checking_import()
163
- regular_imports = ""
164
- regular_imports_dict = self._get_imports_dict(
165
- baseline_typing_section=TypingSection.REGULAR,
166
- add_conditional_typing=True,
167
- )
168
-
169
- if regular_imports_dict:
170
- regular_imports = "\n\n".join(_get_import_clauses(regular_imports_dict, "\n"))
171
-
172
- typing_imports = ""
173
- typing_imports_dict = self._get_imports_dict(
174
- baseline_typing_section=TypingSection.TYPING,
175
- add_conditional_typing=False,
176
- )
177
- if typing_imports_dict:
178
- typing_imports += "\n\nif TYPE_CHECKING:\n # pylint: disable=unused-import,ungrouped-imports\n "
179
- typing_imports += "\n\n ".join(_get_import_clauses(typing_imports_dict, "\n "))
180
-
181
- return regular_imports + typing_imports + self._typing_definitions
@@ -1,89 +0,0 @@
1
- {% macro method_signature() %}
2
- def __init__(
3
- self,
4
- {% for parameter in code_model.global_parameters.parameters %}
5
- {% if parameter.required %}
6
- {{ parameter.signature(async_mode) }}
7
- {% endif %}
8
- {% endfor %}
9
- {% for parameter in code_model.global_parameters.parameters %}
10
- {% if not parameter.required %}
11
- {{ parameter.signature(async_mode) }}
12
- {% endif %}
13
- {% endfor %}
14
- **kwargs: Any
15
- ){{" -> None" if async_mode else "" }}:{% endmacro %}
16
- {% set version_import = ".._version" if async_mode else "._version" %}
17
- {% set async_prefix = "Async" if async_mode else "" %}
18
- {# actual template starts here #}
19
- # coding=utf-8
20
- # --------------------------------------------------------------------------
21
- # Copyright (c) Microsoft Corporation. All rights reserved.
22
- # Licensed under the MIT License. See License.txt in the project root for
23
- # license information.
24
- #
25
- # Code generated by Microsoft (R) AutoRest Code Generator.
26
- # Changes may cause incorrect behavior and will be lost if the code is
27
- # regenerated.
28
- # --------------------------------------------------------------------------
29
- {{ imports }}
30
-
31
- class {{ code_model.client.name }}Configuration:
32
- """Configuration for {{ code_model.client.name }}.
33
-
34
- Note that all parameters used to create this instance are saved as instance
35
- attributes.
36
- {% if code_model.global_parameters.parameters %}
37
-
38
- {% endif %}
39
- {% for parameter in code_model.global_parameters.parameters %}
40
- :param {{ parameter.name }}: {{ parameter.description(async_mode) }}
41
- :type {{ parameter.name }}: {{ parameter.docstring_type(async_mode) }}
42
- {% endfor %}
43
- """
44
-
45
- {{ method_signature()|indent }}
46
- {% for parameter in code_model.global_parameters.parameters %}
47
- {% if parameter.required %}
48
- if {{ parameter.name }} is None:
49
- raise ValueError("Parameter '{{ parameter.name }}' must not be None.")
50
- {% endif %}
51
- {% endfor %}
52
-
53
- {% for parameter in code_model.global_parameters.parameters %}
54
- self.{{ parameter.name }} = {{ parameter.name }}
55
- {% endfor %}
56
- {% if code_model.global_parameters.constant_parameters %}
57
- {% for constant_parameter in code_model.global_parameters.constant_parameters %}
58
- self.{{ constant_parameter.name }} = {{ constant_parameter.value }}
59
- {% endfor %}
60
- {% endif %}
61
- {% if code_model.config.credential_scopes is not none %}
62
- self.credential_scopes = kwargs.pop('credential_scopes', {{ code_model.config.credential_scopes }})
63
- {% endif %}
64
- kwargs.setdefault('sdk_moniker', '{{ code_model.package_name|lower }}/{}'.format(VERSION))
65
- self.polling_interval = kwargs.get("polling_interval", 30)
66
- self._configure(**kwargs)
67
-
68
- def _configure(
69
- self,
70
- **kwargs: Any
71
- ){{ " -> None" if async_mode else "" }}:
72
- self.user_agent_policy = kwargs.get('user_agent_policy') or policies.UserAgentPolicy(**kwargs)
73
- self.headers_policy = kwargs.get('headers_policy') or policies.HeadersPolicy(**kwargs)
74
- self.proxy_policy = kwargs.get('proxy_policy') or policies.ProxyPolicy(**kwargs)
75
- self.logging_policy = kwargs.get('logging_policy') or policies.NetworkTraceLoggingPolicy(**kwargs)
76
- self.http_logging_policy = kwargs.get('http_logging_policy') or {{ "ARM" if code_model.azure_arm else "policies." }}HttpLoggingPolicy(**kwargs)
77
- self.retry_policy = kwargs.get('retry_policy') or policies.{{ async_prefix }}RetryPolicy(**kwargs)
78
- self.custom_hook_policy = kwargs.get('custom_hook_policy') or policies.CustomHookPolicy(**kwargs)
79
- self.redirect_policy = kwargs.get('redirect_policy') or policies.{{ async_prefix }}RedirectPolicy(**kwargs)
80
- self.authentication_policy = kwargs.get('authentication_policy')
81
- {% if code_model.config.credential %}
82
- {# only adding this if credential_scopes is not passed during code generation #}
83
- {% if code_model.config.credential_scopes is not none and code_model.config.credential_scopes|length == 0 %}
84
- if not self.credential_scopes and not self.authentication_policy:
85
- raise ValueError("You must provide either credential_scopes or authentication_policy as kwargs")
86
- {% endif %}
87
- if self.credential and not self.authentication_policy:
88
- self.authentication_policy = {{ code_model.config.credential_call(async_mode) }}
89
- {% endif %}
@@ -1,22 +0,0 @@
1
- # coding=utf-8
2
- # --------------------------------------------------------------------------
3
- # Copyright (c) Microsoft Corporation. All rights reserved.
4
- # Licensed under the MIT License. See License.txt in the project root for license information.
5
- # Code generated by Microsoft (R) AutoRest Code Generator.
6
- # Changes may cause incorrect behavior and will be lost if the code is regenerated.
7
- # --------------------------------------------------------------------------
8
-
9
- from .{{ code_model.client.filename }} import {{ code_model.client.name }}
10
- __all__ = ['{{ code_model.client.name }}']
11
- {% if not async_mode %}
12
-
13
- try:
14
- from ._patch import patch_sdk # type: ignore
15
- patch_sdk()
16
- except ImportError:
17
- pass
18
-
19
- from ._version import VERSION
20
-
21
- __version__ = VERSION
22
- {% endif %}
@@ -1,9 +0,0 @@
1
- # coding=utf-8
2
- # --------------------------------------------------------------------------
3
- # Copyright (c) Microsoft Corporation. All rights reserved.
4
- # Licensed under the MIT License. See License.txt in the project root for
5
- # license information.
6
- # --------------------------------------------------------------------------
7
- {% for mod_api_version in code_model.default_models %}
8
- from .{{ mod_api_version }}.models import *
9
- {% endfor %}
@@ -1,39 +0,0 @@
1
- # coding=utf-8
2
- # --------------------------------------------------------------------------
3
- # Copyright (c) Microsoft Corporation. All rights reserved.
4
- # Licensed under the MIT License. See License.txt in the project root for
5
- # license information.
6
- #
7
- # Code generated by Microsoft (R) AutoRest Code Generator.
8
- # Changes may cause incorrect behavior and will be lost if the code is
9
- # regenerated.
10
- # --------------------------------------------------------------------------
11
- from {{ ".." if async_mode else "." }}_serialization import Serializer, Deserializer
12
- {% if imports %}
13
- {{ imports }}
14
- {% endif %}
15
-
16
-
17
- class {{ code_model.client.name }}OperationsMixin(object):
18
- {% for mixin_operation in code_model.operation_mixin_group.mixin_operations %}
19
-
20
- {{ mixin_operation.signature(async_mode) | indent }} {{ mixin_operation.description(async_mode) | indent(8) }}
21
- api_version = self._get_api_version('{{ mixin_operation.name }}')
22
- {% for api in mixin_operation.available_apis|sort %}
23
- {% set if_statement = "if" if loop.first else "elif" %}
24
- {{ if_statement }} api_version == '{{ code_model.mod_to_api_version[api] }}':
25
- from {{ ".." if async_mode else "." }}{{ api }}{{ ".aio" if async_mode else "" }}.operations import {{ code_model.client.name }}OperationsMixin as OperationClass
26
- {% endfor %}
27
- else:
28
- raise ValueError("API version {} does not have operation '{{ mixin_operation.name }}'".format(api_version))
29
- mixin_instance = OperationClass()
30
- mixin_instance._client = self._client
31
- mixin_instance._config = self._config
32
- mixin_instance._config.api_version = api_version
33
- mixin_instance._serialize = Serializer(self._models_dict(api_version))
34
- {% if not code_model.client.client_side_validation %}
35
- mixin_instance._serialize.client_side_validation = False
36
- {% endif %}
37
- mixin_instance._deserialize = Deserializer(self._models_dict(api_version))
38
- return {{ "await " if mixin_operation.coroutine(async_mode) }}mixin_instance.{{ mixin_operation.name }}({{ mixin_operation.call(async_mode) }})
39
- {% endfor %}
@@ -1,163 +0,0 @@
1
- {% macro method_signature() %}
2
- def __init__(
3
- self,
4
- {% for pos in positional_params %}
5
- {{ pos }}
6
- {% endfor %}
7
- {% if keyword_only_params %}
8
- *,
9
- {% endif %}
10
- {% for ko in keyword_only_params %}
11
- {{ ko }}
12
- {% endfor %}
13
- **kwargs: Any
14
- ){{" -> None" if async_mode else "" }}:{% endmacro %}
15
- {# actual template starts here #}
16
- {% set relative_path = ".." if async_mode else "." %}
17
- {% set def = "async def" if async_mode else "def" %}
18
- {% set async_prefix = "Async" if async_mode else "" %}
19
- {% set a_prefix = "a" if async_mode else "" %}
20
- {% set await = "await " if async_mode else "" %}
21
- {% set credential_scopes = "credential_scopes=credential_scopes, " if code_model.config.credential_scopes is not none and code_model.azure_arm else "" %}
22
- # coding=utf-8
23
- # --------------------------------------------------------------------------
24
- # Copyright (c) Microsoft Corporation. All rights reserved.
25
- # Licensed under the MIT License. See License.txt in the project root for
26
- # license information.
27
- #
28
- # Code generated by Microsoft (R) AutoRest Code Generator.
29
- # Changes may cause incorrect behavior and will be lost if the code is
30
- # regenerated.
31
- # --------------------------------------------------------------------------
32
-
33
- {{ imports }}
34
-
35
- class _SDKClient(object):
36
- def __init__(self, *args, **kwargs):
37
- """This is a fake class to support current implementation of MultiApiClientMixin."
38
- Will be removed in final version of multiapi azure-core based client
39
- """
40
- pass
41
-
42
- class {{ code_model.client.name }}({% if code_model.operation_mixin_group.mixin_operations %}{{ code_model.client.name }}OperationsMixin, {% endif %}MultiApiClientMixin, _SDKClient):
43
- """{{ code_model.client.description }}
44
-
45
- This ready contains multiple API versions, to help you deal with all of the Azure clouds
46
- (Azure Stack, Azure Government, Azure China, etc.).
47
- By default, it uses the latest API version available on public Azure.
48
- For production, you should stick to a particular api-version and/or profile.
49
- The profile sets a mapping between an operation group and its API version.
50
- The api-version parameter sets the default API version if the operation
51
- group is not described in the profile.
52
- {% if code_model.global_parameters.parameters %}
53
-
54
- {% endif %}
55
- {% for parameter in code_model.global_parameters.parameters %}
56
- :param {{ parameter.name }}: {{ parameter.description(async_mode) }}
57
- :type {{ parameter.name }}: {{ parameter.docstring_type(async_mode) }}
58
- {% endfor %}
59
- {% for parameter in code_model.global_parameters.service_client_specific_global_parameters %}
60
- :param {{ parameter.name }}: {{ parameter.description(async_mode) }}
61
- :type {{ parameter.name }}: {{ parameter.docstring_type(async_mode) }}
62
- {% endfor %}
63
- {% if code_model.client.has_public_lro_operations %}
64
- :keyword int polling_interval: Default waiting time between two polls for LRO operations if no Retry-After header is present.
65
- {% endif %}
66
- """
67
-
68
- DEFAULT_API_VERSION = '{{ code_model.mod_to_api_version[code_model.default_api_version] }}'
69
- _PROFILE_TAG = "{{ code_model.module_name }}.{{ code_model.client.name }}"
70
- LATEST_PROFILE = ProfileDefinition({
71
- _PROFILE_TAG: {
72
- None: DEFAULT_API_VERSION,
73
- {% for rt_name, api_version in code_model.last_rt_list|dictsort %}
74
- '{{ rt_name }}': '{{ code_model.mod_to_api_version[api_version] }}',
75
- {% endfor %}
76
- }},
77
- _PROFILE_TAG + " latest"
78
- )
79
-
80
- {{ method_signature()|indent }}
81
- {% if not code_model.azure_arm %}
82
- {% if not code_model.client.host_value %}
83
- {% for parameterized_host_template, api_versions in code_model.client.parameterized_host_template_to_api_version|dictsort %}
84
- {% set if_statement = "if" if loop.first else "elif" %}
85
- {{ if_statement ~ " api_version == '" ~ api_versions|join("' or api_version == '") ~ "'" }}:
86
- base_url = {{ parameterized_host_template }}
87
- {% endfor %}
88
- else:
89
- raise ValueError("API version {} is not available".format(api_version))
90
- {% endif %}
91
- {% endif %}
92
- if api_version:
93
- kwargs.setdefault('api_version', api_version)
94
- {% if credential_scopes %}
95
- _cloud = kwargs.pop("cloud_setting", None) or settings.current.azure_cloud # type: ignore
96
- _endpoints = get_arm_endpoints(_cloud)
97
- if not base_url:
98
- base_url = _endpoints["resource_manager"]
99
- credential_scopes = kwargs.pop("credential_scopes", _endpoints["credential_scopes"])
100
- {% endif %}
101
- self._config = {{ code_model.client.name }}Configuration({{ code_model.global_parameters.call }}{{ ", " if code_model.global_parameters.call }}{{ credential_scopes }}**kwargs)
102
- _policies = kwargs.pop("policies", None)
103
- if _policies is None:
104
- _policies = [
105
- {% for p in config_policies %}
106
- {{ p }},
107
- {% endfor %}
108
- ]
109
- {% set host_variable_name = "cast(str, " + code_model.host_variable_name + ")" if credential_scopes else code_model.host_variable_name %}
110
- self._client: {{ async_prefix }}{{ code_model.client.pipeline_client }} = {{ async_prefix }}{{ code_model.client.pipeline_client }}(base_url={{ host_variable_name }}, policies=_policies, **kwargs)
111
- super({{ code_model.client.name }}, self).__init__(
112
- api_version=api_version,
113
- profile=profile
114
- )
115
-
116
- @classmethod
117
- def _models_dict(cls, api_version):
118
- return {k: v for k, v in cls.models(api_version).__dict__.items() if isinstance(v, type)}
119
-
120
- @classmethod
121
- def models(cls, api_version=DEFAULT_API_VERSION):
122
- """Module depends on the API version:
123
-
124
- {% for mod_api_version, api_version in code_model.mod_to_api_version|dictsort %}
125
- * {{ api_version }}: :mod:`{{ mod_api_version }}.models<{{ code_model.module_name }}.{{ mod_api_version }}.models>`
126
- {% endfor %}
127
- """
128
- {% for mod_api_version, api_version in code_model.mod_to_api_version|dictsort %}
129
- {% set if_statement = "if" if loop.first else "elif" %}
130
- {{if_statement }} api_version == '{{ api_version }}':
131
- from {{ relative_path }}{{ mod_api_version }} import models
132
- return models
133
- {% endfor %}
134
- raise ValueError("API version {} is not available".format(api_version))
135
- {% for operation_group in code_model.operation_groups %}
136
-
137
- @property
138
- def {{ operation_group.name }}(self):
139
- """Instance depends on the API version:
140
-
141
- {% for api in operation_group.available_apis | sort %}
142
- * {{ code_model.mod_to_api_version[api] }}: :class:`{{ operation_group.class_name(api) }}<{{ code_model.module_name }}.{{ api }}{{ ".aio" if async_mode else "" }}.operations.{{ operation_group.class_name(api) }}>`
143
- {% endfor %}
144
- """
145
- api_version = self._get_api_version('{{ operation_group.name }}')
146
- {% for api in operation_group.available_apis | sort %}
147
- {% set if_statement = "if" if loop.first else "elif" %}
148
- {{ if_statement }} api_version == '{{ code_model.mod_to_api_version[api] }}':
149
- from {{ relative_path }}{{ api }}.{{ "aio." if async_mode else "" }}operations import {{ operation_group.class_name(api) }} as OperationClass
150
- {% endfor %}
151
- else:
152
- raise ValueError("API version {} does not have operation group '{{ operation_group.name }}'".format(api_version))
153
- self._config.api_version = api_version
154
- return OperationClass(self._client, self._config, Serializer(self._models_dict(api_version)), Deserializer(self._models_dict(api_version)), api_version)
155
- {% endfor %}
156
-
157
- {{ def }} close(self):
158
- {{ await }}self._client.close()
159
- {{ def }} __{{ a_prefix }}enter__(self):
160
- {{ await }}self._client.__{{ a_prefix }}enter__()
161
- return self
162
- {{ def }} __{{ a_prefix }}exit__(self, *exc_details):
163
- {{ await }}self._client.__{{ a_prefix }}exit__(*exc_details)
@@ -1,8 +0,0 @@
1
- # coding=utf-8
2
- # --------------------------------------------------------------------------
3
- # Copyright (c) Microsoft Corporation. All rights reserved.
4
- # Licensed under the MIT License. See License.txt in the project root for
5
- # license information.
6
- # --------------------------------------------------------------------------
7
-
8
- VERSION = "0.1.0"