polyapi-python 0.3.3.dev8__tar.gz → 0.3.3.dev10__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.
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/LICENSE +1 -1
- {polyapi_python-0.3.3.dev8/polyapi_python.egg-info → polyapi_python-0.3.3.dev10}/PKG-INFO +2 -2
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/execute.py +6 -1
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/generate.py +23 -2
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/parser.py +1 -1
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/poly_schemas.py +8 -3
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/utils.py +3 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10/polyapi_python.egg-info}/PKG-INFO +2 -2
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/pyproject.toml +2 -1
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/README.md +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/__init__.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/__main__.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/api.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/auth.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/cli.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/client.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/config.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/constants.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/deployables.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/error_handler.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/exceptions.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/function_cli.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/prepare.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/py.typed +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/rendered_spec.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/schema.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/server.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/sync.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/typedefs.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/variables.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi/webhook.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi_python.egg-info/SOURCES.txt +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi_python.egg-info/dependency_links.txt +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi_python.egg-info/requires.txt +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi_python.egg-info/top_level.txt +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/setup.cfg +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/tests/test_api.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/tests/test_auth.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/tests/test_deployables.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/tests/test_generate.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/tests/test_parser.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/tests/test_rendered_spec.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/tests/test_schema.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/tests/test_server.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/tests/test_utils.py +0 -0
- {polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/tests/test_variables.py +0 -0
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: polyapi-python
|
|
3
|
-
Version: 0.3.3.
|
|
3
|
+
Version: 0.3.3.dev10
|
|
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
|
|
7
7
|
|
|
8
|
-
Copyright (c)
|
|
8
|
+
Copyright (c) 2025 PolyAPI Inc.
|
|
9
9
|
|
|
10
10
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
11
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from typing import Dict
|
|
1
2
|
import requests
|
|
2
3
|
from requests import Response
|
|
3
4
|
from polyapi.config import get_api_key_and_url
|
|
@@ -7,10 +8,14 @@ from polyapi.exceptions import PolyApiException
|
|
|
7
8
|
def execute(function_type, function_id, data) -> Response:
|
|
8
9
|
""" execute a specific function id/type
|
|
9
10
|
"""
|
|
11
|
+
data_without_None = data
|
|
12
|
+
if isinstance(data, Dict):
|
|
13
|
+
data_without_None = {k: v for k, v in data.items() if v is not None}
|
|
14
|
+
|
|
10
15
|
api_key, api_url = get_api_key_and_url()
|
|
11
16
|
headers = {"Authorization": f"Bearer {api_key}"}
|
|
12
17
|
url = f"{api_url}/functions/{function_type}/{function_id}/execute"
|
|
13
|
-
resp = requests.post(url, json=
|
|
18
|
+
resp = requests.post(url, json=data_without_None, headers=headers)
|
|
14
19
|
# print(resp.status_code)
|
|
15
20
|
# print(resp.headers["content-type"])
|
|
16
21
|
if resp.status_code < 200 or resp.status_code >= 300:
|
|
@@ -95,6 +95,25 @@ def replace_poly_refs_in_functions(specs: List[SpecificationDto], schema_index):
|
|
|
95
95
|
return specs
|
|
96
96
|
|
|
97
97
|
|
|
98
|
+
def replace_poly_refs_in_schemas(specs: List[SchemaSpecDto], schema_index):
|
|
99
|
+
spec_idxs_to_remove = []
|
|
100
|
+
for idx, spec in enumerate(specs):
|
|
101
|
+
try:
|
|
102
|
+
spec["definition"] = resolve_poly_refs(spec["definition"], schema_index)
|
|
103
|
+
except Exception:
|
|
104
|
+
# print()
|
|
105
|
+
print(f"{spec['context']}.{spec['name']} (id: {spec['id']}) failed to resolve poly refs, skipping!")
|
|
106
|
+
spec_idxs_to_remove.append(idx)
|
|
107
|
+
|
|
108
|
+
# reverse the list so we pop off later indexes first
|
|
109
|
+
spec_idxs_to_remove.reverse()
|
|
110
|
+
|
|
111
|
+
for idx in spec_idxs_to_remove:
|
|
112
|
+
specs.pop(idx)
|
|
113
|
+
|
|
114
|
+
return specs
|
|
115
|
+
|
|
116
|
+
|
|
98
117
|
def parse_function_specs(
|
|
99
118
|
specs: List[SpecificationDto],
|
|
100
119
|
limit_ids: List[str] | None = None, # optional list of ids to limit to
|
|
@@ -184,10 +203,12 @@ def generate() -> None:
|
|
|
184
203
|
functions = parse_function_specs(specs, limit_ids=limit_ids)
|
|
185
204
|
|
|
186
205
|
schemas = get_schemas()
|
|
206
|
+
schema_index = build_schema_index(schemas)
|
|
187
207
|
if schemas:
|
|
188
|
-
|
|
208
|
+
schema_limit_ids: List[str] = [] # useful for narrowing down generation to a single function to debug
|
|
209
|
+
schemas = replace_poly_refs_in_schemas(schemas, schema_index)
|
|
210
|
+
generate_schemas(schemas, limit_ids=schema_limit_ids)
|
|
189
211
|
|
|
190
|
-
schema_index = build_schema_index(schemas)
|
|
191
212
|
functions = replace_poly_refs_in_functions(functions, schema_index)
|
|
192
213
|
|
|
193
214
|
if functions:
|
|
@@ -246,7 +246,7 @@ def _get_type_schema(json_type: str, python_type: str, schemas: List[Dict]):
|
|
|
246
246
|
return schema
|
|
247
247
|
|
|
248
248
|
|
|
249
|
-
def _get_type(expr: ast.expr | None, schemas: List[Dict]) -> Tuple[
|
|
249
|
+
def _get_type(expr: ast.expr | None, schemas: List[Dict]) -> Tuple[Any, Any, Any]:
|
|
250
250
|
if not expr:
|
|
251
251
|
return "any", "Any", None
|
|
252
252
|
python_type = get_python_type_from_ast(expr)
|
|
@@ -20,9 +20,14 @@ FALLBACK_SPEC_TEMPLATE = """class {name}(TypedDict, total=False):
|
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
22
|
|
|
23
|
-
def generate_schemas(specs: List[SchemaSpecDto]):
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
def generate_schemas(specs: List[SchemaSpecDto], limit_ids: List[str] = None):
|
|
24
|
+
if limit_ids:
|
|
25
|
+
for spec in specs:
|
|
26
|
+
if spec["id"] in limit_ids:
|
|
27
|
+
create_schema(spec)
|
|
28
|
+
else:
|
|
29
|
+
for spec in specs:
|
|
30
|
+
create_schema(spec)
|
|
26
31
|
|
|
27
32
|
|
|
28
33
|
def add_schema_file(
|
|
@@ -206,6 +206,9 @@ def parse_arguments(
|
|
|
206
206
|
arg_string += (
|
|
207
207
|
f" {a['name']}: {add_type_import_path(function_name, arg_type)}"
|
|
208
208
|
)
|
|
209
|
+
if not a["required"]:
|
|
210
|
+
arg_string += " = None"
|
|
211
|
+
|
|
209
212
|
description = a.get("description", "")
|
|
210
213
|
description = description.replace("\n", " ")
|
|
211
214
|
if description:
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: polyapi-python
|
|
3
|
-
Version: 0.3.3.
|
|
3
|
+
Version: 0.3.3.dev10
|
|
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
|
|
7
7
|
|
|
8
|
-
Copyright (c)
|
|
8
|
+
Copyright (c) 2025 PolyAPI Inc.
|
|
9
9
|
|
|
10
10
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
11
11
|
of this software and associated documentation files (the "Software"), to deal
|
|
@@ -3,7 +3,7 @@ requires = ["setuptools>=61.2", "wheel"]
|
|
|
3
3
|
|
|
4
4
|
[project]
|
|
5
5
|
name = "polyapi-python"
|
|
6
|
-
version = "0.3.3.
|
|
6
|
+
version = "0.3.3.dev10"
|
|
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 = [
|
|
@@ -33,3 +33,4 @@ exclude = ["polyapi/poly*", "polyapi/vari*", "polyapi/.config.env", "polyapi/cac
|
|
|
33
33
|
[tool.mypy]
|
|
34
34
|
# for now redef errors happen sometimes, we will clean this up in the future!
|
|
35
35
|
disable_error_code = "no-redef,name-defined"
|
|
36
|
+
implicit_optional = true
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi_python.egg-info/SOURCES.txt
RENAMED
|
File without changes
|
|
File without changes
|
{polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi_python.egg-info/requires.txt
RENAMED
|
File without changes
|
{polyapi_python-0.3.3.dev8 → polyapi_python-0.3.3.dev10}/polyapi_python.egg-info/top_level.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|