@azure-tools/typespec-python 0.26.0 → 0.27.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.
package/dist/src/utils.js CHANGED
@@ -20,7 +20,7 @@ export function getImplementation(context, parameter) {
20
20
  }
21
21
  export function isAbstract(method) {
22
22
  var _a, _b;
23
- return ((_b = (_a = method.operation.bodyParam) === null || _a === void 0 ? void 0 : _a.contentTypes.length) !== null && _b !== void 0 ? _b : 0) > 1;
23
+ return ((_b = (_a = method.operation.bodyParam) === null || _a === void 0 ? void 0 : _a.contentTypes.length) !== null && _b !== void 0 ? _b : 0) > 1 && method.access !== "internal";
24
24
  }
25
25
  export function getDelimeterAndExplode(parameter) {
26
26
  if (parameter.type.kind !== "array")
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -54,7 +54,7 @@ class ReaderAndWriter:
54
54
  fd.write(file_content)
55
55
 
56
56
  def list_file(self) -> List[str]:
57
- return [str(f) for f in self.output_folder.glob("**/*") if f.is_file()]
57
+ return [str(f.relative_to(self.output_folder)) for f in self.output_folder.glob("**/*") if f.is_file()]
58
58
 
59
59
 
60
60
  class Plugin(ReaderAndWriter, ABC):
@@ -37,15 +37,14 @@ class BlackScriptPlugin(Plugin): # pylint: disable=abstract-method
37
37
  [
38
38
  Path(f)
39
39
  for f in self.list_file()
40
- if all(
41
- item not in f
42
- for item in (
43
- "__pycache__",
44
- "node_modules",
45
- ".tox",
46
- ".mypy_cache",
47
- )
40
+ if Path(f).parts[0]
41
+ not in (
42
+ "__pycache__",
43
+ "node_modules",
44
+ "venv",
45
+ "env",
48
46
  )
47
+ and not Path(f).parts[0].startswith(".")
49
48
  and Path(f).suffix == ".py"
50
49
  ],
51
50
  )
@@ -32,6 +32,10 @@ class UsageFlags(Enum):
32
32
  ApiVersionEnum = 8
33
33
  JsonMergePatch = 16
34
34
  MultipartFormData = 32
35
+ Spread = 64
36
+ Error = 128
37
+ Json = 256
38
+ Xml = 512
35
39
 
36
40
 
37
41
  def _get_properties(type: "ModelType", properties: List[Property]) -> List[Property]:
@@ -86,7 +90,7 @@ class ModelType( # pylint: disable=abstract-method
86
90
 
87
91
  @property
88
92
  def is_usage_output(self) -> bool:
89
- return self.usage == UsageFlags.Output.value
93
+ return self.usage & UsageFlags.Output.value
90
94
 
91
95
  @property
92
96
  def flattened_property(self) -> Optional[Property]:
@@ -58,6 +58,10 @@ OperationType = TypeVar(
58
58
  )
59
59
 
60
60
 
61
+ def _all_same(data: List[List[str]]) -> bool:
62
+ return len(data) > 1 and all(sorted(data[0]) == sorted(data[i]) for i in range(1, len(data)))
63
+
64
+
61
65
  def _json_serializable(content_type: str) -> bool:
62
66
  return bool(JSON_REGEXP.match(content_type.split(";")[0].strip().lower()))
63
67
 
@@ -905,6 +909,9 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]): # pylint: di
905
909
  builder: OperationType,
906
910
  response: Response,
907
911
  ) -> List[str]:
912
+ return self.response_headers(response) + self.response_deserialization(builder, response)
913
+
914
+ def response_headers(self, response: Response) -> List[str]:
908
915
  retval: List[str] = [
909
916
  (
910
917
  f"response_headers['{response_header.wire_name}']=self._deserialize("
@@ -914,6 +921,14 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]): # pylint: di
914
921
  ]
915
922
  if response.headers:
916
923
  retval.append("")
924
+ return retval
925
+
926
+ def response_deserialization(
927
+ self,
928
+ builder: OperationType,
929
+ response: Response,
930
+ ) -> List[str]:
931
+ retval: List[str] = []
917
932
  deserialize_code: List[str] = []
918
933
  stream_logic = True
919
934
  if builder.has_stream_response:
@@ -1018,13 +1033,34 @@ class _OperationSerializer(_BuilderBaseSerializer[OperationType]): # pylint: di
1018
1033
  retval.append("response_headers = {}")
1019
1034
  if builder.has_response_body or builder.any_response_has_headers:
1020
1035
  if len(builder.responses) > 1:
1036
+ status_codes, res_headers, res_deserialization = [], [], []
1021
1037
  for status_code in builder.success_status_codes:
1022
1038
  response = builder.get_response_from_status(status_code)
1023
1039
  if response.headers or response.type:
1040
+ status_codes.append(status_code)
1041
+ res_headers.append(self.response_headers(response))
1042
+ res_deserialization.append(self.response_deserialization(builder, response))
1043
+
1044
+ is_headers_same = _all_same(res_headers)
1045
+ is_deserialization_same = _all_same(res_deserialization)
1046
+ if is_deserialization_same:
1047
+ if is_headers_same:
1048
+ retval.extend(res_headers[0])
1049
+ retval.extend(res_deserialization[0])
1050
+ retval.append("")
1051
+ else:
1052
+ for status_code, headers in zip(status_codes, res_headers):
1053
+ if headers:
1054
+ retval.append(f"if response.status_code == {status_code}:")
1055
+ retval.extend([f" {line}" for line in headers])
1056
+ retval.append("")
1057
+ retval.extend(res_deserialization[0])
1058
+ retval.append("")
1059
+ else:
1060
+ for status_code, headers, deserialization in zip(status_codes, res_headers, res_deserialization):
1024
1061
  retval.append(f"if response.status_code == {status_code}:")
1025
- retval.extend(
1026
- [f" {line}" for line in self.response_headers_and_deserialization(builder, response)]
1027
- )
1062
+ retval.extend([f" {line}" for line in headers])
1063
+ retval.extend([f" {line}" for line in deserialization])
1028
1064
  retval.append("")
1029
1065
  else:
1030
1066
  retval.extend(self.response_headers_and_deserialization(builder, builder.responses[0]))
@@ -576,6 +576,7 @@ class Model(_MyMutableMapping):
576
576
  """
577
577
 
578
578
  result = {}
579
+ readonly_props = []
579
580
  if exclude_readonly:
580
581
  readonly_props = [p._rest_name for p in self._attr_to_rest_field.values() if _is_readonly(p)]
581
582
  for k, v in self.items():
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure-tools/typespec-python",
3
- "version": "0.26.0",
3
+ "version": "0.27.0",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec emitter for Python SDKs",
6
6
  "homepage": "https://github.com/Azure/autorest.python",