@typespec/http-client-python 0.9.0-dev.1 → 0.9.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 (114) hide show
  1. package/README.md +86 -84
  2. package/dist/emitter/code-model.d.ts +1 -2
  3. package/dist/emitter/code-model.d.ts.map +1 -1
  4. package/dist/emitter/code-model.js +17 -21
  5. package/dist/emitter/code-model.js.map +1 -1
  6. package/dist/emitter/emitter.d.ts +0 -2
  7. package/dist/emitter/emitter.d.ts.map +1 -1
  8. package/dist/emitter/emitter.js +13 -28
  9. package/dist/emitter/emitter.js.map +1 -1
  10. package/dist/emitter/http.d.ts +4 -4
  11. package/dist/emitter/http.d.ts.map +1 -1
  12. package/dist/emitter/http.js.map +1 -1
  13. package/dist/emitter/index.d.ts +1 -1
  14. package/dist/emitter/index.d.ts.map +1 -1
  15. package/dist/emitter/index.js +1 -1
  16. package/dist/emitter/index.js.map +1 -1
  17. package/dist/emitter/lib.d.ts +63 -21
  18. package/dist/emitter/lib.d.ts.map +1 -1
  19. package/dist/emitter/lib.js +47 -27
  20. package/dist/emitter/lib.js.map +1 -1
  21. package/dist/emitter/system-requirements.d.ts.map +1 -1
  22. package/dist/emitter/types.d.ts +3 -3
  23. package/dist/emitter/types.d.ts.map +1 -1
  24. package/dist/emitter/types.js +4 -3
  25. package/dist/emitter/types.js.map +1 -1
  26. package/dist/emitter/utils.d.ts +5 -5
  27. package/dist/emitter/utils.d.ts.map +1 -1
  28. package/dist/emitter/utils.js.map +1 -1
  29. package/emitter/src/code-model.ts +26 -30
  30. package/emitter/src/emitter.ts +28 -46
  31. package/emitter/src/http.ts +18 -21
  32. package/emitter/src/index.ts +1 -1
  33. package/emitter/src/lib.ts +66 -39
  34. package/emitter/src/types.ts +20 -26
  35. package/emitter/src/utils.ts +6 -9
  36. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  37. package/eng/scripts/Generate.ps1 +3 -0
  38. package/eng/scripts/ci/lint.ts +3 -6
  39. package/eng/scripts/ci/pylintrc +1 -1
  40. package/eng/scripts/ci/regenerate.ts +21 -26
  41. package/eng/scripts/ci/utils.ts +13 -18
  42. package/eng/scripts/setup/__pycache__/venvtools.cpython-38.pyc +0 -0
  43. package/generator/build/lib/pygen/codegen/__init__.py +7 -21
  44. package/generator/build/lib/pygen/codegen/_utils.py +26 -2
  45. package/generator/build/lib/pygen/codegen/models/code_model.py +33 -0
  46. package/generator/build/lib/pygen/codegen/models/credential_types.py +5 -2
  47. package/generator/build/lib/pygen/codegen/serializers/__init__.py +3 -1
  48. package/generator/build/lib/pygen/codegen/templates/client_container.py.jinja2 +3 -1
  49. package/generator/build/lib/pygen/codegen/templates/config_container.py.jinja2 +3 -1
  50. package/generator/build/lib/pygen/codegen/templates/conftest.py.jinja2 +3 -1
  51. package/generator/build/lib/pygen/codegen/templates/enum_container.py.jinja2 +3 -1
  52. package/generator/build/lib/pygen/codegen/templates/init.py.jinja2 +3 -1
  53. package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +3 -5
  54. package/generator/build/lib/pygen/codegen/templates/model_container.py.jinja2 +3 -1
  55. package/generator/build/lib/pygen/codegen/templates/model_init.py.jinja2 +3 -1
  56. package/generator/build/lib/pygen/codegen/templates/operation_groups_container.py.jinja2 +3 -1
  57. package/generator/build/lib/pygen/codegen/templates/operations_folder_init.py.jinja2 +3 -1
  58. package/generator/build/lib/pygen/codegen/templates/packaging_templates/LICENSE.jinja2 +1 -21
  59. package/generator/build/lib/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +6 -4
  60. package/generator/build/lib/pygen/codegen/templates/patch.py.jinja2 +9 -4
  61. package/generator/build/lib/pygen/codegen/templates/request_builders.py.jinja2 +3 -1
  62. package/generator/build/lib/pygen/codegen/templates/rest_init.py.jinja2 +3 -1
  63. package/generator/build/lib/pygen/codegen/templates/sample.py.jinja2 +3 -1
  64. package/generator/build/lib/pygen/codegen/templates/serialization.py.jinja2 +4 -25
  65. package/generator/build/lib/pygen/codegen/templates/test.py.jinja2 +3 -1
  66. package/generator/build/lib/pygen/codegen/templates/testpreparer.py.jinja2 +3 -1
  67. package/generator/build/lib/pygen/codegen/templates/types.py.jinja2 +3 -1
  68. package/generator/build/lib/pygen/codegen/templates/validation.py.jinja2 +3 -1
  69. package/generator/build/lib/pygen/codegen/templates/vendor.py.jinja2 +3 -1
  70. package/generator/build/lib/pygen/codegen/templates/version.py.jinja2 +3 -1
  71. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  72. package/generator/pygen/codegen/__init__.py +7 -21
  73. package/generator/pygen/codegen/_utils.py +26 -2
  74. package/generator/pygen/codegen/models/code_model.py +33 -0
  75. package/generator/pygen/codegen/models/credential_types.py +5 -2
  76. package/generator/pygen/codegen/serializers/__init__.py +3 -1
  77. package/generator/pygen/codegen/templates/client_container.py.jinja2 +3 -1
  78. package/generator/pygen/codegen/templates/config_container.py.jinja2 +3 -1
  79. package/generator/pygen/codegen/templates/conftest.py.jinja2 +3 -1
  80. package/generator/pygen/codegen/templates/enum_container.py.jinja2 +3 -1
  81. package/generator/pygen/codegen/templates/init.py.jinja2 +3 -1
  82. package/generator/pygen/codegen/templates/model_base.py.jinja2 +3 -5
  83. package/generator/pygen/codegen/templates/model_container.py.jinja2 +3 -1
  84. package/generator/pygen/codegen/templates/model_init.py.jinja2 +3 -1
  85. package/generator/pygen/codegen/templates/operation_groups_container.py.jinja2 +3 -1
  86. package/generator/pygen/codegen/templates/operations_folder_init.py.jinja2 +3 -1
  87. package/generator/pygen/codegen/templates/packaging_templates/LICENSE.jinja2 +1 -21
  88. package/generator/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +6 -4
  89. package/generator/pygen/codegen/templates/patch.py.jinja2 +9 -4
  90. package/generator/pygen/codegen/templates/request_builders.py.jinja2 +3 -1
  91. package/generator/pygen/codegen/templates/rest_init.py.jinja2 +3 -1
  92. package/generator/pygen/codegen/templates/sample.py.jinja2 +3 -1
  93. package/generator/pygen/codegen/templates/serialization.py.jinja2 +4 -25
  94. package/generator/pygen/codegen/templates/test.py.jinja2 +3 -1
  95. package/generator/pygen/codegen/templates/testpreparer.py.jinja2 +3 -1
  96. package/generator/pygen/codegen/templates/types.py.jinja2 +3 -1
  97. package/generator/pygen/codegen/templates/validation.py.jinja2 +3 -1
  98. package/generator/pygen/codegen/templates/vendor.py.jinja2 +3 -1
  99. package/generator/pygen/codegen/templates/version.py.jinja2 +3 -1
  100. package/generator/test/azure/mock_api_tests/asynctests/test_azure_core_lro_rpc_async.py +2 -2
  101. package/generator/test/azure/mock_api_tests/test_azure_core_lro_rpc.py +1 -1
  102. package/generator/test/azure/requirements.txt +2 -1
  103. package/generator/test/generic_mock_api_tests/asynctests/test_authentication_async.py +4 -0
  104. package/generator/test/generic_mock_api_tests/asynctests/test_headasboolean_async.py +4 -4
  105. package/generator/test/generic_mock_api_tests/asynctests/test_streaming_jsonl_async.py +27 -0
  106. package/generator/test/generic_mock_api_tests/asynctests/test_typetest_model_visibility_async.py +1 -1
  107. package/generator/test/generic_mock_api_tests/test_authentication.py +4 -0
  108. package/generator/test/generic_mock_api_tests/test_headasboolean.py +4 -4
  109. package/generator/test/generic_mock_api_tests/test_streaming_jsonl.py +25 -0
  110. package/generator/test/generic_mock_api_tests/test_typetest_model_visibility.py +1 -1
  111. package/generator/test/unbranded/mock_api_tests/asynctests/test_auth_flow_async.py +19 -0
  112. package/generator/test/unbranded/mock_api_tests/test_auth_flow.py +17 -0
  113. package/generator/test/unbranded/requirements.txt +1 -0
  114. package/package.json +35 -26
