polyapi-python 0.3.4.dev1__tar.gz → 0.3.5.dev0__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.4.dev1/polyapi_python.egg-info → polyapi_python-0.3.5.dev0}/PKG-INFO +1 -1
  2. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/cli.py +9 -2
  3. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/config.py +1 -3
  4. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/function_cli.py +6 -1
  5. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/generate.py +12 -6
  6. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/rendered_spec.py +3 -2
  7. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/utils.py +6 -10
  8. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0/polyapi_python.egg-info}/PKG-INFO +1 -1
  9. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/pyproject.toml +1 -1
  10. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/LICENSE +0 -0
  11. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/README.md +0 -0
  12. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/__init__.py +0 -0
  13. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/__main__.py +0 -0
  14. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/api.py +0 -0
  15. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/auth.py +0 -0
  16. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/client.py +0 -0
  17. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/constants.py +0 -0
  18. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/deployables.py +0 -0
  19. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/error_handler.py +0 -0
  20. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/exceptions.py +0 -0
  21. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/execute.py +0 -0
  22. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/parser.py +0 -0
  23. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/poly_schemas.py +0 -0
  24. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/prepare.py +0 -0
  25. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/py.typed +0 -0
  26. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/schema.py +0 -0
  27. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/server.py +0 -0
  28. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/sync.py +0 -0
  29. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/typedefs.py +0 -0
  30. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/variables.py +0 -0
  31. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi/webhook.py +0 -0
  32. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi_python.egg-info/SOURCES.txt +0 -0
  33. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi_python.egg-info/dependency_links.txt +0 -0
  34. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi_python.egg-info/requires.txt +0 -0
  35. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/polyapi_python.egg-info/top_level.txt +0 -0
  36. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/setup.cfg +0 -0
  37. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/tests/test_api.py +0 -0
  38. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/tests/test_auth.py +0 -0
  39. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/tests/test_deployables.py +0 -0
  40. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/tests/test_generate.py +0 -0
  41. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/tests/test_parser.py +0 -0
  42. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/tests/test_rendered_spec.py +0 -0
  43. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/tests/test_schema.py +0 -0
  44. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/tests/test_server.py +0 -0
  45. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/tests/test_utils.py +0 -0
  46. {polyapi_python-0.3.4.dev1 → polyapi_python-0.3.5.dev0}/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.4.dev1
3
+ Version: 0.3.5.dev0
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
@@ -44,10 +44,13 @@ def execute_from_cli():
44
44
  ###########################################################################
45
45
  # Generate command
46
46
  generate_parser = subparsers.add_parser("generate", help="Generates Poly library")
47
+ generate_parser.add_argument("--no-types", action="store_true", help="Generate SDK without type definitions")
48
+ generate_parser.add_argument("--contexts", type=str, required=False, help="Contexts to generate")
47
49
 
48
50
  def generate_command(args):
49
51
  initialize_config()
50
- generate()
52
+ contexts = args.contexts.split(",") if args.contexts else None
53
+ generate(contexts=contexts, no_types=args.no_types)
51
54
 
52
55
  generate_parser.set_defaults(command=generate_command)
53
56
 
@@ -68,6 +71,7 @@ def execute_from_cli():
68
71
  fn_add_parser.add_argument("--logs", choices=["enabled", "disabled"], default=None, help="Enable or disable logs for the function.")
69
72
  fn_add_parser.add_argument("--execution-api-key", required=False, default="", help="API key for execution (for server functions only).")
70
73
  fn_add_parser.add_argument("--disable-ai", "--skip-generate", action="store_true", help="Pass --disable-ai skip AI generation of missing descriptions")
74
+ fn_add_parser.add_argument("--generate-contexts", type=str, help="Server function only – only include certain contexts to speed up function execution")
71
75
 
72
76
  def add_function(args):
73
77
  initialize_config()
@@ -79,6 +83,8 @@ def execute_from_cli():
79
83
  err = "You must specify `--server` or `--client`."
80
84
  elif logs_enabled and not args.server:
81
85
  err = "Option `logs` is only for server functions (--server)."
86
+ elif args.generate_contexts and not args.server:
87
+ err = "Option `generate-contexts` is only for server functions (--server)."
82
88
 
83
89
  if err:
84
90
  print_red("ERROR")
@@ -94,7 +100,8 @@ def execute_from_cli():
94
100
  server=args.server,
95
101
  logs_enabled=logs_enabled,
96
102
  generate=not args.disable_ai,
97
- execution_api_key=args.execution_api_key
103
+ execution_api_key=args.execution_api_key,
104
+ generate_contexts=args.generate_contexts
98
105
  )
99
106
 
100
107
  fn_add_parser.set_defaults(command=add_function)
@@ -3,7 +3,7 @@ import os
3
3
  import configparser
4
4
  from typing import Tuple
5
5
 
6
- from polyapi.utils import is_valid_polyapi_url, is_valid_uuid, print_green, print_yellow
6
+ from polyapi.utils import is_valid_polyapi_url, print_green, print_yellow
7
7
 
8
8
  # cached values
9
9
  API_KEY = None
@@ -78,8 +78,6 @@ def initialize_config(force=False):
78
78
  errors = []
79
79
  if not is_valid_polyapi_url(url):
80
80
  errors.append(f"{url} is not a valid Poly API Base URL")
81
- if not is_valid_uuid(key):
82
- errors.append(f"{key} is not a valid Poly App Key or User Key")
83
81
  if errors:
84
82
  print_yellow("\n".join(errors))
85
83
  sys.exit(1)
