@autorest/python 6.1.11 → 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 +11 -8
  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 +14 -11
  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 +50 -49
  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
@@ -12,7 +12,7 @@ from typing import Any, Generic, List, Type, TypeVar, Dict, Union, Optional, cas
12
12
 
13
13
  from ..models import (
14
14
  Operation,
15
- CodeModel,
15
+ NamespaceModel,
16
16
  PagingOperation,
17
17
  LROOperation,
18
18
  LROPagingOperation,
@@ -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, code_model: CodeModel, async_mode: bool) -> None:
194
- self.code_model = code_model
193
+ def __init__(self, namespace_model: NamespaceModel, async_mode: bool) -> None:
194
+ self.namespace_model = namespace_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.code_model.options["tracing"] and builder.want_tracing:
230
+ if self.namespace_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.code_model.options["models_mode"]:
318
+ if self.namespace_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.code_model.options["polymorphic_examples"],
348
+ self.namespace_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.code_model.options.get(o)
516
+ if self.namespace_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.code_model.options["models_mode"]:
544
+ if self.namespace_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.code_model.options["polymorphic_examples"],
562
+ self.namespace_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.code_model.options["version_tolerant"]:
618
+ if not self.namespace_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.code_model.options["multiapi"],
639
+ check_client_input=not self.namespace_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.code_model.options["models_mode"]:
675
+ if xml_serialization_ctxt and self.namespace_model.options["models_mode"]:
676
676
  retval.append(f'{ser_ctxt_name} = {{"xml": {{{xml_serialization_ctxt}}}}}')
677
- if self.code_model.options["models_mode"] == "msrest":
677
+ if self.namespace_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.code_model.options["models_mode"] == "dpg":
686
+ elif self.namespace_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.code_model.options["builders_visibility"] == "embedded":
828
+ if self.namespace_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.code_model.options["version_tolerant"]:
874
+ if not self.namespace_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.code_model.options["version_tolerant"]:
886
+ if not self.namespace_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.code_model.options["version_tolerant"] and template_url:
897
+ if self.namespace_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.code_model.options["version_tolerant"]
961
+ if self.namespace_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.code_model.options["models_mode"] == "msrest":
966
+ if self.namespace_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.code_model.options["models_mode"] == "dpg" and isinstance(
970
+ elif self.namespace_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.code_model.options["models_mode"]
998
+ and self.namespace_model.options["models_mode"]
999
999
  ):
1000
- if self.code_model.options["models_mode"] == "dpg":
1000
+ if self.namespace_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.code_model.options["azure_arm"]
1014
+ if self.namespace_model.options["azure_arm"]
1015
1015
  else "",
1016
1016
  )
1017
1017
  )
@@ -1046,7 +1046,10 @@ class _OperationSerializer(
1046
1046
  self.response_headers_and_deserialization(builder.responses[0])
1047
1047
  )
1048
1048
  retval.append("")
1049
- if builder.has_optional_return_type or self.code_model.options["models_mode"]:
1049
+ if (
1050
+ builder.has_optional_return_type
1051
+ or self.namespace_model.options["models_mode"]
1052
+ ):
1050
1053
  deserialized = "deserialized"
1051
1054
  else:
1052
1055
  deserialized = f"cast({builder.response_type_annotation(async_mode=self.async_mode)}, deserialized)"