@@ -1,4 +1,6 @@
1
- {{ code_model.options['license_header'] }}
1
+ {% if code_model.license_header %}
2
+ {{ code_model.license_header }}
3
+ {% endif %}
2
4
  import functools
3
5
 
4
6
  def api_version_validation(**kwargs):
@@ -1,5 +1,7 @@
1
1
  {% import 'keywords.jinja2' as keywords with context %}
2
- {{ code_model.options['license_header'] }}
2
+ {% if code_model.license_header %}
3
+ {{ code_model.license_header }}
4
+ {% endif %}
3
5
 
4
6
  {{ imports }}
5
7
 
@@ -1,4 +1,6 @@
1
1
  # coding=utf-8
2
- {{ code_model.options['license_header'] }}
2
+ {% if code_model.license_header %}
3
+ {{ code_model.license_header }}
4
+ {% endif %}
3
5
 
4
6
  VERSION = "{{ code_model.options['package_version'] }}"
@@ -13,7 +13,7 @@ from .. import Plugin
13
13
  from ..utils import parse_args
14
14
  from .models.code_model import CodeModel
15
15
  from .serializers import JinjaSerializer
16
- from ._utils import DEFAULT_HEADER_TEXT, VALID_PACKAGE_MODE, TYPESPEC_PACKAGE_MODE
16
+ from ._utils import VALID_PACKAGE_MODE, TYPESPEC_PACKAGE_MODE
17
17
 
18
18
 
19
19
  def _default_pprint(package_name: str) -> str:
@@ -53,24 +53,6 @@ class OptionsRetriever:
53
53
  key = prop.replace("_", "-")
54
54
  return self.options.get(key, self.OPTIONS_TO_DEFAULT.get(key))
55
55
 
56
- @property
57
- def company_name(self) -> str:
58
- return self.options.get("company-name", "Microsoft" if self.is_azure_flavor else "")
59
-
60
- @property
61
- def license_header(self) -> str:
62
- license_header = self.options.get(
63
- "header-text",
64
- (DEFAULT_HEADER_TEXT.format(company_name=self.company_name) if self.company_name else ""),
65
- )
66
- if license_header:
67
- license_header = license_header.replace("\n", "\n# ")
68
- license_header = (
69
- "# --------------------------------------------------------------------------\n# " + license_header
70
- )
71
- license_header += "\n# --------------------------------------------------------------------------"
72
- return license_header
73
-
74
56
  @property
75
57
  def show_operations(self) -> bool:
76
58
  return self.options.get("show-operations", not self.low_level_client)
@@ -168,6 +150,11 @@ class OptionsRetriever:
168
150
  def package_version(self) -> Optional[str]:
169
151
  return str(self.options.get("package-version", ""))
170
152
 
153
+
154
+ @property
155
+ def header_text(self) -> Optional[str]:
156
+ return self.options.get("header-text")
157
+
171
158
 
172
159
  class CodeGenerator(Plugin):
173
160
  def __init__(self, *args, **kwargs: Any) -> None:
@@ -286,7 +273,7 @@ class CodeGenerator(Plugin):
286
273
  flags = [
287
274
  "azure_arm",
288
275
  "head_as_boolean",
289
- "license_header",
276
+ "header_text",
290
277
  "keep_version_file",
291
278
  "no_async",
292
279
  "no_namespace_folders",
@@ -314,7 +301,6 @@ class CodeGenerator(Plugin):
314
301
  "default_api_version",
315
302
  "from_typespec",
316
303
  "flavor",
317
- "company_name",
318
304
  "emit_cross_language_definition_file",
319
305
  ]
320
306
  return {f: getattr(self.options_retriever, f) for f in flags}
@@ -5,12 +5,36 @@
5
5
  # --------------------------------------------------------------------------
6
6
 
7
7
  DEFAULT_HEADER_TEXT = (
8
- "Copyright (c) {company_name} Corporation. All rights reserved.\n"
8
+ "Copyright (c) Microsoft Corporation. All rights reserved.\n"
9
9
  "Licensed under the MIT License. See License.txt in the project root for license information.\n"
10
- "Code generated by {company_name} (R) Python Code Generator.\n"
10
+ "Code generated by Microsoft (R) Python Code Generator.\n"
11
11
  "Changes may cause incorrect behavior and will be lost if the code is regenerated."
12
12
  )
13
13
 
14
+ DEFAULT_LICENSE_DESCRIPTION = (
15
+ "Copyright (c) Microsoft Corporation.\n"
16
+ "\n"
17
+ "MIT License\n"
18
+ "\n"
19
+ "Permission is hereby granted, free of charge, to any person obtaining a copy\n"
20
+ "of this software and associated documentation files (the \"Software\"), to deal\n"
21
+ "in the Software without restriction, including without limitation the rights\n"
22
+ "to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n"
23
+ "copies of the Software, and to permit persons to whom the Software is\n"
24
+ "furnished to do so, subject to the following conditions:\n"
25
+ "\n"
26
+ "The above copyright notice and this permission notice shall be included in all\n"
27
+ "copies or substantial portions of the Software.\n"
28
+ "\n"
29
+ "THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n"
30
+ "IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n"
31
+ "FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n"
32
+ "AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n"
33
+ "LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n"
34
+ "OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n"
35
+ "SOFTWARE."
36
+ )
37
+
14
38
  SWAGGER_PACKAGE_MODE = ["mgmtplane", "dataplane"] # for backward compatibility
15
39
  TYPESPEC_PACKAGE_MODE = ["azure-mgmt", "azure-dataplane", "generic"]
16
40
  VALID_PACKAGE_MODE = SWAGGER_PACKAGE_MODE + TYPESPEC_PACKAGE_MODE
@@ -13,6 +13,7 @@ from .client import Client
13
13
  from .request_builder import RequestBuilder, OverloadedRequestBuilder
14
14
  from .operation_group import OperationGroup
15
15
  from .utils import NamespaceType
16
+ from .._utils import DEFAULT_HEADER_TEXT, DEFAULT_LICENSE_DESCRIPTION
16
17
 
17
18
 
18
19
  def _is_legacy(options) -> bool:
@@ -406,3 +407,35 @@ class CodeModel: # pylint: disable=too-many-public-methods, disable=too-many-in
406
407
  @property
407
408
  def is_tsp(self) -> bool:
408
409
  return self.options.get("tsp_file") is not None
410
+
411
+ @property
412
+ def license_header(self) -> str:
413
+ if self.yaml_data.get("licenseInfo") or not self.is_azure_flavor:
414
+ # typespec unbranded case and azure case with custom license
415
+ license_header = self.yaml_data.get("licenseInfo", {}).get("header", "")
416
+ else:
417
+ # typespec azure case without custom license and swagger case
418
+ license_header = self.options.get("header_text", DEFAULT_HEADER_TEXT)
419
+ if license_header:
420
+ license_header = license_header.replace("\n", "\n# ")
421
+ license_header = (
422
+ "# --------------------------------------------------------------------------\n# " + license_header
423
+ )
424
+ license_header += "\n# --------------------------------------------------------------------------"
425
+ return license_header
426
+
427
+ @property
428
+ def license_description(self) -> str:
429
+ if self.yaml_data.get("licenseInfo") or not self.is_azure_flavor:
430
+ # typespec unbranded case and azure case with custom license
431
+ return self.yaml_data.get("licenseInfo", {}).get("description", "")
432
+ # typespec azure case without custom license and swagger case
433
+ return DEFAULT_LICENSE_DESCRIPTION
434
+
435
+ @property
436
+ def company_name(self) -> str:
437
+ if self.yaml_data.get("licenseInfo") or not self.is_azure_flavor:
438
+ # typespec unbranded case and azure case with custom license
439
+ return self.yaml_data.get("licenseInfo", {}).get("company", "")
440
+ # typespec azure case without custom license and swagger case
441
+ return "Microsoft Corporation"
@@ -48,17 +48,20 @@ class BearerTokenCredentialPolicyType(_CredentialPolicyBaseType):
48
48
  yaml_data: Dict[str, Any],
49
49
  code_model: "CodeModel",
50
50
  credential_scopes: List[str],
51
+ flows: Optional[Dict[str, Any]] = None,
51
52
  ) -> None:
52
53
  super().__init__(yaml_data, code_model)
53
54
  self.credential_scopes = credential_scopes
55
+ self.flows = flows
54
56
 
55
57
  def call(self, async_mode: bool) -> str:
56
58
  policy_name = f"{'Async' if async_mode else ''}BearerTokenCredentialPolicy"
57
- return f"policies.{policy_name}(self.credential, *self.credential_scopes, **kwargs)"
59
+ auth_flows = f"auth_flows={self.flows}, " if self.flows else ""
60
+ return f"policies.{policy_name}(self.credential, *self.credential_scopes, {auth_flows}**kwargs)"
58
61
 
59
62
  @classmethod
60
63
  def from_yaml(cls, yaml_data: Dict[str, Any], code_model: "CodeModel") -> "BearerTokenCredentialPolicyType":
61
- return cls(yaml_data, code_model, yaml_data["credentialScopes"])
64
+ return cls(yaml_data, code_model, yaml_data["credentialScopes"], yaml_data.get("flows"))
62
65
 
63
66
 
64
67
  class ARMChallengeAuthenticationPolicyType(BearerTokenCredentialPolicyType):
@@ -202,6 +202,8 @@ class JinjaSerializer(ReaderAndWriter):
202
202
  )
203
203
 
204
204
  package_files = _PACKAGE_FILES
205
+ if not self.code_model.license_description:
206
+ package_files.remove("LICENSE.jinja2")
205
207
  elif Path(self.code_model.options["package_mode"]).exists():
206
208
  env = Environment(
207
209
  loader=FileSystemLoader(str(Path(self.code_model.options["package_mode"]))),
@@ -273,7 +275,7 @@ class JinjaSerializer(ReaderAndWriter):
273
275
  if not "" in group_names:
274
276
  self.write_file(
275
277
  rest_path / Path("__init__.py"),
276
- self.code_model.options["license_header"],
278
+ self.code_model.license_header,
277
279
  )
278
280
 
279
281
  def _serialize_and_write_single_rest_layer(
@@ -2,7 +2,9 @@
2
2
  {% import 'operation_tools.jinja2' as op_tools %}
3
3
  {# actual template starts here #}
4
4
  # coding=utf-8
5
- {{ code_model.options['license_header'] }}
5
+ {% if code_model.license_header %}
6
+ {{ code_model.license_header }}
7
+ {% endif %}
6
8
 
7
9
  {{ imports }}
8
10
 
@@ -2,7 +2,9 @@
2
2
  {% import 'operation_tools.jinja2' as op_tools %}
3
3
  {# actual template starts here #}
4
4
  # coding=utf-8
5
- {{ code_model.options['license_header'] }}
5
+ {% if code_model.license_header %}
6
+ {{ code_model.license_header }}
7
+ {% endif %}
6
8
 
7
9
  {{ imports }}
8
10
 
@@ -1,5 +1,7 @@
1
1
  # coding=utf-8
2
- {{ code_model.options['license_header'] }}
2
+ {% if code_model.license_header %}
3
+ {{ code_model.license_header }}
4
+ {% endif %}
3
5
  import os
4
6
  import pytest
5
7
  from dotenv import load_dotenv
@@ -1,6 +1,8 @@
1
1
  {% import 'operation_tools.jinja2' as op_tools %}
2
2
  # coding=utf-8
3
- {{ code_model.options['license_header'] }}
3
+ {% if code_model.license_header %}
4
+ {{ code_model.license_header }}
5
+ {% endif %}
4
6
 
5
7
  from enum import Enum
6
8
  from {{ code_model.core_library }}{{ "" if code_model.is_azure_flavor else ".utils" }} import CaseInsensitiveEnumMeta
@@ -1,6 +1,8 @@
1
1
  {% import 'keywords.jinja2' as keywords %}
2
2
  # coding=utf-8
3
- {{ code_model.options['license_header'] }}
3
+ {% if code_model.license_header %}
4
+ {{ code_model.license_header }}
5
+ {% endif %}
4
6
  {{ keywords.path_type_checking_imports() }}
5
7
  {% if clients %}
6
8
  {% for client in clients %}
@@ -1,9 +1,7 @@
1
1
  # coding=utf-8
2
- # --------------------------------------------------------------------------
3
- # Copyright (c) {{ code_model.options["company_name"] }} Corporation. All rights reserved.
4
- # Licensed under the MIT License. See License.txt in the project root for
5
- # license information.
6
- # --------------------------------------------------------------------------
2
+ {% if code_model.license_header %}
3
+ {{ code_model.license_header }}
4
+ {% endif %}
7
5
  # pylint: disable=protected-access, broad-except
8
6
 
9
7
  import copy
@@ -1,6 +1,8 @@
1
1
  {% import 'operation_tools.jinja2' as op_tools %}
2
2
  # coding=utf-8
3
- {{ code_model.options['license_header'] }}
3
+ {% if code_model.license_header %}
4
+ {{ code_model.license_header }}
5
+ {% endif %}
4
6
  {% if serializer.global_pylint_disables() %}
5
7
  {{ serializer.global_pylint_disables() }}
6
8
  {% endif %}
@@ -1,6 +1,8 @@
1
1
  {% import 'keywords.jinja2' as keywords %}
2
2
  # coding=utf-8
3
- {{ code_model.options['license_header'] }}
3
+ {% if code_model.license_header %}
4
+ {{ code_model.license_header }}
5
+ {% endif %}
4
6
  {{ keywords.path_type_checking_imports() }}
5
7
  {% if schemas %}
6
8
 
@@ -2,7 +2,9 @@
2
2
  {% set operations_description = "async operations" if async_mode else "operations" %}
3
3
  {% set return_none_type_annotation = " -> None" if async_mode else "" %}
4
4
  # coding=utf-8
5
- {{ code_model.options['license_header'] }}
5
+ {% if code_model.license_header %}
6
+ {{ code_model.license_header }}
7
+ {% endif %}
6
8
  {{ imports }}
7
9
  {{ unset }}
8
10
  {% if code_model.options["builders_visibility"] == "embedded" and not async_mode %}
@@ -2,7 +2,9 @@
2
2
  {% import 'keywords.jinja2' as keywords %}
3
3
  {# actual template starts here #}
4
4
  # coding=utf-8
5
- {{ code_model.options['license_header'] }}
5
+ {% if code_model.license_header %}
6
+ {{ code_model.license_header }}
7
+ {% endif %}
6
8
  {{ keywords.path_type_checking_imports() }}
7
9
  {{ op_tools.serialize(operation_group_imports()) }}
8
10
  {{ keywords.patch_imports() }}
@@ -1,21 +1 @@
1
- Copyright (c) {{ code_model.options["company_name"] }} Corporation.
2
-
3
- MIT License
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ {{ code_model.license_description }}
@@ -1,6 +1,8 @@
1
1
  # coding=utf-8
2
- {{ license_header }}
3
- # coding: utf-8
2
+ {% if code_model.license_header %}
3
+ {{ code_model.license_header }}
4
+ {% endif %}
5
+
4
6
  {% if package_mode %}
5
7
 
6
8
  import os
@@ -32,7 +34,7 @@ with open(os.path.join(package_folder_path, "_version.py"), "r") as fd:
32
34
 
33
35
  if not version:
34
36
  raise RuntimeError("Cannot find version information")
35
- {% set description = "\"" + code_model.options["company_name"] + " {} Client Library for Python\".format(PACKAGE_PPRINT_NAME)" %}
37
+ {% set description = "\"" + code_model.company_name + " {} Client Library for Python\".format(PACKAGE_PPRINT_NAME)" %}
36
38
  {% set author_email = "azpysdkhelp@microsoft.com" %}
37
39
  {% set url = "https://github.com/Azure/azure-sdk-for-python/tree/main/sdk" %}
38
40
  {% else %}
@@ -52,7 +54,7 @@ setup(
52
54
  long_description=open("README.md", "r").read(),
53
55
  long_description_content_type="text/markdown",
54
56
  license="MIT License",
55
- author="{{ code_model.options["company_name"] }} Corporation",
57
+ author="{{ code_model.company_name }}",
56
58
  {% endif %}
57
59
  {% if code_model.is_azure_flavor %}
58
60
  author_email="{{ author_email }}",
@@ -1,7 +1,12 @@
1
- # ------------------------------------
2
- # Copyright (c) {{ code_model.options["company_name"] }} Corporation.
3
- # Licensed under the MIT License.
4
- # ------------------------------------
1
+ # coding=utf-8
2
+ {% if not code_model.is_azure_flavor %}
3
+ {{ code_model.license_header }}
4
+ {% else %}
5
+ # --------------------------------------------------------------------------
6
+ # Copyright (c) Microsoft Corporation. All rights reserved.
7
+ # Licensed under the MIT License. See License.txt in the project root for license information.
8
+ # --------------------------------------------------------------------------
9
+ {% endif %}
5
10
  """Customize generated code here.
6
11
 
7
12
  Follow our quickstart for examples: https://aka.ms/azsdk/python/dpcodegen/python/customize
@@ -1,6 +1,8 @@
1
1
  {% import 'operation_tools.jinja2' as op_tools %}
2
2
  # coding=utf-8
3
- {{ code_model.options['license_header'] }}
3
+ {% if code_model.license_header %}
4
+ {{ code_model.license_header }}
5
+ {% endif %}
4
6
  {{ imports }}
5
7
 
6
8
  {{ op_tools.declare_serializer(code_model) }}
@@ -1,5 +1,7 @@
1
1
  # coding=utf-8
2
- {{ code_model.options['license_header'] }}
2
+ {% if code_model.license_header %}
3
+ {{ code_model.license_header }}
4
+ {% endif %}
3
5
 
4
6
  {% for request_builder in request_builders %}
5
7
  from ._request_builders import {{ request_builder.name }}
@@ -1,7 +1,9 @@
1
1
  # coding=utf-8
2
2
  {% set aad_token = "DefaultAzureCredential" %}
3
3
  {% set azure_key = "AzureKeyCredential" %}
4
- {{ code_model.options['license_header'] }}
4
+ {% if code_model.license_header %}
5
+ {{ code_model.license_header }}
6
+ {% endif %}
5
7
 
6
8
  {{ imports }}
7
9
  """
@@ -1,28 +1,7 @@
1
- # --------------------------------------------------------------------------
2
- #
3
- # Copyright (c) {{ code_model.options["company_name"] }} Corporation. All rights reserved.
4
- #
5
- # The MIT License (MIT)
6
- #
7
- # Permission is hereby granted, free of charge, to any person obtaining a copy
8
- # of this software and associated documentation files (the ""Software""), to
9
- # deal in the Software without restriction, including without limitation the
10
- # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
11
- # sell copies of the Software, and to permit persons to whom the Software is
12
- # furnished to do so, subject to the following conditions:
13
- #
14
- # The above copyright notice and this permission notice shall be included in
15
- # all copies or substantial portions of the Software.
16
- #
17
- # THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
22
- # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
23
- # IN THE SOFTWARE.
24
- #
25
- # --------------------------------------------------------------------------
1
+ # coding=utf-8
2
+ {% if code_model.license_header %}
3
+ {{ code_model.license_header }}
4
+ {% endif %}
26
5
 
27
6
  # pyright: reportUnnecessaryTypeIgnoreComment=false
28
7
 
@@ -3,7 +3,9 @@
3
3
  {% set async = "async " if test.async_mode else "" %}
4
4
  {% set async_suffix = "_async" if test.async_mode else "" %}
5
5
  # coding=utf-8
6
- {{ code_model.options['license_header'] }}
6
+ {% if code_model.license_header %}
7
+ {{ code_model.license_header }}
8
+ {% endif %}
7
9
  import pytest
8
10
  {{ imports }}
9
11
 
@@ -1,5 +1,7 @@
1
1
  # coding=utf-8
2
- {{ code_model.options['license_header'] }}
2
+ {% if code_model.license_header %}
3
+ {{ code_model.license_header }}
4
+ {% endif %}
3
5
  {{ imports }}
4
6
 
5
7
  {% for test_name in test_names %}
@@ -1,5 +1,7 @@
1
1
  # coding=utf-8
2
- {{ code_model.options['license_header'] }}
2
+ {% if code_model.license_header %}
3
+ {{ code_model.license_header }}
4
+ {% endif %}
3
5
 
4
6
  {{ imports }}
5
7
  {% for nu in code_model.named_unions %}
@@ -1,4 +1,6 @@
1
- {{ code_model.options['license_header'] }}
1
+ {% if code_model.license_header %}
2
+ {{ code_model.license_header }}
3
+ {% endif %}
2
4
  import functools
3
5
 
4
6
  def api_version_validation(**kwargs):
@@ -1,5 +1,7 @@
1
1
  {% import 'keywords.jinja2' as keywords with context %}
2
- {{ code_model.options['license_header'] }}
2
+ {% if code_model.license_header %}
3
+ {{ code_model.license_header }}
4
+ {% endif %}
3
5
 
4
6
  {{ imports }}
5
7
 
@@ -1,4 +1,6 @@
1
1
  # coding=utf-8
2
- {{ code_model.options['license_header'] }}
2
+ {% if code_model.license_header %}
3
+ {{ code_model.license_header }}
4
+ {% endif %}
3
5
 
4
6
  VERSION = "{{ code_model.options['package_version'] }}"
@@ -4,8 +4,8 @@
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
6
  import pytest
7
- from azurecore.lro.rpc.aio import RpcClient
8
- from azurecore.lro.rpc import models
7
+ from specs.azure.core.lro.rpc.aio import RpcClient
8
+ from specs.azure.core.lro.rpc import models
9
9
 
10
10
 
11
11
  @pytest.fixture
@@ -4,7 +4,7 @@
4
4
  # license information.
5
5
  # --------------------------------------------------------------------------
6
6
  import pytest
7
- from azurecore.lro.rpc import RpcClient, models
7
+ from specs.azure.core.lro.rpc import RpcClient, models
8
8
 
9
9
 
10
10
  @pytest.fixture
@@ -9,7 +9,7 @@ azure-mgmt-core==1.3.2
9
9
  -e ./generated/azure-client-generator-core-flatten-property
10
10
  -e ./generated/azure-core-basic
11
11
  -e ./generated/azure-core-scalar
12
- -e ./generated/azurecore-lro-rpc
12
+ -e ./generated/azure-core-lro-rpc
13
13
  -e ./generated/azure-core-lro-standard
14
14
  -e ./generated/azure-core-model
15
15
  -e ./generated/azure-core-traits
@@ -46,6 +46,7 @@ azure-mgmt-core==1.3.2
46
46
  -e ./generated/server-versions-versioned
47
47
  -e ./generated/server-versions-not-versioned
48
48
  -e ./generated/special-words
49
+ -e ./generated/streaming-jsonl
49
50
  -e ./generated/typetest-array
50
51
  -e ./generated/typetest-dictionary
51
52
  -e ./generated/typetest-enum-extensible
@@ -33,6 +33,10 @@ def token_credential(core_library):
33
33
  async def get_token(*scopes):
34
34
  return core_library.credentials.AccessToken(token="".join(scopes), expires_on=1800)
35
35
 
36
+ @staticmethod
37
+ async def get_token_info(*scopes, **kwargs):
38
+ return core_library.credentials.AccessTokenInfo(token="".join(scopes), expires_on=1800)
39
+
36
40
  return FakeCredential()
37
41
 
38
42
 
@@ -25,11 +25,11 @@ async def client_false():
25
25
 
26
26
  @pytest.mark.asyncio
27
27
  async def test_head_true(client_true):
28
- body = models_true.VisibilityModel(query_prop=123)
29
- assert await client_true.head_model(body) == True
28
+ body = models_true.VisibilityModel()
29
+ assert await client_true.head_model(body, query_prop=123) == True
30
30
 
31
31
 
32
32
  @pytest.mark.asyncio
33
33
  async def test_head_false(client_false):
34
- body = models_false.VisibilityModel(query_prop=123)
35
- assert await client_false.head_model(body) is None
34
+ body = models_false.VisibilityModel()
35
+ assert await client_false.head_model(body, query_prop=123) is None
@@ -0,0 +1,27 @@
1
+ # -------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Corporation. All rights reserved.
3
+ # Licensed under the MIT License. See License.txt in the project root for
4
+ # license information.
5
+ # --------------------------------------------------------------------------
6
+ import pytest
7
+
8
+ from streaming.jsonl.aio import JsonlClient
9
+
10
+
11
+ @pytest.fixture
12
+ async def client():
13
+ async with JsonlClient(endpoint="http://localhost:3000") as client:
14
+ yield client
15
+
16
+
17
+ JSONL = b'{"desc": "one"}\n{"desc": "two"}\n{"desc": "three"}'
18
+
19
+
20
+ @pytest.mark.asyncio
21
+ async def test_basic_send(client: JsonlClient):
22
+ await client.basic.send(JSONL)
23
+
24
+
25
+ @pytest.mark.asyncio
26
+ async def test_basic_recv(client: JsonlClient):
27
+ assert b"".join([d async for d in (await client.basic.receive())]) == JSONL
@@ -16,7 +16,7 @@ async def client():
16
16
 
17
17
  @pytest.mark.asyncio
18
18
  async def test_get_model(client):
19
- result = await client.get_model(models.VisibilityModel(query_prop=123))
19
+ result = await client.get_model(models.VisibilityModel(), query_prop=123)
20
20
  assert result == models.VisibilityModel(read_prop="abc")
21
21
 
22
22