@autorest/python 6.2.0 → 6.2.1

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/codegen/__init__.py +9 -74
  2. package/autorest/codegen/models/__init__.py +11 -12
  3. package/autorest/codegen/models/{base_type.py → base.py} +29 -10
  4. package/autorest/codegen/models/base_builder.py +8 -10
  5. package/autorest/codegen/models/client.py +111 -40
  6. package/autorest/codegen/models/code_model.py +131 -90
  7. package/autorest/codegen/models/combined_type.py +7 -7
  8. package/autorest/codegen/models/constant_type.py +44 -10
  9. package/autorest/codegen/models/credential_types.py +17 -19
  10. package/autorest/codegen/models/dictionary_type.py +7 -9
  11. package/autorest/codegen/models/enum_type.py +19 -24
  12. package/autorest/codegen/models/imports.py +82 -33
  13. package/autorest/codegen/models/list_type.py +11 -15
  14. package/autorest/codegen/models/lro_operation.py +6 -10
  15. package/autorest/codegen/models/model_type.py +20 -21
  16. package/autorest/codegen/models/operation.py +49 -42
  17. package/autorest/codegen/models/operation_group.py +11 -11
  18. package/autorest/codegen/models/paging_operation.py +8 -10
  19. package/autorest/codegen/models/parameter.py +44 -31
  20. package/autorest/codegen/models/parameter_list.py +16 -22
  21. package/autorest/codegen/models/primitive_types.py +12 -23
  22. package/autorest/codegen/models/property.py +11 -11
  23. package/autorest/codegen/models/request_builder.py +19 -19
  24. package/autorest/codegen/models/request_builder_parameter.py +14 -16
  25. package/autorest/codegen/models/response.py +24 -28
  26. package/autorest/codegen/serializers/__init__.py +202 -187
  27. package/autorest/codegen/serializers/builder_serializer.py +46 -49
  28. package/autorest/codegen/serializers/client_serializer.py +9 -7
  29. package/autorest/codegen/serializers/enum_serializer.py +4 -4
  30. package/autorest/codegen/serializers/general_serializer.py +26 -36
  31. package/autorest/codegen/serializers/import_serializer.py +30 -36
  32. package/autorest/codegen/serializers/metadata_serializer.py +35 -17
  33. package/autorest/codegen/serializers/model_init_serializer.py +6 -10
  34. package/autorest/codegen/serializers/model_serializer.py +42 -27
  35. package/autorest/codegen/serializers/operation_groups_serializer.py +12 -8
  36. package/autorest/codegen/serializers/operations_init_serializer.py +13 -6
  37. package/autorest/codegen/serializers/patch_serializer.py +4 -4
  38. package/autorest/codegen/serializers/request_builders_serializer.py +6 -6
  39. package/autorest/codegen/serializers/sample_serializer.py +10 -12
  40. package/autorest/codegen/templates/client_container.py.jinja2 +2 -2
  41. package/autorest/codegen/templates/config.py.jinja2 +1 -1
  42. package/autorest/codegen/templates/config_container.py.jinja2 +3 -3
  43. package/autorest/codegen/templates/enum_container.py.jinja2 +2 -2
  44. package/autorest/codegen/templates/init.py.jinja2 +2 -2
  45. package/autorest/codegen/templates/lro_operation.py.jinja2 +1 -1
  46. package/autorest/codegen/templates/lro_paging_operation.py.jinja2 +1 -1
  47. package/autorest/codegen/templates/metadata.json.jinja2 +2 -2
  48. package/autorest/codegen/templates/model_container.py.jinja2 +3 -3
  49. package/autorest/codegen/templates/model_dpg.py.jinja2 +4 -4
  50. package/autorest/codegen/templates/model_init.py.jinja2 +3 -3
  51. package/autorest/codegen/templates/operation.py.jinja2 +1 -1
  52. package/autorest/codegen/templates/operation_group.py.jinja2 +2 -2
  53. package/autorest/codegen/templates/operation_groups_container.py.jinja2 +3 -3
  54. package/autorest/codegen/templates/operation_tools.jinja2 +3 -3
  55. package/autorest/codegen/templates/operations_folder_init.py.jinja2 +4 -4
  56. package/autorest/codegen/templates/packaging_templates/setup.py.jinja2 +4 -1
  57. package/autorest/codegen/templates/paging_operation.py.jinja2 +1 -1
  58. package/autorest/codegen/templates/request_builder.py.jinja2 +1 -1
  59. package/autorest/codegen/templates/request_builders.py.jinja2 +2 -2
  60. package/autorest/codegen/templates/rest_init.py.jinja2 +1 -1
  61. package/autorest/codegen/templates/sample.py.jinja2 +5 -5
  62. package/autorest/codegen/templates/validation.py.jinja2 +1 -1
  63. package/autorest/codegen/templates/vendor.py.jinja2 +6 -6
  64. package/autorest/codegen/templates/version.py.jinja2 +2 -2
  65. package/autorest/m4reformatter/__init__.py +7 -6
  66. package/autorest/multiapi/models/imports.py +89 -18
  67. package/autorest/multiapi/serializers/import_serializer.py +88 -7
  68. package/autorest/multiapi/utils.py +6 -0
  69. package/autorest/preprocess/__init__.py +23 -26
  70. package/package.json +1 -1
  71. package/run_cadl.py +0 -1
  72. package/autorest/cadlflags/__init__.py +0 -130
  73. package/autorest/codegen/models/base_model.py +0 -30
