polyapi-python 0.1.0.dev1__py3-none-any.whl → 0.1.0.dev3__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/api.py +13 -25
- polyapi/execute.py +22 -0
- polyapi/generate.py +7 -19
- polyapi/schema.py +8 -1
- polyapi/typedefs.py +18 -2
- polyapi/utils.py +15 -1
- polyapi/variables.py +80 -63
- {polyapi_python-0.1.0.dev1.dist-info → polyapi_python-0.1.0.dev3.dist-info}/METADATA +10 -1
- polyapi_python-0.1.0.dev3.dist-info/RECORD +20 -0
- polyapi_python-0.1.0.dev1.dist-info/RECORD +0 -20
- {polyapi_python-0.1.0.dev1.dist-info → polyapi_python-0.1.0.dev3.dist-info}/LICENSE +0 -0
- {polyapi_python-0.1.0.dev1.dist-info → polyapi_python-0.1.0.dev3.dist-info}/WHEEL +0 -0
- {polyapi_python-0.1.0.dev1.dist-info → polyapi_python-0.1.0.dev3.dist-info}/top_level.txt +0 -0
polyapi/api.py
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from typing import Any, Dict, List, Tuple
|
|
3
3
|
|
|
4
|
-
from
|
|
5
|
-
|
|
6
|
-
from polyapi.constants import BASIC_PYTHON_TYPES, JSONSCHEMA_TO_PYTHON_TYPE_MAP
|
|
4
|
+
from polyapi.constants import BASIC_PYTHON_TYPES
|
|
7
5
|
from polyapi.typedefs import PropertySpecification, PropertyType
|
|
8
|
-
from polyapi.utils import
|
|
9
|
-
from polyapi.schema import generate_schema_types, clean_title
|
|
6
|
+
from polyapi.utils import add_import_to_init, camelCase, init_the_init
|
|
7
|
+
from polyapi.schema import generate_schema_types, clean_title, map_primitive_types
|
|
10
8
|
|
|
11
9
|
# map the function type from the spec type to the function execute type
|
|
12
10
|
TEMPLATE_FUNCTION_TYPE_MAP = {
|
|
@@ -49,21 +47,16 @@ def {function_name}(
|
|
|
49
47
|
"""
|
|
50
48
|
|
|
51
49
|
|
|
52
|
-
def _map_primitive_types(type_: str) -> str:
|
|
53
|
-
# Define your mapping logic here
|
|
54
|
-
return JSONSCHEMA_TO_PYTHON_TYPE_MAP.get(type_, "Any")
|
|
55
|
-
|
|
56
|
-
|
|
57
50
|
def _get_type(type_spec: PropertyType) -> Tuple[str, str]:
|
|
58
51
|
if type_spec["kind"] == "plain":
|
|
59
52
|
value = type_spec["value"]
|
|
60
53
|
if value.endswith("[]"):
|
|
61
|
-
primitive =
|
|
54
|
+
primitive = map_primitive_types(value[:-2])
|
|
62
55
|
return f"List[{primitive}]", ""
|
|
63
56
|
else:
|
|
64
|
-
return
|
|
57
|
+
return map_primitive_types(value), ""
|
|
65
58
|
elif type_spec["kind"] == "primitive":
|
|
66
|
-
return
|
|
59
|
+
return map_primitive_types(type_spec["type"]), ""
|
|
67
60
|
elif type_spec["kind"] == "array":
|
|
68
61
|
if type_spec.get("items"):
|
|
69
62
|
items = type_spec["items"]
|
|
@@ -143,9 +136,10 @@ def _add_type_import_path(function_name: str, arg: str) -> str:
|
|
|
143
136
|
return arg
|
|
144
137
|
else:
|
|
145
138
|
if '"' in sub:
|
|
146
|
-
|
|
147
|
-
else:
|
|
139
|
+
sub = sub.replace('"', "")
|
|
148
140
|
return f'List["_{function_name}.{camelCase(sub)}"]'
|
|
141
|
+
else:
|
|
142
|
+
return f'List[_{function_name}.{camelCase(sub)}]'
|
|
149
143
|
|
|
150
144
|
return f'_{function_name}.{camelCase(arg)}'
|
|
151
145
|
|
|
@@ -223,8 +217,7 @@ def add_function_file(
|
|
|
223
217
|
return_type: Dict[str, Any],
|
|
224
218
|
):
|
|
225
219
|
# first lets add the import to the __init__
|
|
226
|
-
|
|
227
|
-
_init_the_init(init_path)
|
|
220
|
+
init_the_init(full_path)
|
|
228
221
|
|
|
229
222
|
func_str, func_type_defs = render_function(
|
|
230
223
|
function_type,
|
|
@@ -235,6 +228,7 @@ def add_function_file(
|
|
|
235
228
|
return_type,
|
|
236
229
|
)
|
|
237
230
|
|
|
231
|
+
init_path = os.path.join(full_path, "__init__.py")
|
|
238
232
|
with open(init_path, "a") as f:
|
|
239
233
|
f.write(f"\n\nfrom . import _{function_name}\n\n{func_str}")
|
|
240
234
|
|
|
@@ -244,12 +238,6 @@ def add_function_file(
|
|
|
244
238
|
f.write(func_type_defs)
|
|
245
239
|
|
|
246
240
|
|
|
247
|
-
def _init_the_init(init_path: str) -> None:
|
|
248
|
-
if not os.path.exists(init_path):
|
|
249
|
-
with open(init_path, "w") as f:
|
|
250
|
-
f.write("from typing import List, Dict, Any, TypedDict\nfrom polyapi.execute import execute\nfrom polyapi.exceptions import PolyApiException\n")
|
|
251
|
-
|
|
252
|
-
|
|
253
241
|
def create_function(
|
|
254
242
|
function_type: str,
|
|
255
243
|
path: str,
|
|
@@ -281,8 +269,8 @@ def create_function(
|
|
|
281
269
|
# append to __init__.py file if nested folders
|
|
282
270
|
next = folders[idx + 1] if idx + 2 < len(folders) else ""
|
|
283
271
|
if next:
|
|
284
|
-
|
|
285
|
-
|
|
272
|
+
init_the_init(full_path)
|
|
273
|
+
add_import_to_init(full_path, next)
|
|
286
274
|
|
|
287
275
|
|
|
288
276
|
def generate_api(api_functions: List) -> None:
|
polyapi/execute.py
CHANGED
|
@@ -9,6 +9,28 @@ def execute(function_type, function_id, data) -> Response:
|
|
|
9
9
|
headers = {"Authorization": f"Bearer {api_key}"}
|
|
10
10
|
url = f"{api_url}/functions/{function_type}/{function_id}/execute"
|
|
11
11
|
resp = requests.post(url, json=data, headers=headers)
|
|
12
|
+
if resp.status_code != 200 and resp.status_code != 201:
|
|
13
|
+
error_content = resp.content.decode("utf-8", errors="ignore")
|
|
14
|
+
raise PolyApiException(f"{resp.status_code}: {error_content}")
|
|
15
|
+
return resp
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def variable_get(variable_id: str) -> Response:
|
|
19
|
+
api_key, base_url = get_api_key_and_url()
|
|
20
|
+
headers = {"Authorization": f"Bearer {api_key}"}
|
|
21
|
+
url = f"{base_url}/variables/{variable_id}/value"
|
|
22
|
+
resp = requests.get(url, headers=headers)
|
|
23
|
+
if resp.status_code != 200 and resp.status_code != 201:
|
|
24
|
+
error_content = resp.content.decode("utf-8", errors="ignore")
|
|
25
|
+
raise PolyApiException(f"{resp.status_code}: {error_content}")
|
|
26
|
+
return resp
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def variable_update(variable_id: str, value) -> Response:
|
|
30
|
+
api_key, base_url = get_api_key_and_url()
|
|
31
|
+
headers = {"Authorization": f"Bearer {api_key}"}
|
|
32
|
+
url = f"{base_url}/variables/{variable_id}/value"
|
|
33
|
+
resp = requests.patch(url, data={"value": value}, headers=headers)
|
|
12
34
|
if resp.status_code != 200 and resp.status_code != 201:
|
|
13
35
|
error_content = resp.content.decode("utf-8", errors="ignore")
|
|
14
36
|
raise PolyApiException(f"{resp.status_code}: {error_content}")
|
polyapi/generate.py
CHANGED
|
@@ -4,7 +4,7 @@ import os
|
|
|
4
4
|
import shutil
|
|
5
5
|
from typing import Any, Dict, List, Tuple
|
|
6
6
|
|
|
7
|
-
from .typedefs import PropertySpecification
|
|
7
|
+
from .typedefs import PropertySpecification, VariableSpecDto
|
|
8
8
|
from .utils import get_auth_headers
|
|
9
9
|
from .api import generate_api
|
|
10
10
|
from .variables import generate_variables
|
|
@@ -81,31 +81,19 @@ def get_functions_and_parse():
|
|
|
81
81
|
return functions
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
def
|
|
85
|
-
raw = get_variables()
|
|
86
|
-
variables = parse_variables(raw)
|
|
87
|
-
return variables
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
def get_variables():
|
|
84
|
+
def get_variables() -> List[VariableSpecDto]:
|
|
91
85
|
api_key, api_url = get_api_key_and_url()
|
|
92
86
|
headers = {"Authorization": f"Bearer {api_key}"}
|
|
93
|
-
|
|
87
|
+
# TODO do some caching so this and get_functions just do 1 function call
|
|
88
|
+
url = f"{api_url}/specs"
|
|
94
89
|
resp = requests.get(url, headers=headers)
|
|
95
90
|
if resp.status_code == 200:
|
|
96
|
-
|
|
91
|
+
specs = resp.json()
|
|
92
|
+
return [spec for spec in specs if spec['type'] == "serverVariable"]
|
|
97
93
|
else:
|
|
98
94
|
raise NotImplementedError(resp.content)
|
|
99
95
|
|
|
100
96
|
|
|
101
|
-
def parse_variables(variables: List) -> List[Tuple[str, str, bool]]:
|
|
102
|
-
rv = []
|
|
103
|
-
for v in variables:
|
|
104
|
-
path = f"vari.{v['context']}.{v['name']}"
|
|
105
|
-
rv.append((path, v["id"], v["secret"]))
|
|
106
|
-
return rv
|
|
107
|
-
|
|
108
|
-
|
|
109
97
|
def remove_old_library():
|
|
110
98
|
currdir = os.path.dirname(os.path.abspath(__file__))
|
|
111
99
|
path = os.path.join(currdir, "poly")
|
|
@@ -131,7 +119,7 @@ def generate() -> None:
|
|
|
131
119
|
)
|
|
132
120
|
exit()
|
|
133
121
|
|
|
134
|
-
variables =
|
|
122
|
+
variables = get_variables()
|
|
135
123
|
if variables:
|
|
136
124
|
generate_variables(variables)
|
|
137
125
|
|
polyapi/schema.py
CHANGED
|
@@ -5,6 +5,8 @@ from jsonschema_gentypes import configuration
|
|
|
5
5
|
import tempfile
|
|
6
6
|
import json
|
|
7
7
|
|
|
8
|
+
from polyapi.constants import JSONSCHEMA_TO_PYTHON_TYPE_MAP
|
|
9
|
+
|
|
8
10
|
|
|
9
11
|
def _cleanup_input_for_gentypes(input_data: Dict):
|
|
10
12
|
""" cleanup input_data in place to make it more suitable for jsonschema_gentypes
|
|
@@ -83,4 +85,9 @@ def clean_title(title: str) -> str:
|
|
|
83
85
|
# certain reserved words cant be titles, let's replace them
|
|
84
86
|
if title == "List":
|
|
85
87
|
title = "List_"
|
|
86
|
-
return title
|
|
88
|
+
return title
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def map_primitive_types(type_: str) -> str:
|
|
92
|
+
# Define your mapping logic here
|
|
93
|
+
return JSONSCHEMA_TO_PYTHON_TYPE_MAP.get(type_, "Any")
|
polyapi/typedefs.py
CHANGED
|
@@ -32,6 +32,22 @@ class SpecificationDto(TypedDict):
|
|
|
32
32
|
context: str
|
|
33
33
|
name: str
|
|
34
34
|
description: str
|
|
35
|
+
# function is none if this is actually VariableSpecDto
|
|
35
36
|
function: FunctionSpecification | None
|
|
36
|
-
|
|
37
|
-
|
|
37
|
+
type: Literal['apiFunction', 'customFunction', 'serverFunction', 'authFunction', 'webhookHandle', 'serverVariable']
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
class VariableSpecification(TypedDict):
|
|
41
|
+
environmentId: str
|
|
42
|
+
value: Any
|
|
43
|
+
valueType: PropertyType
|
|
44
|
+
secret: bool
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
class VariableSpecDto(TypedDict):
|
|
48
|
+
id: str
|
|
49
|
+
context: str
|
|
50
|
+
name: str
|
|
51
|
+
description: str
|
|
52
|
+
variable: VariableSpecification
|
|
53
|
+
type: Literal['serverVariable']
|
polyapi/utils.py
CHANGED
|
@@ -2,7 +2,21 @@ import re
|
|
|
2
2
|
import os
|
|
3
3
|
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
# this string should be in every __init__ file.
|
|
6
|
+
# it contains all the imports needed for the function or variable code to run
|
|
7
|
+
CODE_IMPORTS = "from typing import List, Dict, Any, TypedDict\nfrom polyapi.execute import execute, variable_get, variable_update\n\n"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
def init_the_init(full_path: str) -> None:
|
|
11
|
+
init_path = os.path.join(full_path, "__init__.py")
|
|
12
|
+
if not os.path.exists(init_path):
|
|
13
|
+
with open(init_path, "w") as f:
|
|
14
|
+
f.write(CODE_IMPORTS)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def add_import_to_init(full_path: str, next: str) -> None:
|
|
18
|
+
init_the_init(full_path)
|
|
19
|
+
|
|
6
20
|
init_path = os.path.join(full_path, "__init__.py")
|
|
7
21
|
with open(init_path, "a+") as f:
|
|
8
22
|
import_stmt = "from . import {}\n".format(next)
|
polyapi/variables.py
CHANGED
|
@@ -1,86 +1,103 @@
|
|
|
1
1
|
import os
|
|
2
|
+
from typing import List
|
|
2
3
|
|
|
3
|
-
from polyapi.
|
|
4
|
+
from polyapi.schema import map_primitive_types
|
|
5
|
+
from polyapi.typedefs import PropertyType, VariableSpecDto
|
|
6
|
+
from polyapi.utils import add_import_to_init, init_the_init
|
|
4
7
|
|
|
5
8
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
from polyapi.config import get_api_key_and_url
|
|
9
|
-
from polyapi.exceptions import PolyApiException
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class {variable_name}:
|
|
9
|
+
# GET is only included if the variable is not a secret
|
|
10
|
+
GET_TEMPLATE = """
|
|
13
11
|
@staticmethod
|
|
14
|
-
def get():
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
else:
|
|
19
|
-
api_key, base_url = get_api_key_and_url()
|
|
20
|
-
headers = {{"Authorization": f"Bearer {{api_key}}"}}
|
|
21
|
-
url = f"{{base_url}}/variables/{variable_id}/value"
|
|
22
|
-
resp = requests.get(url, headers=headers)
|
|
23
|
-
if resp.status_code != 200 and resp.status_code != 201:
|
|
24
|
-
raise PolyApiException(f"{{resp.status_code}}: {{resp.content}}")
|
|
25
|
-
return resp.text
|
|
12
|
+
def get() -> {variable_type}:
|
|
13
|
+
resp = variable_get("{variable_id}")
|
|
14
|
+
return resp.text
|
|
15
|
+
"""
|
|
26
16
|
|
|
17
|
+
|
|
18
|
+
TEMPLATE = """
|
|
19
|
+
class {variable_name}:{get_method}
|
|
27
20
|
@staticmethod
|
|
28
|
-
def update(value):
|
|
29
|
-
|
|
30
|
-
headers = {{"Authorization": f"Bearer {{api_key}}"}}
|
|
31
|
-
url = f"{{base_url}}/variables/{variable_id}"
|
|
32
|
-
resp = requests.patch(url, data={{"value": value}}, headers=headers)
|
|
33
|
-
if resp.status_code != 200 and resp.status_code != 201:
|
|
34
|
-
raise PolyApiException(f"{{resp.status_code}}: {{resp.content}}")
|
|
21
|
+
def update(value: {variable_type}):
|
|
22
|
+
resp = variable_update("{variable_id}", value)
|
|
35
23
|
return resp.json()
|
|
36
24
|
|
|
37
|
-
|
|
25
|
+
@staticmethod
|
|
26
|
+
def inject(path=None) -> {variable_type}:
|
|
38
27
|
return {{
|
|
39
28
|
"type": "PolyVariable",
|
|
40
29
|
"id": "{variable_id}",
|
|
41
30
|
"path": path,
|
|
42
|
-
}}
|
|
43
|
-
"""
|
|
31
|
+
}} # type: ignore"""
|
|
44
32
|
|
|
45
33
|
|
|
46
|
-
def generate_variables(variables):
|
|
34
|
+
def generate_variables(variables: List[VariableSpecDto]):
|
|
47
35
|
for variable in variables:
|
|
48
|
-
create_variable(
|
|
36
|
+
create_variable(variable)
|
|
49
37
|
print("Variables generated!")
|
|
50
38
|
|
|
51
39
|
|
|
52
|
-
def
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
file_path = os.path.join(full_path, f"_{variable_name}.py")
|
|
60
|
-
with open(file_path, "w") as f:
|
|
61
|
-
f.write(
|
|
62
|
-
TEMPLATE.format(
|
|
63
|
-
variable_name=variable_name,
|
|
64
|
-
variable_id=variable_id,
|
|
65
|
-
secret=secret,
|
|
66
|
-
)
|
|
40
|
+
def render_variable(variable: VariableSpecDto):
|
|
41
|
+
variable_type = _get_variable_type(variable["variable"]["valueType"])
|
|
42
|
+
get_method = (
|
|
43
|
+
""
|
|
44
|
+
if variable["variable"]["secret"]
|
|
45
|
+
else GET_TEMPLATE.format(
|
|
46
|
+
variable_id=variable["id"], variable_type=variable_type
|
|
67
47
|
)
|
|
48
|
+
)
|
|
49
|
+
return TEMPLATE.format(
|
|
50
|
+
variable_name=variable["name"],
|
|
51
|
+
variable_id=variable["id"],
|
|
52
|
+
variable_type=variable_type,
|
|
53
|
+
get_method=get_method,
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
def _get_variable_type(type_spec: PropertyType) -> str:
|
|
58
|
+
# simplified version of _get_type from api.py
|
|
59
|
+
if type_spec["kind"] == "plain":
|
|
60
|
+
value = type_spec["value"]
|
|
61
|
+
if value.endswith("[]"):
|
|
62
|
+
primitive = map_primitive_types(value[:-2])
|
|
63
|
+
return f"List[{primitive}]"
|
|
64
|
+
else:
|
|
65
|
+
return map_primitive_types(value)
|
|
66
|
+
elif type_spec["kind"] == "primitive":
|
|
67
|
+
return map_primitive_types(type_spec["type"])
|
|
68
|
+
elif type_spec["kind"] == "array":
|
|
69
|
+
return "List"
|
|
70
|
+
elif type_spec["kind"] == "void":
|
|
71
|
+
return "None"
|
|
72
|
+
elif type_spec["kind"] == "object":
|
|
73
|
+
return "Dict"
|
|
74
|
+
elif type_spec["kind"] == "any":
|
|
75
|
+
return "Any"
|
|
76
|
+
else:
|
|
77
|
+
return "Any"
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def create_variable(variable: VariableSpecDto) -> None:
|
|
81
|
+
folders = ["vari"]
|
|
82
|
+
if variable["context"]:
|
|
83
|
+
folders += variable["context"].split(".")
|
|
84
|
+
|
|
85
|
+
# build up the full_path by adding all the folders
|
|
86
|
+
full_path = os.path.join(os.path.dirname(os.path.abspath(__file__)))
|
|
68
87
|
|
|
88
|
+
for idx, folder in enumerate(folders):
|
|
89
|
+
full_path = os.path.join(full_path, folder)
|
|
90
|
+
if not os.path.exists(full_path):
|
|
91
|
+
os.makedirs(full_path)
|
|
92
|
+
next = folders[idx + 1] if idx + 1 < len(folders) else None
|
|
93
|
+
if next:
|
|
94
|
+
add_import_to_init(full_path, next)
|
|
69
95
|
|
|
70
|
-
|
|
71
|
-
full_path = os.path.dirname(os.path.abspath(__file__))
|
|
96
|
+
add_variable_to_init(full_path, variable)
|
|
72
97
|
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
full_path = os.path.join(full_path, folder)
|
|
80
|
-
if not os.path.exists(full_path):
|
|
81
|
-
os.makedirs(full_path)
|
|
82
|
-
|
|
83
|
-
# append to __init__.py file if nested folders
|
|
84
|
-
next = folders[idx + 1] if idx + 2 < len(folders) else ""
|
|
85
|
-
if next:
|
|
86
|
-
append_init(full_path, next)
|
|
98
|
+
|
|
99
|
+
def add_variable_to_init(full_path: str, variable: VariableSpecDto):
|
|
100
|
+
init_the_init(full_path)
|
|
101
|
+
init_path = os.path.join(full_path, "__init__.py")
|
|
102
|
+
with open(init_path, "a") as f:
|
|
103
|
+
f.write(render_variable(variable) + "\n\n")
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: polyapi-python
|
|
3
|
-
Version: 0.1.0.
|
|
3
|
+
Version: 0.1.0.dev3
|
|
4
4
|
Summary: The PolyAPI Python Client
|
|
5
5
|
Author-email: Dan Fellin <dan@polyapi.io>
|
|
6
6
|
License: MIT License
|
|
@@ -124,6 +124,11 @@ def bar(n: int) -> Foobar:
|
|
|
124
124
|
return Foobar(count=n)
|
|
125
125
|
```
|
|
126
126
|
|
|
127
|
+
## Pypi
|
|
128
|
+
|
|
129
|
+
This library is hosted on Pypi. You can find the latest version on the [pypi polyapi-python](https://pypi.org/project/polyapi-python/) project.
|
|
130
|
+
|
|
131
|
+
|
|
127
132
|
## Upgrade
|
|
128
133
|
|
|
129
134
|
To upgrade your library to the latest version, pass the upgrade flag.
|
|
@@ -147,3 +152,7 @@ To run this library's unit tests, please clone the repo then run:
|
|
|
147
152
|
```bash
|
|
148
153
|
python -m unittest discover
|
|
149
154
|
```
|
|
155
|
+
|
|
156
|
+
## Support
|
|
157
|
+
|
|
158
|
+
If you run into any issues or want help getting started with this project, please contact support@polyapi.io
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
polyapi/__init__.py,sha256=BbXhEtZ3TSGBfAagj62oRxrc5yFNz5fO0FMoGqS-ENQ,366
|
|
2
|
+
polyapi/__main__.py,sha256=V4zhAh_YGxno5f_KSrlkELxcuDh9bR3WSd0n-2r-qQQ,93
|
|
3
|
+
polyapi/api.py,sha256=--MMEbj_F6qdMW1JOd1nSJ9OYyx4ecs2KvbSnYokBOk,9338
|
|
4
|
+
polyapi/cli.py,sha256=XafGV_MGYWHOSbn7KZ03GKrSihirT2LVLDhFh_FgyF0,1425
|
|
5
|
+
polyapi/config.py,sha256=RMg8OUKXKFENtS17l4rkaZhfGrwXN-_-F1V1HKJGbYU,2006
|
|
6
|
+
polyapi/constants.py,sha256=NGjso6K5rGnE8TGdrXmdEfvvr-HI3DTVGwOYiWO68LM,511
|
|
7
|
+
polyapi/exceptions.py,sha256=Zh7i7eCUhDuXEdUYjatkLFTeZkrx1BJ1P5ePgbJ9eIY,89
|
|
8
|
+
polyapi/execute.py,sha256=ehFfZP3uoGDDeRMNoKpf0R0Vgq1Po1NFP2C7lM5jKLY,1612
|
|
9
|
+
polyapi/function_cli.py,sha256=qMWZm07F0PP1d-LeHnUw2oJzIea0YEwYJG809zYJeqY,6557
|
|
10
|
+
polyapi/generate.py,sha256=eQNM9VZEcfKd8nzg6seioV0i0dALao2FqKpXDarqy4A,3929
|
|
11
|
+
polyapi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
+
polyapi/schema.py,sha256=mUMKPa5xURKiAQtiX1WoBK3_pcqS9xlhp92z0F8SRCU,2959
|
|
13
|
+
polyapi/typedefs.py,sha256=RZ3I6sgJm_5MuuORG1QjUE-UJy_z2WRXNdiWjEdLvQg,1371
|
|
14
|
+
polyapi/utils.py,sha256=t4NkZ0GAOCCbcm015sdFfmEYcCNGtcxOp9qx0NRkeKg,1221
|
|
15
|
+
polyapi/variables.py,sha256=aijpKzH_8IqNHBRdHe5VWR-lh_LlkuYqEaw8IfHVZBU,3078
|
|
16
|
+
polyapi_python-0.1.0.dev3.dist-info/LICENSE,sha256=Hi0kDr56Dsy0uYIwNt4r9G7tI8x8miXRTlyvbeplCP8,1068
|
|
17
|
+
polyapi_python-0.1.0.dev3.dist-info/METADATA,sha256=0OVJIjcUSWZDncSjbU2aR3BjqS7_OdHvQr4YnJdk0ow,4520
|
|
18
|
+
polyapi_python-0.1.0.dev3.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
19
|
+
polyapi_python-0.1.0.dev3.dist-info/top_level.txt,sha256=CEFllOnzowci_50RYJac-M54KD2IdAptFsayVVF_f04,8
|
|
20
|
+
polyapi_python-0.1.0.dev3.dist-info/RECORD,,
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
polyapi/__init__.py,sha256=BbXhEtZ3TSGBfAagj62oRxrc5yFNz5fO0FMoGqS-ENQ,366
|
|
2
|
-
polyapi/__main__.py,sha256=V4zhAh_YGxno5f_KSrlkELxcuDh9bR3WSd0n-2r-qQQ,93
|
|
3
|
-
polyapi/api.py,sha256=gmpjYRcubM7Qq2raI1GWNo4zOnrAbAJcrM2vLdNGChM,9755
|
|
4
|
-
polyapi/cli.py,sha256=XafGV_MGYWHOSbn7KZ03GKrSihirT2LVLDhFh_FgyF0,1425
|
|
5
|
-
polyapi/config.py,sha256=RMg8OUKXKFENtS17l4rkaZhfGrwXN-_-F1V1HKJGbYU,2006
|
|
6
|
-
polyapi/constants.py,sha256=NGjso6K5rGnE8TGdrXmdEfvvr-HI3DTVGwOYiWO68LM,511
|
|
7
|
-
polyapi/exceptions.py,sha256=Zh7i7eCUhDuXEdUYjatkLFTeZkrx1BJ1P5ePgbJ9eIY,89
|
|
8
|
-
polyapi/execute.py,sha256=VtdFU0HraviVtseg8X-o34yqx1XRy3rufcHDibtDppU,645
|
|
9
|
-
polyapi/function_cli.py,sha256=qMWZm07F0PP1d-LeHnUw2oJzIea0YEwYJG809zYJeqY,6557
|
|
10
|
-
polyapi/generate.py,sha256=0ZYXParP_vm9YXWfMl6Rn7MKrpdUXfgHb4UUzgJ1HKk,4114
|
|
11
|
-
polyapi/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
12
|
-
polyapi/schema.py,sha256=LBBj2_qR793-4dhp0xyywtctbYMnS85lPwitldGJ5yo,2756
|
|
13
|
-
polyapi/typedefs.py,sha256=zh4F36fZSZ6r4YqkcjDjNo_z__kIdiX7fLkC3QniDK0,1082
|
|
14
|
-
polyapi/utils.py,sha256=mvkuJU27QMLKdcqyPktlDD-iO0OI3gbA7xhWCjR4UeM,709
|
|
15
|
-
polyapi/variables.py,sha256=z1zfR3imJ735G2V89BMOYdzEdXiEHKZ5Q58O4ipWcpk,2897
|
|
16
|
-
polyapi_python-0.1.0.dev1.dist-info/LICENSE,sha256=Hi0kDr56Dsy0uYIwNt4r9G7tI8x8miXRTlyvbeplCP8,1068
|
|
17
|
-
polyapi_python-0.1.0.dev1.dist-info/METADATA,sha256=Q0qKeql7g0ZwGLkLOQMRkNoXyb0NYzb_SvWnPUVj2P4,4243
|
|
18
|
-
polyapi_python-0.1.0.dev1.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
19
|
-
polyapi_python-0.1.0.dev1.dist-info/top_level.txt,sha256=CEFllOnzowci_50RYJac-M54KD2IdAptFsayVVF_f04,8
|
|
20
|
-
polyapi_python-0.1.0.dev1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|