@@ -24,6 +24,7 @@ def function_add_or_update(
24
24
  client: bool,
25
25
  server: bool,
26
26
  logs_enabled: Optional[bool],
27
+ generate_contexts: Optional[str],
27
28
  generate: bool = True,
28
29
  execution_api_key: str = ""
29
30
  ):
@@ -59,6 +60,9 @@ def function_add_or_update(
59
60
  "logsEnabled": logs_enabled,
60
61
  }
61
62
 
63
+ if generate_contexts:
64
+ data["generateContexts"] = generate_contexts.split(",")
65
+
62
66
  if server and parsed["dependencies"]:
63
67
  print_yellow(
64
68
  "\nPlease note that deploying your functions will take a few minutes because it makes use of libraries other than polyapi."
@@ -87,7 +91,8 @@ def function_add_or_update(
87
91
  function_id = resp.json()["id"]
88
92
  print(f"Function ID: {function_id}")
89
93
  if generate:
90
- generate_library()
94
+ contexts=generate_contexts.split(",") if generate_contexts else None
95
+ generate_library(contexts=contexts)
91
96
  else:
92
97
  print("Error adding function.")
93
98
  print(resp.status_code)
@@ -2,7 +2,7 @@ import json
2
2
  import requests
3
3
  import os
4
4
  import shutil
5
- from typing import List, Tuple, cast
5
+ from typing import List, Optional, Tuple, cast
6
6
 
7
7
  from .auth import render_auth_function
8
8
  from .client import render_client_function
@@ -36,12 +36,17 @@ Unresolved schema, please add the following schema to complete it:
36
36
  path:'''
37
37
 
38
38
 
39
- def get_specs() -> List:
39
+ def get_specs(contexts=Optional[List[str]], no_types: bool = False) -> List:
40
40
  api_key, api_url = get_api_key_and_url()
41
41
  assert api_key
42
42
  headers = get_auth_headers(api_key)
43
43
  url = f"{api_url}/specs"
44
- resp = requests.get(url, headers=headers)
44
+ params = {"noTypes": str(no_types).lower()}
45
+
46
+ if contexts:
47
+ params["contexts"] = contexts
48
+
49
+ resp = requests.get(url, headers=headers, params=params)
45
50
  if resp.status_code == 200:
46
51
  return resp.json()
47
52
  else:
@@ -196,11 +201,12 @@ def remove_old_library():
196
201
  shutil.rmtree(path)
197
202
 
198
203
 
199
- def generate() -> None:
200
- print("Generating Poly Python SDK...", end="", flush=True)
204
+ def generate(contexts: Optional[List[str]], no_types: bool = False) -> None:
205
+ generate_msg = f"Generating Poly Python SDK for contexts ${contexts}..." if contexts else "Generating Poly Python SDK..."
206
+ print(generate_msg, end="", flush=True)
201
207
  remove_old_library()
202
208
 
203
- specs = get_specs()
209
+ specs = get_specs(no_types=no_types, contexts=contexts)
204
210
  cache_specs(specs)
205
211
 
206
212
  limit_ids: List[str] = [] # useful for narrowing down generation to a single function to debug
@@ -35,11 +35,12 @@ def update_rendered_spec(spec: SpecificationDto):
35
35
  assert resp.status_code == 201, (resp.text, resp.status_code)
36
36
 
37
37
 
38
- def _get_spec(spec_id: str) -> Optional[SpecificationDto]:
38
+ def _get_spec(spec_id: str, no_types: bool = False) -> Optional[SpecificationDto]:
39
39
  api_key, base_url = get_api_key_and_url()
40
40
  url = f"{base_url}/specs"
41
41
  headers = {"Authorization": f"Bearer {api_key}"}
42
- resp = requests.get(url, headers=headers)
42
+ params = {"noTypes": str(no_types).lower()}
43
+ resp = requests.get(url, headers=headers, params=params)
43
44
  if resp.status_code == 200:
44
45
  specs = resp.json()
45
46
  for spec in specs:
@@ -2,6 +2,7 @@ import keyword
2
2
  import re
3
3
  import os
4
4
  import uuid
5
+ from urllib.parse import urlparse
5
6
  from typing import Tuple, List
6
7
  from colorama import Fore, Style
7
8
  from polyapi.constants import BASIC_PYTHON_TYPES
@@ -261,21 +262,16 @@ valid_subdomains = ["na[1-2]", "eu[1-2]", "dev"]
261
262
 
262
263
 
263
264
  def is_valid_polyapi_url(_url: str):
265
+ # in dev allow localhost (and 127.0.0.1) over http *or* https
266
+ parsed = urlparse(_url)
267
+ if parsed.scheme in ("http", "https") and parsed.hostname in ("localhost", "127.0.0.1"):
268
+ return True
269
+
264
270
  # Join the subdomains into a pattern
265
271
  subdomain_pattern = "|".join(valid_subdomains)
266
272
  pattern = rf"^https://({subdomain_pattern})\.polyapi\.io$"
267
273
  return re.match(pattern, _url) is not None
268
274
 
269
-
270
- def is_valid_uuid(uuid_string, version=4):
271
- try:
272
- uuid_obj = uuid.UUID(uuid_string, version=version)
273
- except ValueError:
274
- return False
275
-
276
- return str(uuid_obj) == uuid_string
277
-
278
-
279
275
  def return_type_already_defined_in_args(return_type_name: str, args_def: str) -> bool:
280
276
  """
281
277
  Checks if the return_type_name preceded optionally by 'class ' and followed by ' =' exists in args_def.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: polyapi-python
3
- Version: 0.3.4.dev1
3
+ Version: 0.3.5.dev0
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.4.dev1"
6
+ version = "0.3.5.dev0"
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 = [