polyapi-python 0.3.3.dev8__py3-none-any.whl → 0.3.3.dev10__py3-none-any.whl

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/execute.py CHANGED
@@ -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=data, headers=headers)
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:
polyapi/generate.py CHANGED
@@ -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
- generate_schemas(schemas)
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:
polyapi/parser.py CHANGED
@@ -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[str, Dict | None]:
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)
polyapi/poly_schemas.py CHANGED
@@ -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
- for spec in specs:
25
- create_schema(spec)
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(
polyapi/utils.py CHANGED
@@ -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.dev8
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) 2023 PolyAPI Inc.
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
@@ -9,11 +9,11 @@ polyapi/constants.py,sha256=sc-FnS0SngBLvSu1ZWMs0UCf9EYD1u1Yhfr-sZXGLns,607
9
9
  polyapi/deployables.py,sha256=WVcNNB6W5ZW_-ukf_kK3moRcnwIkC-O4te6vLepjcco,11936
10
10
  polyapi/error_handler.py,sha256=I_e0iz6VM23FLVQWJljxs2NGcl_OODbi43OcbnqBlp8,2398
11
11
  polyapi/exceptions.py,sha256=Zh7i7eCUhDuXEdUYjatkLFTeZkrx1BJ1P5ePgbJ9eIY,89
12
- polyapi/execute.py,sha256=kXnvlNQ7nz9cRlV2_5gXH09UCmyiDP5zi3wiAw0uDuk,1943
12
+ polyapi/execute.py,sha256=T9lXtiOz-JZTJgBKvJptA5_mz31qvYa6-O4NzM52mq4,2118
13
13
  polyapi/function_cli.py,sha256=htgmcx_dPmw4_5NKRgIivcwS7D8bkOsxCTOrJhzV3pU,3989
14
- polyapi/generate.py,sha256=IIbU4Kc8Ut-N3cPI1qzgV3M4r_GHi39dgU0ngpUY86Q,10473
15
- polyapi/parser.py,sha256=5YWkZX7XT3tR3_qlUmtSNwh6bU6cf2Xly2DclfuKUiE,20376
16
- polyapi/poly_schemas.py,sha256=KFVmpB047pWQaTkiCJ3A9sUTNplTS8JETon1Sm2lnQs,2969
14
+ polyapi/generate.py,sha256=6cD7h0HcwMbNxSwYbOPaGdw3znZm-GBGCbze840OnBk,11301
15
+ polyapi/parser.py,sha256=mdoh4pNq8pyiHE0-i6Coqj8frEXfBLRk6itpAXMrrgI,20373
16
+ polyapi/poly_schemas.py,sha256=T4kfZyfgVLiqLD28GmYNiHnrNx77J_HO4uzk8LUAhlo,3137
17
17
  polyapi/prepare.py,sha256=Q8CWV4kmZ2dbXYVsud34AgJkj5ymcQ_IcYhLuikc9yk,6659
18
18
  polyapi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
19
19
  polyapi/rendered_spec.py,sha256=uaNzBhP4cX7iGfKwzZv0dxMagWzsGeDr0cQYx_AyIhQ,2153
@@ -21,11 +21,11 @@ polyapi/schema.py,sha256=ZSzeUjpqigLvE4tFKB7y4AaZG-W5N5Z9wMH-F-vjMBU,4616
21
21
  polyapi/server.py,sha256=YXWxhYBx-hluwDQ8Jvfpy2s8ogz0GsNTMcZVNcP5ca8,2147
22
22
  polyapi/sync.py,sha256=PGdC0feBBjEVrF3d9EluW_OAxbWuzSrfh84czma8kWg,6476
23
23
  polyapi/typedefs.py,sha256=KniVl7vwcDOhgAJmHSgTJKkP0rKWvSLIPOGsWuf9jRU,2239
24
- polyapi/utils.py,sha256=9OKwhte_YdnkDectgnjSkVmcxazd8FyfoiKCQtlD63o,10194
24
+ polyapi/utils.py,sha256=K6QMKEf2fgmh3AswyNBADfv53sIOSAbXmGx2MaW5vy8,10261
25
25
  polyapi/variables.py,sha256=d36-trnfTL_8m2NkorMiImb4O3UrJbiFV38CHxV5i0A,4200
26
26
  polyapi/webhook.py,sha256=LWv28c2MLz_OKBI_Nn7WR4C-gs1SWgbdXsoxIIf-9UI,4886
27
- polyapi_python-0.3.3.dev8.dist-info/licenses/LICENSE,sha256=Hi0kDr56Dsy0uYIwNt4r9G7tI8x8miXRTlyvbeplCP8,1068
28
- polyapi_python-0.3.3.dev8.dist-info/METADATA,sha256=HmGz5_W8LXslbqwmvo3xb3cZRWc9n5aEjPHzCAzuCJk,5782
29
- polyapi_python-0.3.3.dev8.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
30
- polyapi_python-0.3.3.dev8.dist-info/top_level.txt,sha256=CEFllOnzowci_50RYJac-M54KD2IdAptFsayVVF_f04,8
31
- polyapi_python-0.3.3.dev8.dist-info/RECORD,,
27
+ polyapi_python-0.3.3.dev10.dist-info/licenses/LICENSE,sha256=6b_I7aPVp8JXhqQwdw7_B84Ca0S4JGjHj0sr_1VOdB4,1068
28
+ polyapi_python-0.3.3.dev10.dist-info/METADATA,sha256=zah6PlD1weUQ2WwxTyW6Bjfi38_u6GhiUoVEvP_eRkI,5783
29
+ polyapi_python-0.3.3.dev10.dist-info/WHEEL,sha256=CmyFI0kx5cdEMTLiONQRbGQwjIoR1aIYB7eCAQ4KPJ0,91
30
+ polyapi_python-0.3.3.dev10.dist-info/top_level.txt,sha256=CEFllOnzowci_50RYJac-M54KD2IdAptFsayVVF_f04,8
31
+ polyapi_python-0.3.3.dev10.dist-info/RECORD,,
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2023 PolyAPI Inc.
3
+ Copyright (c) 2025 PolyAPI Inc.
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal