polyapi-python 0.3.9.dev7__tar.gz → 0.3.9.dev8__tar.gz

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 (46) hide show
  1. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/PKG-INFO +1 -1
  2. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/generate.py +40 -4
  3. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi_python.egg-info/PKG-INFO +1 -1
  4. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/pyproject.toml +1 -1
  5. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/LICENSE +0 -0
  6. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/README.md +0 -0
  7. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/__init__.py +0 -0
  8. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/__main__.py +0 -0
  9. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/api.py +0 -0
  10. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/auth.py +0 -0
  11. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/cli.py +0 -0
  12. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/client.py +0 -0
  13. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/config.py +0 -0
  14. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/constants.py +0 -0
  15. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/deployables.py +0 -0
  16. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/error_handler.py +0 -0
  17. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/exceptions.py +0 -0
  18. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/execute.py +0 -0
  19. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/function_cli.py +0 -0
  20. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/parser.py +0 -0
  21. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/poly_schemas.py +0 -0
  22. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/prepare.py +0 -0
  23. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/py.typed +0 -0
  24. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/rendered_spec.py +0 -0
  25. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/schema.py +0 -0
  26. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/server.py +0 -0
  27. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/sync.py +0 -0
  28. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/typedefs.py +0 -0
  29. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/utils.py +0 -0
  30. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/variables.py +0 -0
  31. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi/webhook.py +0 -0
  32. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi_python.egg-info/SOURCES.txt +0 -0
  33. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi_python.egg-info/dependency_links.txt +0 -0
  34. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi_python.egg-info/requires.txt +0 -0
  35. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/polyapi_python.egg-info/top_level.txt +0 -0
  36. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/setup.cfg +0 -0
  37. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/tests/test_api.py +0 -0
  38. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/tests/test_auth.py +0 -0
  39. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/tests/test_deployables.py +0 -0
  40. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/tests/test_generate.py +0 -0
  41. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/tests/test_parser.py +0 -0
  42. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/tests/test_rendered_spec.py +0 -0
  43. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/tests/test_schema.py +0 -0
  44. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/tests/test_server.py +0 -0
  45. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/tests/test_utils.py +0 -0
  46. {polyapi_python-0.3.9.dev7 → polyapi_python-0.3.9.dev8}/tests/test_variables.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: polyapi-python
3
- Version: 0.3.9.dev7
3
+ Version: 0.3.9.dev8
4
4
  Summary: The Python Client for PolyAPI, the IPaaS by Developers for Developers
5
5
  Author-email: Dan Fellin <dan@polyapi.io>
6
6
  License: MIT License
@@ -4,6 +4,8 @@ import os
4
4
  import shutil
5
5
  import logging
6
6
  import tempfile
7
+
8
+ from copy import deepcopy
7
9
  from typing import Any, List, Optional, Tuple, cast
8
10
 
9
11
  from .auth import render_auth_function
@@ -136,19 +138,22 @@ def parse_function_specs(
136
138
  limit_ids: List[str] | None = None, # optional list of ids to limit to
137
139
  ) -> List[SpecificationDto]:
138
140
  functions = []
139
- for spec in specs:
140
- if not spec:
141
+ for raw_spec in specs:
142
+ if not raw_spec:
141
143
  continue
142
144
 
143
145
  # For no_types mode, we might not have function data, but we still want to include the spec
144
146
  # if it's a supported function type
145
- if spec["type"] not in SUPPORTED_FUNCTION_TYPES:
147
+ if raw_spec["type"] not in SUPPORTED_FUNCTION_TYPES:
146
148
  continue
147
149
 
148
150
  # Skip if we have a limit and this spec is not in it
149
- if limit_ids and spec.get("id") not in limit_ids:
151
+ if limit_ids and raw_spec.get("id") not in limit_ids:
150
152
  continue
151
153
 
154
+ # Should really be fixed in specs api, but for now handle json strings in arg schemas
155
+ spec = normalize_args_schema(raw_spec)
156
+
152
157
  # For customFunction, check language if we have function data
153
158
  if spec["type"] == "customFunction":
154
159
  if spec.get("language") and spec["language"] != "python":
@@ -286,6 +291,37 @@ def generate_from_cache() -> None:
286
291
  )
287
292
 
288
293
 
294
+ def _parse_arg_schema(value: Any) -> Any:
295
+ if isinstance(value, str):
296
+ text = value.strip()
297
+ if text and text[0] in "{[":
298
+ try:
299
+ return json.loads(text)
300
+ except json.JSONDecodeError:
301
+ logging.warning("Could not parse function argument schema (leaving as str): %s", text[:200])
302
+ return value
303
+
304
+
305
+ def normalize_args_schema(
306
+ raw_spec: SpecificationDto
307
+ ) -> SpecificationDto:
308
+ spec = deepcopy(raw_spec)
309
+
310
+ function_block = spec.get("function")
311
+ if not isinstance(function_block, dict):
312
+ return spec
313
+ arguments_block = function_block.get("arguments")
314
+ if not isinstance(arguments_block, list):
315
+ return spec
316
+
317
+ for argument in arguments_block:
318
+ arg_type = argument.get("type")
319
+ if isinstance(arg_type, dict) and "schema" in arg_type:
320
+ arg_type["schema"] = _parse_arg_schema(arg_type["schema"])
321
+
322
+ return spec
323
+
324
+
289
325
  def generate(contexts: Optional[List[str]] = None, names: Optional[List[str]] = None, function_ids: Optional[List[str]] = None, no_types: bool = False) -> None:
290
326
  generate_msg = f"Generating Poly Python SDK for contexts ${contexts}..." if contexts else "Generating Poly Python SDK..."
291
327
  print(generate_msg, end="", flush=True)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: polyapi-python
3
- Version: 0.3.9.dev7
3
+ Version: 0.3.9.dev8
4
4
  Summary: The Python Client for PolyAPI, the IPaaS by Developers for Developers
5
5
  Author-email: Dan Fellin <dan@polyapi.io>
6
6
  License: MIT License
@@ -3,7 +3,7 @@ requires = ["setuptools>=61.2", "wheel"]
3
3
 
4
4
  [project]
5
5
  name = "polyapi-python"
6
- version = "0.3.9.dev7"
6
+ version = "0.3.9.dev8"
7
7
  description = "The Python Client for PolyAPI, the IPaaS by Developers for Developers"
8
8
  authors = [{ name = "Dan Fellin", email = "dan@polyapi.io" }]
9
9
  dependencies = [