@@ -12,8 +12,8 @@ from typing import Any, Generic, List, Type, TypeVar, Dict, Union, Optional, cas
12
12
 
13
13
  from ..models import (
14
14
  Operation,
15
- NamespaceModel,
16
15
  PagingOperation,
16
+ CodeModel,
17
17
  LROOperation,
18
18
  LROPagingOperation,
19
19
  ModelType,
@@ -190,8 +190,8 @@ def _api_version_validation(builder: OperationType) -> str:
190
190
 
191
191
 
192
192
  class _BuilderBaseSerializer(Generic[BuilderType]): # pylint: disable=abstract-method
193
- def __init__(self, namespace_model: NamespaceModel, async_mode: bool) -> None:
194
- self.namespace_model = namespace_model
193
+ def __init__(self, code_model: CodeModel, async_mode: bool) -> None:
194
+ self.code_model = code_model
195
195
  self.async_mode = async_mode
196
196
  self.parameter_serializer = ParameterSerializer()
197
197
 
@@ -227,7 +227,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]): # pylint: disable=abstract-
227
227
  retval: List[str] = []
228
228
  if builder.is_overload:
229
229
  return ["@overload"]
230
- if self.namespace_model.options["tracing"] and builder.want_tracing:
230
+ if self.code_model.options["tracing"] and builder.want_tracing:
231
231
  retval.append(f"@distributed_trace{'_async' if self.async_mode else ''}")
232
232
  return retval
233
233
 
@@ -315,7 +315,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]): # pylint: disable=abstract-
315
315
 
316
316
  def _json_input_example_template(self, builder: BuilderType) -> List[str]:
317
317
  template: List[str] = []
318
- if self.namespace_model.options["models_mode"]:
318
+ if self.code_model.options["models_mode"]:
319
319
  # No input template if we have models
320
320
  return template
321
321
  if (
@@ -345,7 +345,7 @@ class _BuilderBaseSerializer(Generic[BuilderType]): # pylint: disable=abstract-
345
345
  )
346
346
  for idx in range(
347
347
  min(
348
- self.namespace_model.options["polymorphic_examples"],
348
+ self.code_model.options["polymorphic_examples"],
349
349
  len(polymorphic_subtypes),
350
350
  )
351
351
  ):
@@ -513,7 +513,7 @@ class RequestBuilderSerializer(
513
513
  if any(
514
514
  o
515
515
  for o in ["low_level_client", "version_tolerant"]
516
- if self.namespace_model.options.get(o)
516
+ if self.code_model.options.get(o)
517
517
  ):
518
518
  url_value = _escape_str(builder.url)
519
519
  else:
@@ -541,7 +541,7 @@ class _OperationSerializer(
541
541
 
542
542
  def example_template(self, builder: OperationType) -> List[str]:
543
543
  retval = super().example_template(builder)
544
- if self.namespace_model.options["models_mode"]:
544
+ if self.code_model.options["models_mode"]:
545
545
  return retval
546
546
  for response in builder.responses:
547
547
  polymorphic_subtypes: List[ModelType] = []
@@ -559,7 +559,7 @@ class _OperationSerializer(
559
559
  )
560
560
  for idx in range(
561
561
  min(
562
- self.namespace_model.options["polymorphic_examples"],
562
+ self.code_model.options["polymorphic_examples"],
563
563
  len(polymorphic_subtypes),
564
564
  )
565
565
  ):
@@ -615,7 +615,7 @@ class _OperationSerializer(
615
615
  self, builder: OperationType
616
616
  ) -> List[str]: # pylint: disable=no-self-use
617
617
  description_list = super().param_description(builder)
618
- if not self.namespace_model.options["version_tolerant"]:
618
+ if not self.code_model.options["version_tolerant"]:
619
619
  description_list.append(
620
620
  ":keyword callable cls: A custom type or function that will be passed the direct response"
621
621
  )
@@ -636,7 +636,7 @@ class _OperationSerializer(
636
636
  kwargs_to_pop, ParameterLocation.QUERY
637
637
  )
638
638
  else PopKwargType.SIMPLE,
639
- check_client_input=not self.namespace_model.options["multiapi"],
639
+ check_client_input=not self.code_model.options["multiapi"],
640
640
  )
641
641
  kwargs.append(
642
642
  f"cls = kwargs.pop('cls', None) {self.cls_type_annotation(builder)}"
@@ -672,9 +672,9 @@ class _OperationSerializer(
672
672
  body_param.type.xml_serialization_ctxt if send_xml else None
673
673
  )
674
674
  ser_ctxt_name = "serialization_ctxt"
675
- if xml_serialization_ctxt and self.namespace_model.options["models_mode"]:
675
+ if xml_serialization_ctxt and self.code_model.options["models_mode"]:
676
676
  retval.append(f'{ser_ctxt_name} = {{"xml": {{{xml_serialization_ctxt}}}}}')
677
- if self.namespace_model.options["models_mode"] == "msrest":
677
+ if self.code_model.options["models_mode"] == "msrest":
678
678
  is_xml_cmd = ", is_xml=True" if send_xml else ""
679
679
  serialization_ctxt_cmd = (
680
680
  f", {ser_ctxt_name}={ser_ctxt_name}" if xml_serialization_ctxt else ""
@@ -683,7 +683,7 @@ class _OperationSerializer(
683
683
  f"_{body_kwarg_name} = self._serialize.body({body_param.client_name}, "
684
684
  f"'{body_param.type.serialization_type}'{is_xml_cmd}{serialization_ctxt_cmd})"
685
685
  )
686
- elif self.namespace_model.options["models_mode"] == "dpg":
686
+ elif self.code_model.options["models_mode"] == "dpg":
687
687
  create_body_call = f"_{body_kwarg_name} = json.dumps({body_param.client_name}, cls=AzureJSONEncoder)"
688
688
  else:
689
689
  create_body_call = f"_{body_kwarg_name} = {body_param.client_name}"
@@ -825,7 +825,7 @@ class _OperationSerializer(
825
825
  is_next_request: bool = False,
826
826
  ) -> List[str]:
827
827
  retval: List[str] = []
828
- if self.namespace_model.options["builders_visibility"] == "embedded":
828
+ if self.code_model.options["builders_visibility"] == "embedded":
829
829
  request_path_name = request_builder.name
830
830
  else:
831
831
  group_name = request_builder.group_name
@@ -871,7 +871,7 @@ class _OperationSerializer(
871
871
  retval.append(
872
872
  f" {body_param.client_name}={body_param.name_in_high_level_operation},"
873
873
  )
874
- if not self.namespace_model.options["version_tolerant"]:
874
+ if not self.code_model.options["version_tolerant"]:
875
875
  template_url = template_url or f"self.{builder.name}.metadata['url']"
876
876
  retval.append(f" template_url={template_url},")
877
877
  retval.append(" headers=_headers,")
@@ -883,7 +883,7 @@ class _OperationSerializer(
883
883
  self, builder: OperationType, template_url: Optional[str] = None
884
884
  ) -> List[str]:
885
885
  retval: List[str] = []
886
- if not self.namespace_model.options["version_tolerant"]:
886
+ if not self.code_model.options["version_tolerant"]:
887
887
  pass_files = ""
888
888
  if (
889
889
  builder.parameters.has_body
@@ -894,7 +894,7 @@ class _OperationSerializer(
894
894
  if builder.parameters.path:
895
895
  retval.extend(self.serialize_path(builder))
896
896
  url_to_format = "request.url"
897
- if self.namespace_model.options["version_tolerant"] and template_url:
897
+ if self.code_model.options["version_tolerant"] and template_url:
898
898
  url_to_format = template_url
899
899
  retval.append(
900
900
  "request.url = self._client.format_url({}{}) # type: ignore".format(
@@ -958,16 +958,16 @@ class _OperationSerializer(
958
958
  retval.append(
959
959
  "deserialized = {}".format(
960
960
  "response.iter_bytes()"
961
- if self.namespace_model.options["version_tolerant"]
961
+ if self.code_model.options["version_tolerant"]
962
962
  else "response.stream_download(self._client._pipeline)"
963
963
  )
964
964
  )
965
965
  elif response.type:
966
- if self.namespace_model.options["models_mode"] == "msrest":
966
+ if self.code_model.options["models_mode"] == "msrest":
967
967
  retval.append(
968
968
  f"deserialized = self._deserialize('{response.serialization_type}', pipeline_response)"
969
969
  )
970
- elif self.namespace_model.options["models_mode"] == "dpg" and isinstance(
970
+ elif self.code_model.options["models_mode"] == "dpg" and isinstance(
971
971
  response.type, ModelType
972
972
  ):
973
973
  retval.append(
@@ -995,9 +995,9 @@ class _OperationSerializer(
995
995
  error_model = ""
996
996
  if (
997
997
  builder.default_error_deserialization
998
- and self.namespace_model.options["models_mode"]
998
+ and self.code_model.options["models_mode"]
999
999
  ):
1000
- if self.namespace_model.options["models_mode"] == "dpg":
1000
+ if self.code_model.options["models_mode"] == "dpg":
1001
1001
  retval.append(
1002
1002
  f" error = _deserialize({builder.default_error_deserialization}, response.json())"
1003
1003
  )
@@ -1011,7 +1011,7 @@ class _OperationSerializer(
1011
1011
  " raise HttpResponseError(response=response{}{})".format(
1012
1012
  error_model,
1013
1013
  ", error_format=ARMErrorFormat"
1014
- if self.namespace_model.options["azure_arm"]
1014
+ if self.code_model.options["azure_arm"]
1015
1015
  else "",
1016
1016
  )
1017
1017
  )
@@ -1046,10 +1046,7 @@ class _OperationSerializer(
1046
1046
  self.response_headers_and_deserialization(builder.responses[0])
1047
1047
  )
1048
1048
  retval.append("")
1049
- if (
1050
- builder.has_optional_return_type
1051
- or self.namespace_model.options["models_mode"]
1052
- ):
1049
+ if builder.has_optional_return_type or self.code_model.options["models_mode"]:
1053
1050
  deserialized = "deserialized"
1054
1051
  else:
1055
1052
  deserialized = f"cast({builder.response_type_annotation(async_mode=self.async_mode)}, deserialized)"
@@ -1065,7 +1062,7 @@ class _OperationSerializer(
1065
1062
  retval.append(f"return {deserialized}")
1066
1063
  if (
1067
1064
  builder.request_builder.method == "HEAD"
1068
- and self.namespace_model.options["head_as_boolean"]
1065
+ and self.code_model.options["head_as_boolean"]
1069
1066
  ):
1070
1067
  retval.append("return 200 <= response.status_code <= 299")
1071
1068
  return retval
@@ -1084,16 +1081,16 @@ class _OperationSerializer(
1084
1081
  for excep in builder.non_default_errors:
1085
1082
  error_model_str = ""
1086
1083
  if isinstance(excep.type, ModelType):
1087
- if self.namespace_model.options["models_mode"] == "msrest":
1084
+ if self.code_model.options["models_mode"] == "msrest":
1088
1085
  error_model_str = (
1089
1086
  f", model=self._deserialize("
1090
1087
  f"_models.{excep.type.serialization_type}, response)"
1091
1088
  )
1092
- elif self.namespace_model.options["models_mode"] == "dpg":
1089
+ elif self.code_model.options["models_mode"] == "dpg":
1093
1090
  error_model_str = f", model=_deserialize(_models.{excep.type.name}, response.json())"
1094
1091
  error_format_str = (
1095
1092
  ", error_format=ARMErrorFormat"
1096
- if self.namespace_model.options["azure_arm"]
1093
+ if self.code_model.options["azure_arm"]
1097
1094
  else ""
1098
1095
  )
1099
1096
  for status_code in excep.status_codes:
@@ -1157,11 +1154,11 @@ PagingOperationType = TypeVar(
1157
1154
  class _PagingOperationSerializer(
1158
1155
  _OperationSerializer[PagingOperationType]
1159
1156
  ): # pylint: disable=abstract-method
1160
- def __init__(self, namespace_model: NamespaceModel, async_mode: bool) -> None:
1157
+ def __init__(self, code_model: CodeModel, async_mode: bool) -> None:
1161
1158
  # for pylint reasons need to redefine init
1162
1159
  # probably because inheritance is going too deep
1163
- super().__init__(namespace_model, async_mode)
1164
- self.namespace_model = namespace_model
1160
+ super().__init__(code_model, async_mode)
1161
+ self.code_model = code_model
1165
1162
  self.async_mode = async_mode
1166
1163
  self.parameter_serializer = ParameterSerializer()
1167
1164
 
@@ -1175,7 +1172,7 @@ class _PagingOperationSerializer(
1175
1172
  retval: List[str] = []
1176
1173
  if builder.is_overload:
1177
1174
  return ["@overload"]
1178
- if self.namespace_model.options["tracing"] and builder.want_tracing:
1175
+ if self.code_model.options["tracing"] and builder.want_tracing:
1179
1176
  retval.append("@distributed_trace")
1180
1177
  if _api_version_validation(builder):
1181
1178
  retval.append(_api_version_validation(builder))
@@ -1186,7 +1183,7 @@ class _PagingOperationSerializer(
1186
1183
  request_builder = builder.next_request_builder
1187
1184
  template_url = (
1188
1185
  None
1189
- if self.namespace_model.options["version_tolerant"]
1186
+ if self.code_model.options["version_tolerant"]
1190
1187
  else f"'{request_builder.url}'"
1191
1188
  )
1192
1189
  else:
@@ -1246,7 +1243,7 @@ class _PagingOperationSerializer(
1246
1243
  retval.extend(
1247
1244
  [f" {line}" for line in self.call_next_link_request_builder(builder)]
1248
1245
  )
1249
- if not builder.next_request_builder and self.namespace_model.is_legacy:
1246
+ if not builder.next_request_builder and self.code_model.is_legacy:
1250
1247
  retval.append(' request.method = "GET"')
1251
1248
  else:
1252
1249
  retval.append("")
@@ -1263,14 +1260,14 @@ class _PagingOperationSerializer(
1263
1260
  ]
1264
1261
  response = builder.responses[0]
1265
1262
  deserialized = "pipeline_response.http_response.json()"
1266
- if self.namespace_model.options["models_mode"] == "msrest":
1263
+ if self.code_model.options["models_mode"] == "msrest":
1267
1264
  deserialize_type = response.serialization_type
1268
1265
  pylint_disable = " # pylint: disable=protected-access"
1269
1266
  if isinstance(response.type, ModelType) and response.type.is_public:
1270
1267
  deserialize_type = f'"{response.serialization_type}"'
1271
1268
  pylint_disable = ""
1272
1269
  deserialized = f"self._deserialize(\n {deserialize_type}, pipeline_response{pylint_disable}\n)"
1273
- elif self.namespace_model.options["models_mode"] == "dpg":
1270
+ elif self.code_model.options["models_mode"] == "dpg":
1274
1271
  deserialized = (
1275
1272
  f"_deserialize({response.serialization_type}, pipeline_response)"
1276
1273
  )
@@ -1278,7 +1275,7 @@ class _PagingOperationSerializer(
1278
1275
  item_name = builder.item_name
1279
1276
  list_of_elem = (
1280
1277
  f".{item_name}"
1281
- if self.namespace_model.options["models_mode"]
1278
+ if self.code_model.options["models_mode"]
1282
1279
  else f'["{item_name}"]'
1283
1280
  )
1284
1281
  retval.append(f" list_of_elem = deserialized{list_of_elem}")
@@ -1288,7 +1285,7 @@ class _PagingOperationSerializer(
1288
1285
  continuation_token_name = builder.continuation_token_name
1289
1286
  if not continuation_token_name:
1290
1287
  cont_token_property = "None"
1291
- elif self.namespace_model.options["models_mode"]:
1288
+ elif self.code_model.options["models_mode"]:
1292
1289
  cont_token_property = f"deserialized.{continuation_token_name} or None"
1293
1290
  else:
1294
1291
  cont_token_property = f'deserialized.get("{continuation_token_name}", None)'
@@ -1331,11 +1328,11 @@ LROOperationType = TypeVar(
1331
1328
 
1332
1329
 
1333
1330
  class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
1334
- def __init__(self, namespace_model: NamespaceModel, async_mode: bool) -> None:
1331
+ def __init__(self, code_model: CodeModel, async_mode: bool) -> None:
1335
1332
  # for pylint reasons need to redefine init
1336
1333
  # probably because inheritance is going too deep
1337
- super().__init__(namespace_model, async_mode)
1338
- self.namespace_model = namespace_model
1334
+ super().__init__(code_model, async_mode)
1335
+ self.code_model = code_model
1339
1336
  self.async_mode = async_mode
1340
1337
  self.parameter_serializer = ParameterSerializer()
1341
1338
 
@@ -1448,8 +1445,8 @@ class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
1448
1445
  if builder.lro_response.headers:
1449
1446
  retval.append(" response_headers = {}")
1450
1447
  if (
1451
- not self.namespace_model.options["models_mode"]
1452
- or self.namespace_model.options["models_mode"] == "dpg"
1448
+ not self.code_model.options["models_mode"]
1449
+ or self.code_model.options["models_mode"] == "dpg"
1453
1450
  or builder.lro_response.headers
1454
1451
  ):
1455
1452
  retval.append(" response = pipeline_response.http_response")
@@ -1515,7 +1512,7 @@ class LROPagingOperationSerializer(
1515
1512
 
1516
1513
  def get_operation_serializer(
1517
1514
  builder: Operation,
1518
- namespace_model,
1515
+ code_model,
1519
1516
  async_mode: bool,
1520
1517
  ) -> Union[
1521
1518
  OperationSerializer,
@@ -1535,4 +1532,4 @@ def get_operation_serializer(
1535
1532
  retcls = LROOperationSerializer
1536
1533
  elif builder.operation_type == "paging":
1537
1534
  retcls = PagingOperationSerializer
1538
- return retcls(namespace_model, async_mode)
1535
+ return retcls(code_model, async_mode)
@@ -61,7 +61,9 @@ class ClientSerializer:
61
61
  operations_folder = ".aio.operations." if async_mode else ".operations."
62
62
  for og in [og for og in self.client.operation_groups if not og.is_mixin]:
63
63
  retval.append(f":ivar {og.property_name}: {og.class_name} operations")
64
- property_type = f"{self.client.namespace_model.namespace}{operations_folder}{og.class_name}"
64
+ property_type = (
65
+ f"{self.client.code_model.namespace}{operations_folder}{og.class_name}"
66
+ )
65
67
  retval.append(f":vartype {og.property_name}: {property_type}")
66
68
  for param in self.client.parameters.method:
67
69
  retval.append(
@@ -114,19 +116,19 @@ class ClientSerializer:
114
116
 
115
117
  def serializers_and_operation_groups_properties(self) -> List[str]:
116
118
  retval = []
117
- if self.client.namespace_model.model_types:
119
+ if self.client.code_model.model_types:
118
120
  client_models_value = (
119
121
  "{k: v for k, v in models.__dict__.items() if isinstance(v, type)}"
120
122
  )
121
123
  else:
122
124
  client_models_value = "{} # type: Dict[str, Any]"
123
- is_msrest_model = self.client.namespace_model.options["models_mode"] == "msrest"
125
+ is_msrest_model = self.client.code_model.options["models_mode"] == "msrest"
124
126
  if is_msrest_model:
125
127
  retval.append(f"client_models = {client_models_value}")
126
128
  client_models_str = "client_models" if is_msrest_model else ""
127
129
  retval.append(f"self._serialize = Serializer({client_models_str})")
128
130
  retval.append(f"self._deserialize = Deserializer({client_models_str})")
129
- if not self.client.namespace_model.options["client_side_validation"]:
131
+ if not self.client.code_model.options["client_side_validation"]:
130
132
  retval.append("self._serialize.client_side_validation = False")
131
133
  operation_groups = [
132
134
  og for og in self.client.operation_groups if not og.is_mixin
@@ -174,7 +176,7 @@ class ClientSerializer:
174
176
  def _request_builder_example(self, async_mode: bool) -> List[str]:
175
177
  retval = [
176
178
  "We have helper methods to create requests specific to this service in "
177
- + f"`{self.client.namespace_model.namespace}.{self.client.namespace_model.rest_layer_name}`."
179
+ + f"`{self.client.code_model.namespace}.{self.client.code_model.rest_layer_name}`."
178
180
  ]
179
181
  retval.append(
180
182
  "Use these helper methods to create the request you pass to this method."
@@ -191,7 +193,7 @@ class ClientSerializer:
191
193
  else:
192
194
  rest_imported = request_builder.name
193
195
  request_builder_name = request_builder.name
194
- full_path = f"{self.client.namespace_model.namespace}.{self.client.namespace_model.rest_layer_name}"
196
+ full_path = f"{self.client.code_model.namespace}.{self.client.code_model.rest_layer_name}"
195
197
  retval.append(f">>> from {full_path} import {rest_imported}")
196
198
  retval.append(
197
199
  f">>> request = {request_builder_name}({request_builder_signature})"
@@ -212,7 +214,7 @@ class ClientSerializer:
212
214
  def send_request_description(self, async_mode: bool) -> List[str]:
213
215
  retval = ['"""Runs the network request through the client\'s chained policies.']
214
216
  retval.append("")
215
- if self.client.namespace_model.options["builders_visibility"] != "embedded":
217
+ if self.client.code_model.options["builders_visibility"] != "embedded":
216
218
  retval.extend(self._request_builder_example(async_mode))
217
219
  else:
218
220
  retval.extend(self._rest_request_example(async_mode))
@@ -5,15 +5,15 @@
5
5
  # --------------------------------------------------------------------------
6
6
 
7
7
  from jinja2 import Environment
8
- from ..models import NamespaceModel
8
+ from ..models import CodeModel
9
9
 
10
10
 
11
11
  class EnumSerializer:
12
- def __init__(self, namespace_model: NamespaceModel, env: Environment) -> None:
13
- self.namespace_model = namespace_model
12
+ def __init__(self, code_model: CodeModel, env: Environment) -> None:
13
+ self.code_model = code_model
14
14
  self.env = env
15
15
 
16
16
  def serialize(self) -> str:
17
17
  # Generate the enum file
18
18
  template = self.env.get_template("enum_container.py.jinja2")
19
- return template.render(namespace_model=self.namespace_model)
19
+ return template.render(code_model=self.code_model)
@@ -3,16 +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 Any
6
+ from typing import Any, List
7
7
  from jinja2 import Environment
8
8
  from .import_serializer import FileImportSerializer, TypingSection
9
9
  from ..models.imports import MsrestImportType
10
10
  from ..models import (
11
11
  FileImport,
12
12
  ImportType,
13
- NamespaceModel,
14
13
  CodeModel,
15
14
  TokenCredentialType,
15
+ Client,
16
16
  )
17
17
  from .client_serializer import ClientSerializer, ConfigSerializer
18
18
 
@@ -28,9 +28,10 @@ _PACKAGE_MODE_FILES = [
28
28
  class GeneralSerializer:
29
29
  """General serializer for SDK root level files"""
30
30
 
31
- def __init__(self, code_model: CodeModel, env: Environment):
31
+ def __init__(self, code_model: CodeModel, env: Environment, async_mode: bool):
32
32
  self.code_model = code_model
33
33
  self.env = env
34
+ self.async_mode = async_mode
34
35
 
35
36
  def serialize_setup_file(self) -> str:
36
37
  template = self.env.get_template("packaging_templates/setup.py.jinja2")
@@ -43,8 +44,7 @@ class GeneralSerializer:
43
44
  package_parts = (self.code_model.options["package_name"] or "").split("-")[:-1]
44
45
  token_credential = any(
45
46
  c
46
- for nm in self.code_model.namespace_models
47
- for c in nm.clients
47
+ for c in self.code_model.clients
48
48
  if isinstance(getattr(c.credential, "type", None), TokenCredentialType)
49
49
  )
50
50
  version = self.code_model.options["package_version"]
@@ -63,47 +63,36 @@ class GeneralSerializer:
63
63
  "/".join(package_parts[: i + 1]) + "/__init__.py"
64
64
  for i in range(len(package_parts))
65
65
  ],
66
- "client_name": self.code_model.namespace_models[0].clients[0].name,
67
- "namespace": self.code_model.namespace_models[0],
66
+ "client_name": self.code_model.clients[0].name,
67
+ "namespace": self.code_model.namespace,
68
68
  }
69
69
  params.update(self.code_model.options)
70
70
  params.update(kwargs)
71
71
  return template.render(**params)
72
72
 
73
-
74
- class GeneralNamespaceSerializer:
75
- """General serializer for namespace level files"""
76
-
77
- def __init__(
78
- self, namespace_model: NamespaceModel, env: Environment, async_mode: bool
79
- ) -> None:
80
- self.namespace_model = namespace_model
81
- self.env = env
82
- self.async_mode = async_mode
83
-
84
73
  def serialize_pkgutil_init_file(self) -> str:
85
74
  template = self.env.get_template("pkgutil_init.py.jinja2")
86
75
  return template.render()
87
76
 
88
- def serialize_init_file(self) -> str:
77
+ def serialize_init_file(self, clients: List[Client]) -> str:
89
78
  template = self.env.get_template("init.py.jinja2")
90
- clients = [c for c in self.namespace_model.clients if c.request_builders]
91
79
  return template.render(
92
- namespace_model=self.namespace_model,
80
+ code_model=self.code_model,
93
81
  clients=clients,
94
82
  async_mode=self.async_mode,
95
83
  )
96
84
 
97
- def serialize_service_client_file(self) -> str:
85
+ def serialize_service_client_file(self, clients: List[Client]) -> str:
98
86
 
99
87
  template = self.env.get_template("client_container.py.jinja2")
100
88
 
101
89
  imports = FileImport()
102
- for client in self.namespace_model.clients:
90
+ for client in clients:
103
91
  imports.merge(client.imports(self.async_mode))
104
92
 
105
93
  return template.render(
106
- namespace_model=self.namespace_model,
94
+ code_model=self.code_model,
95
+ clients=clients,
107
96
  async_mode=self.async_mode,
108
97
  get_serializer=ClientSerializer,
109
98
  imports=FileImportSerializer(imports),
@@ -114,14 +103,14 @@ class GeneralNamespaceSerializer:
114
103
 
115
104
  # configure imports
116
105
  file_import = FileImport()
117
- if self.namespace_model.need_request_converter:
106
+ if self.code_model.need_request_converter:
118
107
  file_import.add_submodule_import(
119
108
  "azure.core.pipeline.transport",
120
109
  "HttpRequest",
121
110
  ImportType.AZURECORE,
122
111
  )
123
112
 
124
- if self.namespace_model.need_mixin_abc:
113
+ if self.code_model.need_mixin_abc:
125
114
  file_import.add_submodule_import(
126
115
  "abc",
127
116
  "ABC",
@@ -134,12 +123,12 @@ class GeneralNamespaceSerializer:
134
123
  TypingSection.TYPING,
135
124
  )
136
125
  file_import.add_msrest_import(
137
- self.namespace_model,
126
+ self.code_model,
138
127
  ".." if self.async_mode else ".",
139
128
  MsrestImportType.SerializerDeserializer,
140
129
  TypingSection.TYPING,
141
130
  )
142
- for client in self.namespace_model.clients:
131
+ for client in self.code_model.clients:
143
132
  file_import.add_submodule_import(
144
133
  "._configuration",
145
134
  f"{client.name}Configuration",
@@ -147,37 +136,38 @@ class GeneralNamespaceSerializer:
147
136
  )
148
137
 
149
138
  return template.render(
150
- namespace_model=self.namespace_model,
139
+ code_model=self.code_model,
151
140
  imports=FileImportSerializer(
152
141
  file_import,
153
142
  ),
154
143
  async_mode=self.async_mode,
155
144
  )
156
145
 
157
- def serialize_config_file(self) -> str:
146
+ def serialize_config_file(self, clients: List[Client]) -> str:
158
147
  template = self.env.get_template("config_container.py.jinja2")
159
148
  imports = FileImport()
160
- for client in self.namespace_model.clients:
149
+ for client in self.code_model.clients:
161
150
  imports.merge(client.config.imports(self.async_mode))
162
151
  return template.render(
163
- namespace_model=self.namespace_model,
152
+ code_model=self.code_model,
164
153
  async_mode=self.async_mode,
165
154
  imports=FileImportSerializer(imports),
166
155
  get_serializer=ConfigSerializer,
156
+ clients=clients,
167
157
  )
168
158
 
169
159
  def serialize_version_file(self) -> str:
170
160
  template = self.env.get_template("version.py.jinja2")
171
- return template.render(namespace_model=self.namespace_model)
161
+ return template.render(code_model=self.code_model)
172
162
 
173
163
  def serialize_serialization_file(self) -> str:
174
164
  template = self.env.get_template("serialization.py.jinja2")
175
- return template.render(namespace_model=self.namespace_model)
165
+ return template.render(code_model=self.code_model)
176
166
 
177
167
  def serialize_model_base_file(self) -> str:
178
168
  template = self.env.get_template("model_base.py.jinja2")
179
- return template.render(namespace_model=self.namespace_model)
169
+ return template.render(code_model=self.code_model)
180
170
 
181
171
  def serialize_validation_file(self) -> str:
182
172
  template = self.env.get_template("validation.py.jinja2")
183
- return template.render(namespace_model=self.namespace_model)
173
+ return template.render(code_model=self.code_model)