@@ -1062,7 +1065,7 @@ class _OperationSerializer(
1062
1065
  retval.append(f"return {deserialized}")
1063
1066
  if (
1064
1067
  builder.request_builder.method == "HEAD"
1065
- and self.code_model.options["head_as_boolean"]
1068
+ and self.namespace_model.options["head_as_boolean"]
1066
1069
  ):
1067
1070
  retval.append("return 200 <= response.status_code <= 299")
1068
1071
  return retval
@@ -1081,16 +1084,16 @@ class _OperationSerializer(
1081
1084
  for excep in builder.non_default_errors:
1082
1085
  error_model_str = ""
1083
1086
  if isinstance(excep.type, ModelType):
1084
- if self.code_model.options["models_mode"] == "msrest":
1087
+ if self.namespace_model.options["models_mode"] == "msrest":
1085
1088
  error_model_str = (
1086
1089
  f", model=self._deserialize("
1087
1090
  f"_models.{excep.type.serialization_type}, response)"
1088
1091
  )
1089
- elif self.code_model.options["models_mode"] == "dpg":
1092
+ elif self.namespace_model.options["models_mode"] == "dpg":
1090
1093
  error_model_str = f", model=_deserialize(_models.{excep.type.name}, response.json())"
1091
1094
  error_format_str = (
1092
1095
  ", error_format=ARMErrorFormat"
1093
- if self.code_model.options["azure_arm"]
1096
+ if self.namespace_model.options["azure_arm"]
1094
1097
  else ""
1095
1098
  )
1096
1099
  for status_code in excep.status_codes:
@@ -1154,11 +1157,11 @@ PagingOperationType = TypeVar(
1154
1157
  class _PagingOperationSerializer(
1155
1158
  _OperationSerializer[PagingOperationType]
1156
1159
  ): # pylint: disable=abstract-method
1157
- def __init__(self, code_model: CodeModel, async_mode: bool) -> None:
1160
+ def __init__(self, namespace_model: NamespaceModel, async_mode: bool) -> None:
1158
1161
  # for pylint reasons need to redefine init
1159
1162
  # probably because inheritance is going too deep
1160
- super().__init__(code_model, async_mode)
1161
- self.code_model = code_model
1163
+ super().__init__(namespace_model, async_mode)
1164
+ self.namespace_model = namespace_model
1162
1165
  self.async_mode = async_mode
1163
1166
  self.parameter_serializer = ParameterSerializer()
1164
1167
 
@@ -1172,7 +1175,7 @@ class _PagingOperationSerializer(
1172
1175
  retval: List[str] = []
1173
1176
  if builder.is_overload:
1174
1177
  return ["@overload"]
1175
- if self.code_model.options["tracing"] and builder.want_tracing:
1178
+ if self.namespace_model.options["tracing"] and builder.want_tracing:
1176
1179
  retval.append("@distributed_trace")
1177
1180
  if _api_version_validation(builder):
1178
1181
  retval.append(_api_version_validation(builder))
@@ -1183,7 +1186,7 @@ class _PagingOperationSerializer(
1183
1186
  request_builder = builder.next_request_builder
1184
1187
  template_url = (
1185
1188
  None
1186
- if self.code_model.options["version_tolerant"]
1189
+ if self.namespace_model.options["version_tolerant"]
1187
1190
  else f"'{request_builder.url}'"
1188
1191
  )
1189
1192
  else:
@@ -1203,9 +1206,7 @@ class _PagingOperationSerializer(
1203
1206
  next_link_str = "next_link"
1204
1207
  try:
1205
1208
  api_version_param = next(
1206
- p
1207
- for p in self.code_model.client.parameters
1208
- if p.rest_api_name == "api-version"
1209
+ p for p in builder.client.parameters if p.rest_api_name == "api-version"
1209
1210
  )
1210
1211
  retval.append("# make call to next link with the client's api-version")
1211
1212
  retval.append("_parsed_next_link = urllib.parse.urlparse(next_link)")
@@ -1245,7 +1246,7 @@ class _PagingOperationSerializer(
1245
1246
  retval.extend(
1246
1247
  [f" {line}" for line in self.call_next_link_request_builder(builder)]
1247
1248
  )
1248
- if not builder.next_request_builder and self.code_model.is_legacy:
1249
+ if not builder.next_request_builder and self.namespace_model.is_legacy:
1249
1250
  retval.append(' request.method = "GET"')
1250
1251
  else:
1251
1252
  retval.append("")
@@ -1262,14 +1263,14 @@ class _PagingOperationSerializer(
1262
1263
  ]
1263
1264
  response = builder.responses[0]
1264
1265
  deserialized = "pipeline_response.http_response.json()"
1265
- if self.code_model.options["models_mode"] == "msrest":
1266
+ if self.namespace_model.options["models_mode"] == "msrest":
1266
1267
  deserialize_type = response.serialization_type
1267
1268
  pylint_disable = " # pylint: disable=protected-access"
1268
1269
  if isinstance(response.type, ModelType) and response.type.is_public:
1269
1270
  deserialize_type = f'"{response.serialization_type}"'
1270
1271
  pylint_disable = ""
1271
1272
  deserialized = f"self._deserialize(\n {deserialize_type}, pipeline_response{pylint_disable}\n)"
1272
- elif self.code_model.options["models_mode"] == "dpg":
1273
+ elif self.namespace_model.options["models_mode"] == "dpg":
1273
1274
  deserialized = (
1274
1275
  f"_deserialize({response.serialization_type}, pipeline_response)"
1275
1276
  )
@@ -1277,7 +1278,7 @@ class _PagingOperationSerializer(
1277
1278
  item_name = builder.item_name
1278
1279
  list_of_elem = (
1279
1280
  f".{item_name}"
1280
- if self.code_model.options["models_mode"]
1281
+ if self.namespace_model.options["models_mode"]
1281
1282
  else f'["{item_name}"]'
1282
1283
  )
1283
1284
  retval.append(f" list_of_elem = deserialized{list_of_elem}")
@@ -1287,7 +1288,7 @@ class _PagingOperationSerializer(
1287
1288
  continuation_token_name = builder.continuation_token_name
1288
1289
  if not continuation_token_name:
1289
1290
  cont_token_property = "None"
1290
- elif self.code_model.options["models_mode"]:
1291
+ elif self.namespace_model.options["models_mode"]:
1291
1292
  cont_token_property = f"deserialized.{continuation_token_name} or None"
1292
1293
  else:
1293
1294
  cont_token_property = f'deserialized.get("{continuation_token_name}", None)'
@@ -1330,11 +1331,11 @@ LROOperationType = TypeVar(
1330
1331
 
1331
1332
 
1332
1333
  class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
1333
- def __init__(self, code_model: CodeModel, async_mode: bool) -> None:
1334
+ def __init__(self, namespace_model: NamespaceModel, async_mode: bool) -> None:
1334
1335
  # for pylint reasons need to redefine init
1335
1336
  # probably because inheritance is going too deep
1336
- super().__init__(code_model, async_mode)
1337
- self.code_model = code_model
1337
+ super().__init__(namespace_model, async_mode)
1338
+ self.namespace_model = namespace_model
1338
1339
  self.async_mode = async_mode
1339
1340
  self.parameter_serializer = ParameterSerializer()
1340
1341
 
@@ -1447,8 +1448,8 @@ class _LROOperationSerializer(_OperationSerializer[LROOperationType]):
1447
1448
  if builder.lro_response.headers:
1448
1449
  retval.append(" response_headers = {}")
1449
1450
  if (
1450
- not self.code_model.options["models_mode"]
1451
- or self.code_model.options["models_mode"] == "dpg"
1451
+ not self.namespace_model.options["models_mode"]
1452
+ or self.namespace_model.options["models_mode"] == "dpg"
1452
1453
  or builder.lro_response.headers
1453
1454
  ):
1454
1455
  retval.append(" response = pipeline_response.http_response")
@@ -1514,7 +1515,7 @@ class LROPagingOperationSerializer(
1514
1515
 
1515
1516
  def get_operation_serializer(
1516
1517
  builder: Operation,
1517
- code_model,
1518
+ namespace_model,
1518
1519
  async_mode: bool,
1519
1520
  ) -> Union[
1520
1521
  OperationSerializer,
@@ -1534,4 +1535,4 @@ def get_operation_serializer(
1534
1535
  retcls = LROOperationSerializer
1535
1536
  elif builder.operation_type == "paging":
1536
1537
  retcls = PagingOperationSerializer
1537
- return retcls(code_model, async_mode)
1538
+ return retcls(namespace_model, async_mode)
@@ -6,18 +6,18 @@
6
6
  from typing import List
7
7
 
8
8
  from . import utils
9
- from ..models import CodeModel, ParameterMethodLocation
9
+ from ..models import Client, ParameterMethodLocation
10
10
  from .parameter_serializer import ParameterSerializer, PopKwargType
11
11
 
12
12
 
13
13
  class ClientSerializer:
14
- def __init__(self, code_model: CodeModel) -> None:
15
- self.code_model = code_model
14
+ def __init__(self, client: Client) -> None:
15
+ self.client = client
16
16
  self.parameter_serializer = ParameterSerializer()
17
17
 
18
18
  def _init_signature(self, async_mode: bool) -> str:
19
19
  pylint_disable = ""
20
- if not self.code_model.client.parameters.credential:
20
+ if not self.client.parameters.credential:
21
21
  pylint_disable = (
22
22
  " # pylint: disable=missing-client-constructor-parameter-credential"
23
23
  )
@@ -25,9 +25,7 @@ class ClientSerializer:
25
25
  function_def="def",
26
26
  method_name="__init__",
27
27
  need_self_param=True,
28
- method_param_signatures=self.code_model.client.parameters.method_signature(
29
- async_mode
30
- ),
28
+ method_param_signatures=self.client.parameters.method_signature(async_mode),
31
29
  pylint_disable=pylint_disable,
32
30
  )
33
31
 
@@ -40,7 +38,7 @@ class ClientSerializer:
40
38
 
41
39
  def pop_kwargs_from_signature(self) -> List[str]:
42
40
  return self.parameter_serializer.pop_kwargs_from_signature(
43
- self.code_model.client.parameters.kwargs_to_pop,
41
+ self.client.parameters.kwargs_to_pop,
44
42
  check_kwarg_dict=False,
45
43
  pop_headers_kwarg=PopKwargType.NO,
46
44
  pop_params_kwarg=PopKwargType.NO,
@@ -48,12 +46,12 @@ class ClientSerializer:
48
46
 
49
47
  @property
50
48
  def class_definition(self) -> str:
51
- class_name = self.code_model.client.name
52
- has_mixin_og = any(og for og in self.code_model.operation_groups if og.is_mixin)
49
+ class_name = self.client.name
50
+ has_mixin_og = any(og for og in self.client.operation_groups if og.is_mixin)
53
51
  base_class = ""
54
52
  if has_mixin_og:
55
53
  base_class = f"{class_name}OperationsMixin"
56
- pylint_disable = self.code_model.client.pylint_disable
54
+ pylint_disable = self.client.pylint_disable
57
55
  if base_class:
58
56
  return f"class {class_name}({base_class}):{pylint_disable}"
59
57
  return f"class {class_name}:{pylint_disable}"
@@ -61,19 +59,18 @@ class ClientSerializer:
61
59
  def property_descriptions(self, async_mode: bool) -> List[str]:
62
60
  retval: List[str] = []
63
61
  operations_folder = ".aio.operations." if async_mode else ".operations."
64
- for og in [og for og in self.code_model.operation_groups if not og.is_mixin]:
62
+ for og in [og for og in self.client.operation_groups if not og.is_mixin]:
65
63
  retval.append(f":ivar {og.property_name}: {og.class_name} operations")
66
- retval.append(
67
- f":vartype {og.property_name}: {self.code_model.namespace}{operations_folder}{og.class_name}"
68
- )
69
- for param in self.code_model.client.parameters.method:
64
+ property_type = f"{self.client.namespace_model.namespace}{operations_folder}{og.class_name}"
65
+ retval.append(f":vartype {og.property_name}: {property_type}")
66
+ for param in self.client.parameters.method:
70
67
  retval.append(
71
68
  f":{param.description_keyword} {param.client_name}: {param.description}"
72
69
  )
73
70
  retval.append(
74
71
  f":{param.docstring_type_keyword} {param.client_name}: {param.docstring_type(async_mode=async_mode)}"
75
72
  )
76
- if self.code_model.has_lro_operations:
73
+ if self.client.has_lro_operations:
77
74
  retval.append(
78
75
  ":keyword int polling_interval: Default waiting time between two polls for LRO operations "
79
76
  "if no Retry-After header is present."
@@ -82,11 +79,11 @@ class ClientSerializer:
82
79
  return retval
83
80
 
84
81
  def initialize_config(self) -> str:
85
- config_name = f"{self.code_model.client.name}Configuration"
82
+ config_name = f"{self.client.name}Configuration"
86
83
  config_call = ", ".join(
87
84
  [
88
85
  f"{p.client_name}={p.client_name}"
89
- for p in self.code_model.config.parameters.method
86
+ for p in self.client.config.parameters.method
90
87
  if p.method_location != ParameterMethodLocation.KWARG
91
88
  ]
92
89
  + ["**kwargs"]
@@ -96,9 +93,7 @@ class ClientSerializer:
96
93
  @property
97
94
  def host_variable_name(self) -> str:
98
95
  try:
99
- return next(
100
- p for p in self.code_model.client.parameters if p.is_host
101
- ).client_name
96
+ return next(p for p in self.client.parameters if p.is_host).client_name
102
97
  except StopIteration:
103
98
  return "_endpoint"
104
99
 
@@ -106,12 +101,12 @@ class ClientSerializer:
106
101
  def should_init_super(self) -> bool:
107
102
  return any(
108
103
  og
109
- for og in self.code_model.operation_groups
104
+ for og in self.client.operation_groups
110
105
  if og.is_mixin and og.has_abstract_operations
111
106
  )
112
107
 
113
108
  def initialize_pipeline_client(self, async_mode: bool) -> str:
114
- pipeline_client_name = self.code_model.client.pipeline_class(async_mode)
109
+ pipeline_client_name = self.client.pipeline_class(async_mode)
115
110
  return (
116
111
  f"self._client = {pipeline_client_name}(base_url={self.host_variable_name}, "
117
112
  "config=self._config, **kwargs)"
@@ -119,22 +114,22 @@ class ClientSerializer:
119
114
 
120
115
  def serializers_and_operation_groups_properties(self) -> List[str]:
121
116
  retval = []
122
- if self.code_model.model_types:
117
+ if self.client.namespace_model.model_types:
123
118
  client_models_value = (
124
119
  "{k: v for k, v in models.__dict__.items() if isinstance(v, type)}"
125
120
  )
126
121
  else:
127
122
  client_models_value = "{} # type: Dict[str, Any]"
128
- is_msrest_model = self.code_model.options["models_mode"] == "msrest"
123
+ is_msrest_model = self.client.namespace_model.options["models_mode"] == "msrest"
129
124
  if is_msrest_model:
130
125
  retval.append(f"client_models = {client_models_value}")
131
126
  client_models_str = "client_models" if is_msrest_model else ""
132
127
  retval.append(f"self._serialize = Serializer({client_models_str})")
133
128
  retval.append(f"self._deserialize = Deserializer({client_models_str})")
134
- if not self.code_model.options["client_side_validation"]:
129
+ if not self.client.namespace_model.options["client_side_validation"]:
135
130
  retval.append("self._serialize.client_side_validation = False")
136
131
  operation_groups = [
137
- og for og in self.code_model.operation_groups if not og.is_mixin
132
+ og for og in self.client.operation_groups if not og.is_mixin
138
133
  ]
139
134
  for og in operation_groups:
140
135
  retval.extend(
@@ -149,10 +144,10 @@ class ClientSerializer:
149
144
  def _send_request_signature(self) -> str:
150
145
  send_request_signature = [
151
146
  "request: HttpRequest,"
152
- ] + self.code_model.client.parameters.method_signature_kwargs
147
+ ] + self.client.parameters.method_signature_kwargs
153
148
  return self.parameter_serializer.serialize_method(
154
149
  function_def="def",
155
- method_name=self.code_model.client.send_request_name,
150
+ method_name=self.client.send_request_name,
156
151
  need_self_param=True,
157
152
  method_param_signatures=send_request_signature,
158
153
  )
@@ -171,7 +166,7 @@ class ClientSerializer:
171
166
  def _example_make_call(self, async_mode: bool) -> List[str]:
172
167
  http_response = "AsyncHttpResponse" if async_mode else "HttpResponse"
173
168
  retval = [
174
- f">>> response = {'await ' if async_mode else ''}client.{self.code_model.client.send_request_name}(request)"
169
+ f">>> response = {'await ' if async_mode else ''}client.{self.client.send_request_name}(request)"
175
170
  ]
176
171
  retval.append(f"<{http_response}: 200 OK>")
177
172
  return retval
@@ -179,14 +174,14 @@ class ClientSerializer:
179
174
  def _request_builder_example(self, async_mode: bool) -> List[str]:
180
175
  retval = [
181
176
  "We have helper methods to create requests specific to this service in "
182
- + f"`{self.code_model.namespace}.{self.code_model.rest_layer_name}`."
177
+ + f"`{self.client.namespace_model.namespace}.{self.client.namespace_model.rest_layer_name}`."
183
178
  ]
184
179
  retval.append(
185
180
  "Use these helper methods to create the request you pass to this method."
186
181
  )
187
182
  retval.append("")
188
183
 
189
- request_builder = self.code_model.request_builders[0]
184
+ request_builder = self.client.request_builders[0]
190
185
  request_builder_signature = ", ".join(request_builder.parameters.call)
191
186
  if request_builder.group_name:
192
187
  rest_imported = request_builder.group_name
@@ -196,9 +191,8 @@ class ClientSerializer:
196
191
  else:
197
192
  rest_imported = request_builder.name
198
193
  request_builder_name = request_builder.name
199
- retval.append(
200
- f">>> from {self.code_model.namespace}.{self.code_model.rest_layer_name} import {rest_imported}"
201
- )
194
+ full_path = f"{self.client.namespace_model.namespace}.{self.client.namespace_model.rest_layer_name}"
195
+ retval.append(f">>> from {full_path} import {rest_imported}")
202
196
  retval.append(
203
197
  f">>> request = {request_builder_name}({request_builder_signature})"
204
198
  )
@@ -218,7 +212,7 @@ class ClientSerializer:
218
212
  def send_request_description(self, async_mode: bool) -> List[str]:
219
213
  retval = ['"""Runs the network request through the client\'s chained policies.']
220
214
  retval.append("")
221
- if self.code_model.options["builders_visibility"] != "embedded":
215
+ if self.client.namespace_model.options["builders_visibility"] != "embedded":
222
216
  retval.extend(self._request_builder_example(async_mode))
223
217
  else:
224
218
  retval.extend(self._rest_request_example(async_mode))
@@ -242,13 +236,13 @@ class ClientSerializer:
242
236
 
243
237
  def serialize_path(self) -> List[str]:
244
238
  return self.parameter_serializer.serialize_path(
245
- self.code_model.client.parameters.path, "self._serialize"
239
+ self.client.parameters.path, "self._serialize"
246
240
  )
247
241
 
248
242
 
249
243
  class ConfigSerializer:
250
- def __init__(self, code_model: CodeModel) -> None:
251
- self.code_model = code_model
244
+ def __init__(self, client: Client) -> None:
245
+ self.client = client
252
246
  self.parameter_serializer = ParameterSerializer()
253
247
 
254
248
  def _init_signature(self, async_mode: bool) -> str:
@@ -256,7 +250,7 @@ class ConfigSerializer:
256
250
  function_def="def",
257
251
  method_name="__init__",
258
252
  need_self_param=True,
259
- method_param_signatures=self.code_model.config.parameters.method_signature(
253
+ method_param_signatures=self.client.config.parameters.method_signature(
260
254
  async_mode
261
255
  ),
262
256
  )
@@ -270,7 +264,7 @@ class ConfigSerializer:
270
264
 
271
265
  def pop_kwargs_from_signature(self) -> List[str]:
272
266
  return self.parameter_serializer.pop_kwargs_from_signature(
273
- self.code_model.config.parameters.kwargs_to_pop,
267
+ self.client.config.parameters.kwargs_to_pop,
274
268
  check_kwarg_dict=False,
275
269
  pop_headers_kwarg=PopKwargType.NO,
276
270
  pop_params_kwarg=PopKwargType.NO,
@@ -279,21 +273,21 @@ class ConfigSerializer:
279
273
  def set_constants(self) -> List[str]:
280
274
  return [
281
275
  f"self.{p.client_name} = {p.client_default_value_declaration}"
282
- for p in self.code_model.config.parameters.constant
283
- if p not in self.code_model.config.parameters.method
276
+ for p in self.client.config.parameters.constant
277
+ if p not in self.client.config.parameters.method
284
278
  ]
285
279
 
286
280
  def check_required_parameters(self) -> List[str]:
287
281
  return [
288
282
  f"if {p.client_name} is None:\n"
289
283
  f" raise ValueError(\"Parameter '{p.client_name}' must not be None.\")"
290
- for p in self.code_model.config.parameters.method
284
+ for p in self.client.config.parameters.method
291
285
  if not (p.optional or p.constant)
292
286
  ]
293
287
 
294
288
  def property_descriptions(self, async_mode: bool) -> List[str]:
295
289
  retval: List[str] = []
296
- for p in self.code_model.config.parameters.method:
290
+ for p in self.client.config.parameters.method:
297
291
  retval.append(f":{p.description_keyword} {p.client_name}: {p.description}")
298
292
  retval.append(
299
293
  f":{p.docstring_type_keyword} {p.client_name}: {p.docstring_type(async_mode=async_mode)}"
@@ -5,15 +5,15 @@
5
5
  # --------------------------------------------------------------------------
6
6
 
7
7
  from jinja2 import Environment
8
- from ..models import CodeModel
8
+ from ..models import NamespaceModel
9
9
 
10
10
 
11
11
  class EnumSerializer:
12
- def __init__(self, code_model: CodeModel, env: Environment) -> None:
13
- self.code_model = code_model
12
+ def __init__(self, namespace_model: NamespaceModel, env: Environment) -> None:
13
+ self.namespace_model = namespace_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(code_model=self.code_model)
19
+ return template.render(namespace_model=self.namespace_model)