polyapi-python 0.1.0.dev2__py3-none-any.whl → 0.1.0.dev4__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 -23
- polyapi/config.py +5 -0
- 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.dev2.dist-info → polyapi_python-0.1.0.dev4.dist-info}/METADATA +10 -1
- polyapi_python-0.1.0.dev4.dist-info/RECORD +20 -0
- polyapi_python-0.1.0.dev2.dist-info/RECORD +0 -20
- {polyapi_python-0.1.0.dev2.dist-info → polyapi_python-0.1.0.dev4.dist-info}/LICENSE +0 -0
- {polyapi_python-0.1.0.dev2.dist-info → polyapi_python-0.1.0.dev4.dist-info}/WHEEL +0 -0
- {polyapi_python-0.1.0.dev2.dist-info → polyapi_python-0.1.0.dev4.dist-info}/top_level.txt +0 -0
polyapi/api.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import os
|
|
2
2
|
from typing import Any, Dict, List, Tuple
|
|
3
3
|
|
|
4
|
-
from polyapi.constants import BASIC_PYTHON_TYPES
|
|
4
|
+
from polyapi.constants import BASIC_PYTHON_TYPES
|
|
5
5
|
from polyapi.typedefs import PropertySpecification, PropertyType
|
|
6
|
-
from polyapi.utils import
|
|
7
|
-
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
|
|
8
8
|
|
|
9
9
|
# map the function type from the spec type to the function execute type
|
|
10
10
|
TEMPLATE_FUNCTION_TYPE_MAP = {
|
|
@@ -47,21 +47,16 @@ def {function_name}(
|
|
|
47
47
|
"""
|
|
48
48
|
|
|
49
49
|
|
|
50
|
-
def _map_primitive_types(type_: str) -> str:
|
|
51
|
-
# Define your mapping logic here
|
|
52
|
-
return JSONSCHEMA_TO_PYTHON_TYPE_MAP.get(type_, "Any")
|
|
53
|
-
|
|
54
|
-
|
|
55
50
|
def _get_type(type_spec: PropertyType) -> Tuple[str, str]:
|
|
56
51
|
if type_spec["kind"] == "plain":
|
|
57
52
|
value = type_spec["value"]
|
|
58
53
|
if value.endswith("[]"):
|
|
59
|
-
primitive =
|
|
54
|
+
primitive = map_primitive_types(value[:-2])
|
|
60
55
|
return f"List[{primitive}]", ""
|
|
61
56
|
else:
|
|
62
|
-
return
|
|
57
|
+
return map_primitive_types(value), ""
|
|
63
58
|
elif type_spec["kind"] == "primitive":
|
|
64
|
-
return
|
|
59
|
+
return map_primitive_types(type_spec["type"]), ""
|
|
65
60
|
elif type_spec["kind"] == "array":
|
|
66
61
|
if type_spec.get("items"):
|
|
67
62
|
items = type_spec["items"]
|
|
@@ -141,9 +136,10 @@ def _add_type_import_path(function_name: str, arg: str) -> str:
|
|
|
141
136
|
return arg
|
|
142
137
|
else:
|
|
143
138
|
if '"' in sub:
|
|
144
|
-
|
|
145
|
-
else:
|
|
139
|
+
sub = sub.replace('"', "")
|
|
146
140
|
return f'List["_{function_name}.{camelCase(sub)}"]'
|
|
141
|
+
else:
|
|
142
|
+
return f'List[_{function_name}.{camelCase(sub)}]'
|
|
147
143
|
|
|
148
144
|
return f'_{function_name}.{camelCase(arg)}'
|
|
149
145
|
|
|
@@ -221,8 +217,7 @@ def add_function_file(
|
|
|
221
217
|
return_type: Dict[str, Any],
|
|
222
218
|
):
|
|
223
219
|
# first lets add the import to the __init__
|
|
224
|
-
|
|
225
|
-
_init_the_init(init_path)
|
|
220
|
+
init_the_init(full_path)
|
|
226
221
|
|
|
227
222
|
func_str, func_type_defs = render_function(
|
|
228
223
|
function_type,
|
|
@@ -233,6 +228,7 @@ def add_function_file(
|
|
|
233
228
|
return_type,
|
|
234
229
|
)
|
|
235
230
|
|
|
231
|
+
init_path = os.path.join(full_path, "__init__.py")
|
|
236
232
|
with open(init_path, "a") as f:
|
|
237
233
|
f.write(f"\n\nfrom . import _{function_name}\n\n{func_str}")
|
|
238
234
|
|
|
@@ -242,12 +238,6 @@ def add_function_file(
|
|
|
242
238
|
f.write(func_type_defs)
|
|
243
239
|
|
|
244
240
|
|
|
245
|
-
def _init_the_init(init_path: str) -> None:
|
|
246
|
-
if not os.path.exists(init_path):
|
|
247
|
-
with open(init_path, "w") as f:
|
|
248
|
-
f.write("from typing import List, Dict, Any, TypedDict\nfrom polyapi.execute import execute\nfrom polyapi.exceptions import PolyApiException\n")
|
|
249
|
-
|
|
250
|
-
|
|
251
241
|
def create_function(
|
|
252
242
|
function_type: str,
|
|
253
243
|
path: str,
|
|
@@ -279,8 +269,8 @@ def create_function(
|
|
|
279
269
|
# append to __init__.py file if nested folders
|
|
280
270
|
next = folders[idx + 1] if idx + 2 < len(folders) else ""
|
|
281
271
|
if next:
|
|
282
|
-
|
|
283
|
-
|
|
272
|
+
init_the_init(full_path)
|
|
273
|
+
add_import_to_init(full_path, next)
|
|
284
274
|
|
|
285
275
|
|
|
286
276
|
def generate_api(api_functions: List) -> None:
|
polyapi/config.py
CHANGED
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.dev4
|
|
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=GCjQaKxz4EkbTdwm9Rp4itfjR5NPDdtzYPbBzvqfrmg,2083
|
|
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.dev4.dist-info/LICENSE,sha256=Hi0kDr56Dsy0uYIwNt4r9G7tI8x8miXRTlyvbeplCP8,1068
|
|
17
|
+
polyapi_python-0.1.0.dev4.dist-info/METADATA,sha256=M5WHHOlG2iu6zyJXj40p9T2W4UDpe7VwsVnHzYHqdR8,4520
|
|
18
|
+
polyapi_python-0.1.0.dev4.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
19
|
+
polyapi_python-0.1.0.dev4.dist-info/top_level.txt,sha256=CEFllOnzowci_50RYJac-M54KD2IdAptFsayVVF_f04,8
|
|
20
|
+
polyapi_python-0.1.0.dev4.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=hUE-XrrCjJutQ5cvji9jcY8Sjga_HgZV9pZg8-UoqlY,9734
|
|
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.dev2.dist-info/LICENSE,sha256=Hi0kDr56Dsy0uYIwNt4r9G7tI8x8miXRTlyvbeplCP8,1068
|
|
17
|
-
polyapi_python-0.1.0.dev2.dist-info/METADATA,sha256=Vsi2Fa7OJfWZNr3MCqwUrIjiIcuTuFf3xrXW8jr6hXg,4243
|
|
18
|
-
polyapi_python-0.1.0.dev2.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
|
|
19
|
-
polyapi_python-0.1.0.dev2.dist-info/top_level.txt,sha256=CEFllOnzowci_50RYJac-M54KD2IdAptFsayVVF_f04,8
|
|
20
|
-
polyapi_python-0.1.0.dev2.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|