@typespec/http-client-python 0.9.1 → 0.9.2

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 (59) hide show
  1. package/dist/emitter/emitter.d.ts.map +1 -1
  2. package/dist/emitter/emitter.js +1 -2
  3. package/dist/emitter/emitter.js.map +1 -1
  4. package/dist/emitter/run-python3.js +1 -1
  5. package/dist/emitter/utils.d.ts +0 -1
  6. package/dist/emitter/utils.d.ts.map +1 -1
  7. package/dist/emitter/utils.js +2 -6
  8. package/dist/emitter/utils.js.map +1 -1
  9. package/emitter/src/emitter.ts +1 -4
  10. package/emitter/src/run-python3.ts +1 -1
  11. package/emitter/src/utils.ts +2 -7
  12. package/emitter/temp/tsconfig.tsbuildinfo +1 -1
  13. package/eng/scripts/Build-Packages.ps1 +7 -5
  14. package/eng/scripts/ci/format.ts +1 -1
  15. package/eng/scripts/ci/mypy.ini +1 -1
  16. package/eng/scripts/ci/pylintrc +1 -1
  17. package/eng/scripts/ci/pyrightconfig.json +1 -1
  18. package/eng/scripts/ci/regenerate.ts +39 -3
  19. package/eng/scripts/ci/run-ci.ts +1 -0
  20. package/eng/scripts/ci/run_pylint.py +1 -1
  21. package/eng/scripts/ci/utils.ts +5 -3
  22. package/eng/scripts/setup/__pycache__/{venvtools.cpython-38.pyc → venvtools.cpython-39.pyc} +0 -0
  23. package/eng/scripts/setup/build_pygen_wheel.py +3 -3
  24. package/eng/scripts/setup/install.py +2 -2
  25. package/eng/scripts/setup/prepare.py +2 -2
  26. package/generator/build/lib/pygen/codegen/__init__.py +0 -1
  27. package/generator/build/lib/pygen/codegen/_utils.py +1 -1
  28. package/generator/build/lib/pygen/codegen/models/imports.py +2 -13
  29. package/generator/build/lib/pygen/codegen/serializers/builder_serializer.py +1 -3
  30. package/generator/build/lib/pygen/codegen/templates/model_base.py.jinja2 +9 -13
  31. package/generator/build/lib/pygen/codegen/templates/packaging_templates/README.md.jinja2 +2 -2
  32. package/generator/build/lib/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +1 -2
  33. package/generator/component-detection-pip-report.json +70 -71
  34. package/generator/dist/pygen-0.1.0-py3-none-any.whl +0 -0
  35. package/generator/pygen/codegen/__init__.py +0 -1
  36. package/generator/pygen/codegen/_utils.py +1 -1
  37. package/generator/pygen/codegen/models/imports.py +2 -13
  38. package/generator/pygen/codegen/serializers/builder_serializer.py +1 -3
  39. package/generator/pygen/codegen/templates/model_base.py.jinja2 +9 -13
  40. package/generator/pygen/codegen/templates/packaging_templates/README.md.jinja2 +2 -2
  41. package/generator/pygen/codegen/templates/packaging_templates/setup.py.jinja2 +1 -2
  42. package/generator/pygen.egg-info/PKG-INFO +11 -2
  43. package/generator/setup.py +0 -1
  44. package/generator/test/generic_mock_api_tests/asynctests/test_encode_bytes_async.py +0 -7
  45. package/generator/test/generic_mock_api_tests/conftest.py +3 -3
  46. package/generator/test/generic_mock_api_tests/test_encode_bytes.py +0 -7
  47. package/generator/test/unittests/conftest.py +14 -0
  48. package/generator/test/unittests/requirements.txt +3 -0
  49. package/generator/test/unittests/test_enums.py +52 -0
  50. package/generator/test/unittests/test_name_converter.py +43 -0
  51. package/generator/test/unittests/test_optional_return_type.py +268 -0
  52. package/generator/test/unittests/test_parameter_ordering.py +104 -0
  53. package/generator/test/unittests/test_sort_schema.py +93 -0
  54. package/generator/test/unittests/tox.ini +5 -0
  55. package/package.json +1 -1
  56. /package/generator/test/{generic_mock_api_tests/data → data}/image.jpg +0 -0
  57. /package/generator/test/{generic_mock_api_tests/data → data}/image.png +0 -0
  58. /package/generator/test/{generic_mock_api_tests/unittests → unittests}/test_model_base_serialization.py +0 -0
  59. /package/generator/test/{generic_mock_api_tests/unittests → unittests}/test_model_base_xml_serialization.py +0 -0
@@ -0,0 +1,104 @@
1
+ # -------------------------------------------------------------------------
2
+ # Copyright (c) Microsoft Corporation. All rights reserved.
3
+ # Licensed under the MIT License. See License.txt in the project root for
4
+ # license information.
5
+ # --------------------------------------------------------------------------
6
+ from pygen.codegen.models import Parameter, AnyType, CodeModel, StringType
7
+ from pygen.codegen.models.parameter_list import ParameterList
8
+
9
+
10
+ def get_code_model():
11
+ return CodeModel(
12
+ {
13
+ "clients": [
14
+ {
15
+ "name": "client",
16
+ "namespace": "blah",
17
+ "moduleName": "blah",
18
+ "parameters": [],
19
+ "url": "",
20
+ "operationGroups": [],
21
+ }
22
+ ],
23
+ "namespace": "namespace",
24
+ },
25
+ options={
26
+ "show_send_request": True,
27
+ "builders_visibility": "public",
28
+ "show_operations": True,
29
+ "models_mode": "dpg",
30
+ "only_path_and_body_params_positional": True,
31
+ },
32
+ )
33
+
34
+
35
+ def get_parameter(name, required, default_value=None, type=None):
36
+ if not type:
37
+ type = AnyType(
38
+ yaml_data={"type": "any"},
39
+ code_model=get_code_model(),
40
+ )
41
+
42
+ return Parameter(
43
+ yaml_data={
44
+ "wireName": name,
45
+ "clientName": name,
46
+ "location": "path",
47
+ "clientDefaultValue": default_value,
48
+ "optional": not required,
49
+ "implementation": "Method",
50
+ "inOverload": False,
51
+ "inOverloaded": False,
52
+ },
53
+ code_model=get_code_model(),
54
+ type=type,
55
+ )
56
+
57
+
58
+ def test_sort_parameters_with_default_value_from_schema():
59
+ type = StringType(
60
+ yaml_data={"clientDefaultValue": "this_is_the_default", "type": "str"},
61
+ code_model=get_code_model(),
62
+ )
63
+ parameter_with_default_schema_value_required = get_parameter(
64
+ name="required_param_with_schema_default", required=True, type=type
65
+ )
66
+ required_parameter = get_parameter(name="required_parameter", required=True)
67
+
68
+ parameter_list = [parameter_with_default_schema_value_required, required_parameter]
69
+
70
+ assert [
71
+ required_parameter,
72
+ parameter_with_default_schema_value_required,
73
+ ] == ParameterList({}, get_code_model(), parameter_list).method
74
+
75
+
76
+ def test_sort_required_parameters():
77
+ required_default_value_parameter = get_parameter(
78
+ name="required_default_value_parameter", required=True, default_value="hello"
79
+ )
80
+ required_parameter = get_parameter(name="required_parameter", required=True)
81
+
82
+ parameter_list = [required_parameter, required_default_value_parameter]
83
+
84
+ assert [required_parameter, required_default_value_parameter] == ParameterList(
85
+ {}, get_code_model(), parameter_list
86
+ ).method
87
+
88
+ # switch around ordering to confirm
89
+
90
+ parameter_list = [required_default_value_parameter, required_parameter]
91
+
92
+ assert [required_parameter, required_default_value_parameter] == ParameterList(
93
+ {}, get_code_model(), parameter_list
94
+ ).method
95
+
96
+
97
+ def test_sort_required_and_non_required_parameters():
98
+ required_parameter = get_parameter(name="required_parameter", required=True)
99
+
100
+ optional_parameter = get_parameter(name="optional_parameter", required=False)
101
+
102
+ parameter_list = [optional_parameter, required_parameter]
103
+
104
+ assert [required_parameter, optional_parameter] == ParameterList({}, get_code_model(), parameter_list).method
@@ -0,0 +1,93 @@
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
+
7
+ from pygen.codegen.models import CodeModel, DPGModelType
8
+
9
+
10
+ def get_code_model():
11
+ return CodeModel(
12
+ {
13
+ "clients": [
14
+ {
15
+ "name": "client",
16
+ "namespace": "blah",
17
+ "moduleName": "blah",
18
+ "parameters": [],
19
+ "url": "",
20
+ "operationGroups": [],
21
+ }
22
+ ],
23
+ "namespace": "namespace",
24
+ },
25
+ options={
26
+ "show_send_request": True,
27
+ "builders_visibility": "public",
28
+ "show_operations": True,
29
+ "models_mode": "dpg",
30
+ },
31
+ )
32
+
33
+
34
+ def get_object_schema(name, base_models):
35
+ return DPGModelType(
36
+ yaml_data={"name": name, "type": "model", "snakeCaseName": name},
37
+ code_model=get_code_model(),
38
+ parents=base_models,
39
+ )
40
+
41
+
42
+ def test_pet_cat_kitten_horse_wood():
43
+ """Horse -> Pet <- Cat <- Kitten, Wood"""
44
+ code_model = get_code_model()
45
+ pet = get_object_schema("Pet", None)
46
+ horse = get_object_schema("Horse", [pet])
47
+ cat = get_object_schema("Cat", [pet])
48
+ kitten = get_object_schema("Kitten", [cat])
49
+ wood = get_object_schema("Wood", None)
50
+ code_model.model_types = [wood, horse, cat, pet, kitten]
51
+ code_model.sort_model_types()
52
+ sorted_model_types = code_model.model_types
53
+ # assert pet is before cat
54
+ assert sorted_model_types.index(pet) < sorted_model_types.index(cat)
55
+ # assert pet is before horse
56
+ assert sorted_model_types.index(pet) < sorted_model_types.index(horse)
57
+ # assert cat is before kitten
58
+ assert sorted_model_types.index(cat) < sorted_model_types.index(kitten)
59
+ # assert wood in list
60
+ assert wood in sorted_model_types
61
+
62
+
63
+ def test_multiple_inheritance():
64
+ """CarbonObject <- Person <- Teacher -> Employee, Person <- Kid
65
+ |
66
+ ObjectOnEarth
67
+ """
68
+ code_model = get_code_model()
69
+ carbon_object = get_object_schema("CarbonObject", [])
70
+ object_on_earth = get_object_schema("ObjectOnEarth", [])
71
+ person = get_object_schema("Person", [carbon_object, object_on_earth])
72
+ employee = get_object_schema("Employee", [])
73
+ teacher = get_object_schema("Teacher", [person, employee])
74
+ kid = get_object_schema("Kid", [person])
75
+
76
+ code_model.model_types = [
77
+ kid,
78
+ person,
79
+ teacher,
80
+ carbon_object,
81
+ employee,
82
+ object_on_earth,
83
+ ]
84
+ code_model.sort_model_types()
85
+ sorted_model_types = code_model.model_types
86
+ # assert carbon object and object on earth is in front of person
87
+ assert sorted_model_types.index(carbon_object) < sorted_model_types.index(person)
88
+ assert sorted_model_types.index(object_on_earth) < sorted_model_types.index(person)
89
+ # assert person and employee are in front of teacher
90
+ assert sorted_model_types.index(person) < sorted_model_types.index(teacher)
91
+ assert sorted_model_types.index(employee) < sorted_model_types.index(teacher)
92
+ # assert person is before kid
93
+ assert sorted_model_types.index(person) < sorted_model_types.index(kid)
@@ -0,0 +1,5 @@
1
+ [testenv:ci]
2
+ deps=
3
+ -r requirements.txt
4
+ commands =
5
+ pytest
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typespec/http-client-python",
3
- "version": "0.9.1",
3
+ "version": "0.9.2",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec emitter for Python SDKs",
6
6
  "homepage": "https://typespec.io",