@autorest/python 6.1.10 → 6.2.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 (73) hide show
  1. package/autorest/_utils.py +2 -1
  2. package/autorest/codegen/__init__.py +87 -80
  3. package/autorest/codegen/models/__init__.py +12 -9
  4. package/autorest/codegen/models/base_builder.py +11 -5
  5. package/autorest/codegen/models/base_model.py +5 -3
  6. package/autorest/codegen/models/base_type.py +7 -5
  7. package/autorest/codegen/models/client.py +131 -32
  8. package/autorest/codegen/models/code_model.py +92 -120
  9. package/autorest/codegen/models/combined_type.py +9 -6
  10. package/autorest/codegen/models/constant_type.py +6 -6
  11. package/autorest/codegen/models/credential_types.py +18 -16
  12. package/autorest/codegen/models/dictionary_type.py +8 -6
  13. package/autorest/codegen/models/enum_type.py +24 -17
  14. package/autorest/codegen/models/imports.py +4 -4
  15. package/autorest/codegen/models/list_type.py +14 -10
  16. package/autorest/codegen/models/lro_operation.py +14 -6
  17. package/autorest/codegen/models/model_type.py +19 -19
  18. package/autorest/codegen/models/operation.py +50 -33
  19. package/autorest/codegen/models/operation_group.py +23 -12
  20. package/autorest/codegen/models/paging_operation.py +15 -20
  21. package/autorest/codegen/models/parameter.py +25 -25
  22. package/autorest/codegen/models/parameter_list.py +22 -16
  23. package/autorest/codegen/models/primitive_types.py +21 -11
  24. package/autorest/codegen/models/property.py +7 -7
  25. package/autorest/codegen/models/request_builder.py +31 -20
  26. package/autorest/codegen/models/request_builder_parameter.py +18 -13
  27. package/autorest/codegen/models/response.py +29 -22
  28. package/autorest/codegen/serializers/__init__.py +196 -139
  29. package/autorest/codegen/serializers/builder_serializer.py +59 -53
  30. package/autorest/codegen/serializers/client_serializer.py +40 -46
  31. package/autorest/codegen/serializers/enum_serializer.py +4 -4
  32. package/autorest/codegen/serializers/general_serializer.py +96 -43
  33. package/autorest/codegen/serializers/metadata_serializer.py +20 -16
  34. package/autorest/codegen/serializers/model_init_serializer.py +10 -6
  35. package/autorest/codegen/serializers/model_serializer.py +8 -8
  36. package/autorest/codegen/serializers/operation_groups_serializer.py +24 -12
  37. package/autorest/codegen/serializers/operations_init_serializer.py +6 -7
  38. package/autorest/codegen/serializers/patch_serializer.py +4 -4
  39. package/autorest/codegen/serializers/request_builders_serializer.py +6 -6
  40. package/autorest/codegen/serializers/sample_serializer.py +146 -0
  41. package/autorest/codegen/templates/client.py.jinja2 +7 -15
  42. package/autorest/codegen/templates/client_container.py.jinja2 +12 -0
  43. package/autorest/codegen/templates/config.py.jinja2 +13 -26
  44. package/autorest/codegen/templates/config_container.py.jinja2 +16 -0
  45. package/autorest/codegen/templates/enum_container.py.jinja2 +3 -3
  46. package/autorest/codegen/templates/init.py.jinja2 +11 -5
  47. package/autorest/codegen/templates/lro_operation.py.jinja2 +2 -2
  48. package/autorest/codegen/templates/lro_paging_operation.py.jinja2 +1 -1
  49. package/autorest/codegen/templates/metadata.json.jinja2 +13 -14
  50. package/autorest/codegen/templates/model_container.py.jinja2 +3 -3
  51. package/autorest/codegen/templates/model_init.py.jinja2 +4 -4
  52. package/autorest/codegen/templates/operation.py.jinja2 +2 -2
  53. package/autorest/codegen/templates/operation_group.py.jinja2 +3 -3
  54. package/autorest/codegen/templates/operation_groups_container.py.jinja2 +7 -7
  55. package/autorest/codegen/templates/operation_tools.jinja2 +3 -3
  56. package/autorest/codegen/templates/operations_folder_init.py.jinja2 +4 -4
  57. package/autorest/codegen/templates/{CHANGELOG.md.jinja2 → packaging_templates/CHANGELOG.md.jinja2} +0 -0
  58. package/autorest/codegen/templates/{LICENSE.jinja2 → packaging_templates/LICENSE.jinja2} +0 -0
  59. package/autorest/codegen/templates/{MANIFEST.in.jinja2 → packaging_templates/MANIFEST.in.jinja2} +0 -0
  60. package/autorest/codegen/templates/{README.md.jinja2 → packaging_templates/README.md.jinja2} +0 -0
  61. package/autorest/codegen/templates/{dev_requirements.txt.jinja2 → packaging_templates/dev_requirements.txt.jinja2} +0 -0
  62. package/autorest/codegen/templates/{setup.py.jinja2 → packaging_templates/setup.py.jinja2} +9 -9
  63. package/autorest/codegen/templates/paging_operation.py.jinja2 +1 -1
  64. package/autorest/codegen/templates/request_builder.py.jinja2 +1 -1
  65. package/autorest/codegen/templates/request_builders.py.jinja2 +3 -3
  66. package/autorest/codegen/templates/rest_init.py.jinja2 +1 -1
  67. package/autorest/codegen/templates/sample.py.jinja2 +44 -0
  68. package/autorest/codegen/templates/validation.py.jinja2 +1 -1
  69. package/autorest/codegen/templates/vendor.py.jinja2 +9 -7
  70. package/autorest/codegen/templates/version.py.jinja2 +2 -2
  71. package/autorest/m4reformatter/__init__.py +20 -7
  72. package/autorest/preprocess/__init__.py +38 -23
  73. package/package.json +1 -1
@@ -3,22 +3,81 @@
3
3
  # Licensed under the MIT License. See License.txt in the project root for
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
+ from typing import Any
6
7
  from jinja2 import Environment
7
8
  from .import_serializer import FileImportSerializer, TypingSection
8
9
  from ..models.imports import MsrestImportType
9
10
  from ..models import (
10
11
  FileImport,
11
12
  ImportType,
13
+ NamespaceModel,
12
14
  CodeModel,
15
+ TokenCredentialType,
13
16
  )
14
17
  from .client_serializer import ClientSerializer, ConfigSerializer
15
18
 
19
+ _PACKAGE_MODE_FILES = [
20
+ "CHANGELOG.md.jinja2",
21
+ "dev_requirements.txt.jinja2",
22
+ "LICENSE.jinja2",
23
+ "MANIFEST.in.jinja2",
24
+ "README.md.jinja2",
25
+ ]
26
+
16
27
 
17
28
  class GeneralSerializer:
29
+ """General serializer for SDK root level files"""
30
+
31
+ def __init__(self, code_model: CodeModel, env: Environment):
32
+ self.code_model = code_model
33
+ self.env = env
34
+
35
+ def serialize_setup_file(self) -> str:
36
+ template = self.env.get_template("packaging_templates/setup.py.jinja2")
37
+ params = {}
38
+ params.update(self.code_model.options)
39
+ return template.render(code_model=self.code_model, **params)
40
+
41
+ def serialize_package_file(self, template_name: str, **kwargs: Any) -> str:
42
+ template = self.env.get_template(template_name)
43
+ package_parts = (self.code_model.options["package_name"] or "").split("-")[:-1]
44
+ token_credential = any(
45
+ c
46
+ for nm in self.code_model.namespace_models
47
+ for c in nm.clients
48
+ if isinstance(getattr(c.credential, "type", None), TokenCredentialType)
49
+ )
50
+ version = self.code_model.options["package_version"]
51
+ if any(x in version for x in ["a", "b", "rc"]) or version[0] == "0":
52
+ dev_status = "4 - Beta"
53
+ else:
54
+ dev_status = "5 - Production/Stable"
55
+ params = {
56
+ "code_model": self.code_model,
57
+ "dev_status": dev_status,
58
+ "token_credential": token_credential,
59
+ "pkgutil_names": [
60
+ ".".join(package_parts[: i + 1]) for i in range(len(package_parts))
61
+ ],
62
+ "init_names": [
63
+ "/".join(package_parts[: i + 1]) + "/__init__.py"
64
+ for i in range(len(package_parts))
65
+ ],
66
+ "client_name": self.code_model.namespace_models[0].clients[0].name,
67
+ "namespace": self.code_model.namespace_models[0],
68
+ }
69
+ params.update(self.code_model.options)
70
+ params.update(kwargs)
71
+ return template.render(**params)
72
+
73
+
74
+ class GeneralNamespaceSerializer:
75
+ """General serializer for namespace level files"""
76
+
18
77
  def __init__(
19
- self, code_model: CodeModel, env: Environment, async_mode: bool
78
+ self, namespace_model: NamespaceModel, env: Environment, async_mode: bool
20
79
  ) -> None:
21
- self.code_model = code_model
80
+ self.namespace_model = namespace_model
22
81
  self.env = env
23
82
  self.async_mode = async_mode
24
83
 
@@ -28,19 +87,26 @@ class GeneralSerializer:
28
87
 
29
88
  def serialize_init_file(self) -> str:
30
89
  template = self.env.get_template("init.py.jinja2")
31
- return template.render(code_model=self.code_model, async_mode=self.async_mode)
90
+ clients = [c for c in self.namespace_model.clients if c.request_builders]
91
+ return template.render(
92
+ namespace_model=self.namespace_model,
93
+ clients=clients,
94
+ async_mode=self.async_mode,
95
+ )
32
96
 
33
97
  def serialize_service_client_file(self) -> str:
34
98
 
35
- template = self.env.get_template("client.py.jinja2")
99
+ template = self.env.get_template("client_container.py.jinja2")
100
+
101
+ imports = FileImport()
102
+ for client in self.namespace_model.clients:
103
+ imports.merge(client.imports(self.async_mode))
36
104
 
37
105
  return template.render(
38
- code_model=self.code_model,
106
+ namespace_model=self.namespace_model,
39
107
  async_mode=self.async_mode,
40
- serializer=ClientSerializer(self.code_model),
41
- imports=FileImportSerializer(
42
- self.code_model.client.imports(self.async_mode),
43
- ),
108
+ get_serializer=ClientSerializer,
109
+ imports=FileImportSerializer(imports),
44
110
  )
45
111
 
46
112
  def serialize_vendor_file(self) -> str:
@@ -48,14 +114,14 @@ class GeneralSerializer:
48
114
 
49
115
  # configure imports
50
116
  file_import = FileImport()
51
- if self.code_model.need_request_converter:
117
+ if self.namespace_model.need_request_converter:
52
118
  file_import.add_submodule_import(
53
119
  "azure.core.pipeline.transport",
54
120
  "HttpRequest",
55
121
  ImportType.AZURECORE,
56
122
  )
57
123
 
58
- if self.code_model.need_mixin_abc:
124
+ if self.namespace_model.need_mixin_abc:
59
125
  file_import.add_submodule_import(
60
126
  "abc",
61
127
  "ABC",
@@ -67,20 +133,21 @@ class GeneralSerializer:
67
133
  ImportType.AZURECORE,
68
134
  TypingSection.TYPING,
69
135
  )
70
- file_import.add_submodule_import(
71
- "._configuration",
72
- f"{self.code_model.client.name}Configuration",
73
- ImportType.LOCAL,
74
- )
75
136
  file_import.add_msrest_import(
76
- self.code_model,
137
+ self.namespace_model,
77
138
  ".." if self.async_mode else ".",
78
139
  MsrestImportType.SerializerDeserializer,
79
140
  TypingSection.TYPING,
80
141
  )
142
+ for client in self.namespace_model.clients:
143
+ file_import.add_submodule_import(
144
+ "._configuration",
145
+ f"{client.name}Configuration",
146
+ ImportType.LOCAL,
147
+ )
81
148
 
82
149
  return template.render(
83
- code_model=self.code_model,
150
+ namespace_model=self.namespace_model,
84
151
  imports=FileImportSerializer(
85
152
  file_import,
86
153
  ),
@@ -88,43 +155,29 @@ class GeneralSerializer:
88
155
  )
89
156
 
90
157
  def serialize_config_file(self) -> str:
91
-
92
- package_name = self.code_model.options["package_name"]
93
- if package_name and package_name.startswith("azure-"):
94
- package_name = package_name[len("azure-") :]
95
- sdk_moniker = (
96
- package_name if package_name else self.code_model.client.name.lower()
97
- )
98
- template = self.env.get_template("config.py.jinja2")
158
+ template = self.env.get_template("config_container.py.jinja2")
159
+ imports = FileImport()
160
+ for client in self.namespace_model.clients:
161
+ imports.merge(client.config.imports(self.async_mode))
99
162
  return template.render(
100
- code_model=self.code_model,
163
+ namespace_model=self.namespace_model,
101
164
  async_mode=self.async_mode,
102
- imports=FileImportSerializer(
103
- self.code_model.config.imports(self.async_mode),
104
- ),
105
- serializer=ConfigSerializer(self.code_model),
106
- sdk_moniker=sdk_moniker,
165
+ imports=FileImportSerializer(imports),
166
+ get_serializer=ConfigSerializer,
107
167
  )
108
168
 
109
169
  def serialize_version_file(self) -> str:
110
170
  template = self.env.get_template("version.py.jinja2")
111
- return template.render(code_model=self.code_model)
112
-
113
- def serialize_setup_file(self) -> str:
114
- template = self.env.get_template("setup.py.jinja2")
115
- params = {}
116
- params.update(self.code_model.options)
117
- params.update(self.code_model.package_dependency)
118
- return template.render(code_model=self.code_model, **params)
171
+ return template.render(namespace_model=self.namespace_model)
119
172
 
120
173
  def serialize_serialization_file(self) -> str:
121
174
  template = self.env.get_template("serialization.py.jinja2")
122
- return template.render(code_model=self.code_model)
175
+ return template.render(namespace_model=self.namespace_model)
123
176
 
124
177
  def serialize_model_base_file(self) -> str:
125
178
  template = self.env.get_template("model_base.py.jinja2")
126
- return template.render(code_model=self.code_model)
179
+ return template.render(namespace_model=self.namespace_model)
127
180
 
128
181
  def serialize_validation_file(self) -> str:
129
182
  template = self.env.get_template("validation.py.jinja2")
130
- return template.render(code_model=self.code_model)
183
+ return template.render(namespace_model=self.namespace_model)
@@ -8,12 +8,12 @@ import json
8
8
  from typing import List, Optional, Set, Tuple, Dict, Union
9
9
  from jinja2 import Environment
10
10
  from ..models import (
11
- CodeModel,
12
11
  OperationGroup,
13
12
  LROOperation,
14
13
  PagingOperation,
15
14
  TypingSection,
16
15
  ImportType,
16
+ NamespaceModel,
17
17
  )
18
18
  from .builder_serializer import get_operation_serializer
19
19
 
@@ -62,14 +62,17 @@ def _mixin_imports(
62
62
 
63
63
 
64
64
  class MetadataSerializer:
65
- def __init__(self, code_model: CodeModel, env: Environment) -> None:
66
- self.code_model = code_model
65
+ def __init__(self, namespace_model: NamespaceModel, env: Environment) -> None:
66
+ self.namespace_model = namespace_model
67
+ self.client = self.namespace_model.clients[
68
+ 0
69
+ ] # we only do one client for multiapi
67
70
  self.env = env
68
71
 
69
72
  def _choose_api_version(self) -> Tuple[str, List[str]]:
70
73
  chosen_version = ""
71
74
  total_api_version_set: Set[str] = set()
72
- for operation_group in self.code_model.operation_groups:
75
+ for operation_group in self.namespace_model.operation_groups:
73
76
  total_api_version_set.update(operation_group.api_versions)
74
77
 
75
78
  total_api_version_list = list(total_api_version_set)
@@ -82,7 +85,7 @@ class MetadataSerializer:
82
85
  if len(total_api_version_list) == 1:
83
86
  chosen_version = total_api_version_list[0]
84
87
  elif len(total_api_version_list) > 1:
85
- module_version = self.code_model.namespace.split(".")[-1]
88
+ module_version = self.namespace_model.namespace.split(".")[-1]
86
89
  for api_version in total_api_version_list:
87
90
  if "v{}".format(api_version.replace("-", "_")) == module_version:
88
91
  chosen_version = api_version
@@ -99,7 +102,7 @@ class MetadataSerializer:
99
102
  mixin_operation_group: Optional[OperationGroup] = next(
100
103
  (
101
104
  operation_group
102
- for operation_group in self.code_model.operation_groups
105
+ for operation_group in self.namespace_model.operation_groups
103
106
  if operation_group.is_mixin
104
107
  ),
105
108
  None,
@@ -112,14 +115,15 @@ class MetadataSerializer:
112
115
  chosen_version, total_api_version_list = self._choose_api_version()
113
116
 
114
117
  # setting to true, because for multiapi we always generate with a version file with version 0.1.0
115
- self.code_model.options["package_version"] = "0.1.0"
118
+ self.namespace_model.options["package_version"] = "0.1.0"
116
119
  template = self.env.get_template("metadata.json.jinja2")
117
120
 
118
121
  return template.render(
122
+ namespace_model=self.namespace_model,
119
123
  chosen_version=chosen_version,
120
124
  total_api_version_list=total_api_version_list,
121
- code_model=self.code_model,
122
- global_parameters=self.code_model.client.parameters,
125
+ client=self.client,
126
+ global_parameters=self.client.parameters,
123
127
  mixin_operations=mixin_operations,
124
128
  any=any,
125
129
  is_lro=_is_lro,
@@ -128,26 +132,26 @@ class MetadataSerializer:
128
132
  sync_mixin_imports=sync_mixin_imports,
129
133
  async_mixin_imports=async_mixin_imports,
130
134
  sync_client_imports=_json_serialize_imports(
131
- self.code_model.client.imports_for_multiapi(async_mode=False).to_dict()
135
+ self.client.imports_for_multiapi(async_mode=False).to_dict()
132
136
  ),
133
137
  async_client_imports=_json_serialize_imports(
134
- self.code_model.client.imports_for_multiapi(async_mode=True).to_dict()
138
+ self.client.imports_for_multiapi(async_mode=True).to_dict()
135
139
  ),
136
140
  sync_config_imports=_json_serialize_imports(
137
- self.code_model.config.imports(async_mode=False).to_dict()
141
+ self.client.config.imports(async_mode=False).to_dict()
138
142
  ),
139
143
  async_config_imports=_json_serialize_imports(
140
- self.code_model.config.imports(async_mode=True).to_dict()
144
+ self.client.config.imports(async_mode=True).to_dict()
141
145
  ),
142
146
  get_async_operation_serializer=functools.partial(
143
147
  get_operation_serializer,
144
- code_model=self.code_model,
148
+ namespace_model=self.client.namespace_model,
145
149
  async_mode=True,
146
150
  ),
147
151
  get_sync_operation_serializer=functools.partial(
148
152
  get_operation_serializer,
149
- code_model=self.code_model,
153
+ namespace_model=self.client.namespace_model,
150
154
  async_mode=False,
151
155
  ),
152
- has_credential=bool(self.code_model.credential),
156
+ has_credential=bool(self.client.credential),
153
157
  )
@@ -4,19 +4,21 @@
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
6
  from jinja2 import Environment
7
- from ..models import CodeModel
7
+ from ..models import NamespaceModel
8
8
 
9
9
 
10
10
  class ModelInitSerializer:
11
- def __init__(self, code_model: CodeModel, env: Environment) -> None:
12
- self.code_model = code_model
11
+ def __init__(self, namespace_model: NamespaceModel, env: Environment) -> None:
12
+ self.namespace_model = namespace_model
13
13
  self.env = env
14
14
 
15
15
  def serialize(self) -> str:
16
- schemas = [s.name for s in self.code_model.public_model_types]
16
+ schemas = [s.name for s in self.namespace_model.public_model_types]
17
17
  schemas.sort()
18
18
  enums = (
19
- [e.name for e in self.code_model.enums] if self.code_model.enums else None
19
+ [e.name for e in self.namespace_model.enums]
20
+ if self.namespace_model.enums
21
+ else None
20
22
  )
21
23
 
22
24
  if enums:
@@ -32,4 +34,6 @@ class ModelInitSerializer:
32
34
  )
33
35
 
34
36
  template = self.env.get_template("model_init.py.jinja2")
35
- return template.render(code_model=self.code_model, schemas=schemas, enums=enums)
37
+ return template.render(
38
+ namespace_model=self.namespace_model, schemas=schemas, enums=enums
39
+ )
@@ -6,7 +6,7 @@
6
6
  from typing import cast, List
7
7
  from abc import ABC, abstractmethod
8
8
  from jinja2 import Environment
9
- from ..models import ModelType, CodeModel, Property
9
+ from ..models import ModelType, NamespaceModel, Property
10
10
  from ..models.imports import FileImport, TypingSection, MsrestImportType, ImportType
11
11
  from .import_serializer import FileImportSerializer
12
12
 
@@ -28,8 +28,8 @@ def _documentation_string(
28
28
 
29
29
 
30
30
  class _ModelSerializer(ABC):
31
- def __init__(self, code_model: CodeModel, env: Environment) -> None:
32
- self.code_model = code_model
31
+ def __init__(self, namespace_model: NamespaceModel, env: Environment) -> None:
32
+ self.namespace_model = namespace_model
33
33
  self.env = env
34
34
 
35
35
  @abstractmethod
@@ -40,7 +40,7 @@ class _ModelSerializer(ABC):
40
40
  # Generate the models
41
41
  template = self.env.get_template("model_container.py.jinja2")
42
42
  return template.render(
43
- code_model=self.code_model,
43
+ namespace_model=self.namespace_model,
44
44
  imports=FileImportSerializer(self.imports()),
45
45
  str=str,
46
46
  serializer=self,
@@ -130,9 +130,9 @@ class MsrestModelSerializer(_ModelSerializer):
130
130
  def imports(self) -> FileImport:
131
131
  file_import = FileImport()
132
132
  file_import.add_msrest_import(
133
- self.code_model, "..", MsrestImportType.Module, TypingSection.REGULAR
133
+ self.namespace_model, "..", MsrestImportType.Module, TypingSection.REGULAR
134
134
  )
135
- for model in self.code_model.model_types:
135
+ for model in self.namespace_model.model_types:
136
136
  file_import.merge(model.imports(is_operation_file=False))
137
137
  init_line_parameters = [
138
138
  p for p in model.properties if not p.readonly and not p.is_discriminator
@@ -144,7 +144,7 @@ class MsrestModelSerializer(_ModelSerializer):
144
144
  def declare_model(self, model: ModelType) -> str:
145
145
  basename = (
146
146
  "msrest.serialization.Model"
147
- if self.code_model.options["client_side_validation"]
147
+ if self.namespace_model.options["client_side_validation"]
148
148
  else "_serialization.Model"
149
149
  )
150
150
  if model.parents:
@@ -207,7 +207,7 @@ class DpgModelSerializer(_ModelSerializer):
207
207
  file_import.add_submodule_import("typing", "Mapping", ImportType.STDLIB)
208
208
  file_import.add_submodule_import("typing", "Any", ImportType.STDLIB)
209
209
 
210
- for model in self.code_model.model_types:
210
+ for model in self.namespace_model.model_types:
211
211
  file_import.merge(model.imports(is_operation_file=False))
212
212
  for param in model.properties:
213
213
  file_import.merge(param.imports())
@@ -3,14 +3,16 @@
3
3
  # Licensed under the MIT License. See License.txt in the project root for
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
- from typing import Optional
6
+ from typing import Optional, List, Union
7
7
  import functools
8
8
  from jinja2 import Environment
9
9
 
10
10
  from ..models import (
11
- CodeModel,
11
+ NamespaceModel,
12
12
  OperationGroup,
13
13
  FileImport,
14
+ RequestBuilder,
15
+ OverloadedRequestBuilder,
14
16
  )
15
17
  from .import_serializer import FileImportSerializer
16
18
  from .builder_serializer import get_operation_serializer, RequestBuilderSerializer
@@ -19,21 +21,33 @@ from .builder_serializer import get_operation_serializer, RequestBuilderSerializ
19
21
  class OperationGroupsSerializer:
20
22
  def __init__(
21
23
  self,
22
- code_model: CodeModel,
24
+ namespace_model: NamespaceModel,
23
25
  env: Environment,
24
26
  async_mode: bool,
25
27
  operation_group: Optional[OperationGroup] = None,
26
- ) -> None:
27
- self.code_model = code_model
28
+ ):
29
+ self.namespace_model = namespace_model
28
30
  self.env = env
29
31
  self.async_mode = async_mode
30
32
  self.operation_group = operation_group
31
33
 
34
+ def _get_request_builders(
35
+ self, operation_group: OperationGroup
36
+ ) -> List[Union[OverloadedRequestBuilder, RequestBuilder]]:
37
+ return [
38
+ r
39
+ for r in self.namespace_model.request_builders
40
+ if r.client.name == operation_group.client.name
41
+ and r.group_name == operation_group.property_name
42
+ and not r.is_overload
43
+ and not r.abstract
44
+ ]
45
+
32
46
  def serialize(self) -> str:
33
47
  operation_groups = (
34
48
  [self.operation_group]
35
49
  if self.operation_group
36
- else self.code_model.operation_groups
50
+ else self.namespace_model.operation_groups
37
51
  )
38
52
  imports = FileImport()
39
53
  for operation_group in operation_groups:
@@ -47,7 +61,7 @@ class OperationGroupsSerializer:
47
61
  "operation_groups_container.py.jinja2"
48
62
  )
49
63
  return template.render(
50
- code_model=self.code_model,
64
+ namespace_model=self.namespace_model,
51
65
  operation_groups=operation_groups,
52
66
  imports=FileImportSerializer(
53
67
  imports,
@@ -56,14 +70,12 @@ class OperationGroupsSerializer:
56
70
  async_mode=self.async_mode,
57
71
  get_operation_serializer=functools.partial(
58
72
  get_operation_serializer,
59
- code_model=self.code_model,
73
+ namespace_model=self.namespace_model,
60
74
  async_mode=self.async_mode,
61
75
  ),
62
76
  request_builder_serializer=RequestBuilderSerializer(
63
- self.code_model,
77
+ self.namespace_model,
64
78
  async_mode=False,
65
79
  ),
66
- request_builders=[
67
- rb for rb in self.code_model.request_builders if not rb.abstract
68
- ],
80
+ get_request_builders=self._get_request_builders,
69
81
  )
@@ -7,14 +7,14 @@ from typing import List
7
7
  from jinja2 import Environment
8
8
 
9
9
  from autorest.codegen.models.operation_group import OperationGroup
10
- from ..models import CodeModel
10
+ from ..models import NamespaceModel
11
11
 
12
12
 
13
13
  class OperationsInitSerializer:
14
14
  def __init__(
15
- self, code_model: CodeModel, env: Environment, async_mode: bool
15
+ self, namespace_model: NamespaceModel, env: Environment, async_mode: bool
16
16
  ) -> None:
17
- self.code_model = code_model
17
+ self.namespace_model = namespace_model
18
18
  self.env = env
19
19
  self.async_mode = async_mode
20
20
 
@@ -22,13 +22,13 @@ class OperationsInitSerializer:
22
22
  def _get_filename(operation_group: OperationGroup) -> str:
23
23
  return (
24
24
  "_operations"
25
- if self.code_model.options["combine_operation_files"]
25
+ if self.namespace_model.options["combine_operation_files"]
26
26
  else operation_group.filename
27
27
  )
28
28
 
29
29
  return [
30
30
  f"from .{_get_filename(og)} import {og.class_name}"
31
- for og in self.code_model.operation_groups
31
+ for og in self.namespace_model.operation_groups
32
32
  ]
33
33
 
34
34
  def serialize(self) -> str:
@@ -37,8 +37,7 @@ class OperationsInitSerializer:
37
37
  )
38
38
 
39
39
  return operation_group_init_template.render(
40
- code_model=self.code_model,
41
- operation_groups=self.code_model.operation_groups,
40
+ namespace_model=self.namespace_model,
42
41
  async_mode=self.async_mode,
43
42
  operation_group_imports=self.operation_group_imports,
44
43
  )
@@ -5,13 +5,13 @@
5
5
  # --------------------------------------------------------------------------
6
6
  from jinja2 import Environment
7
7
  from .import_serializer import FileImportSerializer
8
- from ..models import CodeModel, FileImport, ImportType, TypingSection
8
+ from ..models import NamespaceModel, FileImport, ImportType, TypingSection
9
9
 
10
10
 
11
11
  class PatchSerializer:
12
- def __init__(self, env: Environment, code_model: CodeModel) -> None:
12
+ def __init__(self, env: Environment, namespace_model: NamespaceModel) -> None:
13
13
  self.env = env
14
- self.code_model = code_model
14
+ self.namespace_model = namespace_model
15
15
 
16
16
  def serialize(self) -> str:
17
17
  template = self.env.get_template("patch.py.jinja2")
@@ -20,6 +20,6 @@ class PatchSerializer:
20
20
  "typing", "List", ImportType.STDLIB, TypingSection.CONDITIONAL
21
21
  )
22
22
  return template.render(
23
- code_model=self.code_model,
23
+ namespace_model=self.namespace_model,
24
24
  imports=FileImportSerializer(imports),
25
25
  )
@@ -8,18 +8,18 @@ from jinja2 import Environment
8
8
 
9
9
  from ..models import FileImport
10
10
  from .import_serializer import FileImportSerializer
11
- from ..models import CodeModel, RequestBuilderType
11
+ from ..models import NamespaceModel, RequestBuilderType
12
12
  from .builder_serializer import RequestBuilderSerializer
13
13
 
14
14
 
15
15
  class RequestBuildersSerializer:
16
16
  def __init__(
17
17
  self,
18
- code_model: CodeModel,
18
+ namespace_model: NamespaceModel,
19
19
  env: Environment,
20
20
  request_builders: List[RequestBuilderType],
21
21
  ) -> None:
22
- self.code_model = code_model
22
+ self.namespace_model = namespace_model
23
23
  self.env = env
24
24
  self.request_builders = request_builders
25
25
  self.group_name = request_builders[0].group_name
@@ -35,7 +35,7 @@ class RequestBuildersSerializer:
35
35
  def serialize_init(self) -> str:
36
36
  template = self.env.get_template("rest_init.py.jinja2")
37
37
  return template.render(
38
- code_model=self.code_model,
38
+ namespace_model=self.namespace_model,
39
39
  request_builders=[r for r in self.request_builders if not r.is_overload],
40
40
  )
41
41
 
@@ -43,12 +43,12 @@ class RequestBuildersSerializer:
43
43
  template = self.env.get_template("request_builders.py.jinja2")
44
44
 
45
45
  return template.render(
46
- code_model=self.code_model,
46
+ namespace_model=self.namespace_model,
47
47
  request_builders=[rb for rb in self.request_builders if not rb.abstract],
48
48
  imports=FileImportSerializer(
49
49
  self.imports,
50
50
  ),
51
51
  request_builder_serializer=RequestBuilderSerializer(
52
- self.code_model, async_mode=False
52
+ self.namespace_model, async_mode=False
53
53
  ),
54
54
  )