UncountablePythonSDK 0.0.122__py3-none-any.whl → 0.0.123__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.
Potentially problematic release.
This version of UncountablePythonSDK might be problematic. Click here for more details.
- docs/conf.py +1 -1
- docs/index.md +106 -6
- docs/integration_examples/create_ingredient.md +43 -0
- docs/integration_examples/create_output.md +56 -0
- docs/integration_examples/index.md +6 -0
- examples/basic_auth.py +7 -0
- examples/oauth.py +7 -0
- pkgs/argument_parser/_is_namedtuple.py +3 -0
- pkgs/type_spec/type_info/emit_type_info.py +10 -1
- uncountable/integration/telemetry.py +8 -1
- uncountable/types/__init__.py +4 -0
- uncountable/types/api/entity/export_entities.py +13 -0
- uncountable/types/client_base.py +2 -0
- uncountable/types/integration_session.py +10 -0
- uncountable/types/integration_session_t.py +60 -0
- uncountable/types/sockets.py +11 -0
- uncountable/types/sockets_t.py +70 -0
- {uncountablepythonsdk-0.0.122.dist-info → uncountablepythonsdk-0.0.123.dist-info}/METADATA +1 -1
- {uncountablepythonsdk-0.0.122.dist-info → uncountablepythonsdk-0.0.123.dist-info}/RECORD +21 -13
- docs/quickstart.md +0 -19
- {uncountablepythonsdk-0.0.122.dist-info → uncountablepythonsdk-0.0.123.dist-info}/WHEEL +0 -0
- {uncountablepythonsdk-0.0.122.dist-info → uncountablepythonsdk-0.0.123.dist-info}/top_level.txt +0 -0
docs/conf.py
CHANGED
docs/index.md
CHANGED
|
@@ -3,14 +3,114 @@
|
|
|
3
3
|

|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
The Uncountable Python SDK is a python package that provides a wrapper around the Uncountable REST API.
|
|
7
|
+
|
|
8
|
+
Using this SDK provides the following advantages:
|
|
9
|
+
|
|
10
|
+
- In-editor parameter/type safety
|
|
11
|
+
- Automatic parsing of response data.
|
|
12
|
+
- Reduced code boilerplate
|
|
13
|
+
- Helper methods
|
|
14
|
+
|
|
15
|
+
## Getting Started
|
|
16
|
+
The first step in any integration is to create a [Client](uncountable.core.client.Client) object. The client provides access to all available SDK methods, and includes built-in request authentication & error propagation.
|
|
17
|
+
|
|
18
|
+
### Creating a Client
|
|
19
|
+
Create a client using one of the supported authentication mechanisms. API credentials can be generated by a member of Uncountable staff.
|
|
20
|
+
|
|
21
|
+
::::{tab-set}
|
|
22
|
+
:::{tab-item} Basic Auth
|
|
23
|
+
```{literalinclude} ../examples/basic_auth.py
|
|
24
|
+
```
|
|
25
|
+
:::
|
|
26
|
+
|
|
27
|
+
:::{tab-item} OAuth
|
|
28
|
+
```{literalinclude} ../examples/oauth.py
|
|
29
|
+
```
|
|
30
|
+
:::
|
|
31
|
+
::::
|
|
32
|
+
|
|
33
|
+
The provided code examples assume that a Client has been created and stored in the `client` variable
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
### Basic Usage
|
|
37
|
+
|
|
38
|
+
:::{dropdown} List Ingredient Names & IDs
|
|
39
|
+
```{code-block} python
|
|
40
|
+
from uncountable.types import entity_t, id_source_t
|
|
41
|
+
|
|
42
|
+
client.list_id_source(
|
|
43
|
+
spec=id_source_t.IdSourceSpecEntity(entity_type=entity_t.EntityType.INGREDIENT),
|
|
44
|
+
search_label="",
|
|
45
|
+
)
|
|
46
|
+
```
|
|
47
|
+
Example Response:
|
|
48
|
+
```code
|
|
49
|
+
Data(
|
|
50
|
+
results=[
|
|
51
|
+
IdName(id=1, name='Filler'),
|
|
52
|
+
IdName(id=2, name='Calcium Oxide 2'),
|
|
53
|
+
IdName(id=3, name='Carbon Black'),
|
|
54
|
+
]
|
|
55
|
+
)
|
|
56
|
+
```
|
|
57
|
+
:::
|
|
58
|
+
|
|
59
|
+
:::{dropdown} Create an Experiment
|
|
60
|
+
```{code-block} python
|
|
61
|
+
client.create_recipe(material_family_id=1, workflow_id=1, name="Example Recipe")
|
|
62
|
+
```
|
|
63
|
+
Example Response:
|
|
64
|
+
```code
|
|
65
|
+
Data(result_id=52271)
|
|
66
|
+
```
|
|
67
|
+
:::
|
|
68
|
+
|
|
69
|
+
:::{dropdown} Upload a file
|
|
70
|
+
```{code-block} python
|
|
71
|
+
from uncountable.core.file_upload import MediaFileUpload
|
|
72
|
+
|
|
73
|
+
client.upload_files(file_uploads=[MediaFileUpload(path="/path/to/local/example_file.pdf")])
|
|
74
|
+
```
|
|
75
|
+
Example Response:
|
|
76
|
+
```code
|
|
77
|
+
[
|
|
78
|
+
UploadedFile(name='example_file.pdf', file_id=718)
|
|
79
|
+
]
|
|
80
|
+
```
|
|
81
|
+
:::
|
|
82
|
+
|
|
83
|
+
[More examples](integration_examples/index)
|
|
84
|
+
|
|
85
|
+
## Errors
|
|
86
|
+
Client methods will raise Exceptions when the API returns codes in the `3xx`, `4xx` or `5xx` ranges. Ensure all method calls are wrapped in Exception handling logic.
|
|
87
|
+
|
|
88
|
+
## Pagination
|
|
89
|
+
Many of the Uncountable APIs require pagination to fetch more than 100 results at once. The following code snippet implements pagination to fetch the Names & IDs of all Projects:
|
|
90
|
+
:::{dropdown} Pagination Example
|
|
91
|
+
```{code-block} python
|
|
92
|
+
from uncountable.types import entity_t, id_source_t
|
|
93
|
+
from uncountable.types.api.id_source.list_id_source import IdName
|
|
94
|
+
|
|
95
|
+
def fetch_all_projects(client: Client) -> list[IdName]:
|
|
96
|
+
projects: list[IdName] = []
|
|
97
|
+
while True:
|
|
98
|
+
response = client.list_id_source(
|
|
99
|
+
spec=IdSourceSpecEntity(entity_type=entity_t.EntityType.PROJECT),
|
|
100
|
+
search_label="",
|
|
101
|
+
offset=len(projects),
|
|
102
|
+
)
|
|
103
|
+
projects.extend(response.results)
|
|
104
|
+
if len(response.results) < 100:
|
|
105
|
+
return projects
|
|
106
|
+
```
|
|
107
|
+
:::
|
|
108
|
+
|
|
7
109
|
|
|
8
110
|
```{toctree}
|
|
9
|
-
:maxdepth: 2
|
|
10
111
|
:hidden:
|
|
11
|
-
|
|
12
|
-
quickstart
|
|
112
|
+
Overview <self>
|
|
13
113
|
Available SDK Methods <api/uncountable/core/client/Client>
|
|
14
|
-
|
|
114
|
+
integration_examples/index
|
|
115
|
+
SDK Reference <autoapi/uncountable/index>
|
|
15
116
|
```
|
|
16
|
-
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Create an Ingredient
|
|
2
|
+
|
|
3
|
+
Use the `create_or_update_entity` method to create Ingredients.
|
|
4
|
+
|
|
5
|
+
The following fields are required when creating an Ingredient:
|
|
6
|
+
- `name`: The name of the Ingredient
|
|
7
|
+
- `core_ingredient_ingredientMaterialFamilies`: The list of material families in which to include the Ingredient
|
|
8
|
+
|
|
9
|
+
The reference name of the default definition of Ingredients is `uncIngredient`
|
|
10
|
+
|
|
11
|
+
This is an example of a minimal ingredient creation call
|
|
12
|
+
|
|
13
|
+
```{code-block} python
|
|
14
|
+
from uncountable.types import entity_t, field_values_t, identifier_t
|
|
15
|
+
|
|
16
|
+
client.create_or_update_entity(
|
|
17
|
+
entity_type=entity_t.EntityType.INGREDIENT,
|
|
18
|
+
definition_key=identifier_t.IdentifierKeyRefName(ref_name="uncIngredient"),
|
|
19
|
+
field_values=[
|
|
20
|
+
field_values_t.FieldArgumentValue(
|
|
21
|
+
field_key=identifier_t.IdentifierKeyRefName(
|
|
22
|
+
ref_name="core_ingredient_ingredientMaterialFamilies"
|
|
23
|
+
),
|
|
24
|
+
value=field_values_t.FieldValueIds(
|
|
25
|
+
entity_type=entity_t.EntityType.MATERIAL_FAMILY,
|
|
26
|
+
identifier_keys=[identifier_t.IdentifierKeyId(id=1)],
|
|
27
|
+
),
|
|
28
|
+
),
|
|
29
|
+
field_values_t.FieldArgumentValue(
|
|
30
|
+
field_key=identifier_t.IdentifierKeyRefName(ref_name="name"),
|
|
31
|
+
value=field_values_t.FieldValueText(value="Example Ingredient"),
|
|
32
|
+
),
|
|
33
|
+
],
|
|
34
|
+
)
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Example Response:
|
|
38
|
+
```{code}
|
|
39
|
+
Data(modification_made=True, result_id=3124, entity=None, result_values=None)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Optional fields:
|
|
43
|
+
- `core_ingredient_quantityType`: The quantity type of the ingredient (default is `numeric`)
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Create an Output
|
|
2
|
+
|
|
3
|
+
Use the `create_or_update_entity` method to create Outputs.
|
|
4
|
+
|
|
5
|
+
The following fields are required when creating an Output:
|
|
6
|
+
- `name`: The name of the Output
|
|
7
|
+
- `core_output_unitsId`: The unit the output is measured in
|
|
8
|
+
- `core_output_outputMaterialFamilies`: The list of material families in which to include the Output
|
|
9
|
+
- `core_output_quantityType`: The quantity type of the output
|
|
10
|
+
|
|
11
|
+
The reference name of the default definition of Ingredients is `unc_output_definition`
|
|
12
|
+
|
|
13
|
+
This is an example of a minimal output creation call
|
|
14
|
+
|
|
15
|
+
```{code-block} python
|
|
16
|
+
from uncountable.types import entity_t, field_values_t, identifier_t
|
|
17
|
+
|
|
18
|
+
client.create_or_update_entity(
|
|
19
|
+
entity_type=entity_t.EntityType.OUTPUT,
|
|
20
|
+
definition_key=identifier_t.IdentifierKeyRefName(ref_name="unc_output_definition"),
|
|
21
|
+
field_values=[
|
|
22
|
+
field_values_t.FieldArgumentValue(
|
|
23
|
+
field_key=identifier_t.IdentifierKeyRefName(ref_name="name"),
|
|
24
|
+
value=field_values_t.FieldValueText(value="Example Output"),
|
|
25
|
+
),
|
|
26
|
+
field_values_t.FieldArgumentValue(
|
|
27
|
+
field_key=identifier_t.IdentifierKeyRefName(ref_name="core_output_unitsId"),
|
|
28
|
+
value=field_values_t.FieldValueId(
|
|
29
|
+
entity_type=entity_t.EntityType.UNITS,
|
|
30
|
+
identifier_key=identifier_t.IdentifierKeyId(id=1),
|
|
31
|
+
),
|
|
32
|
+
),
|
|
33
|
+
field_values_t.FieldArgumentValue(
|
|
34
|
+
field_key=identifier_t.IdentifierKeyRefName(
|
|
35
|
+
ref_name="core_output_outputMaterialFamilies"
|
|
36
|
+
),
|
|
37
|
+
value=field_values_t.FieldValueIds(
|
|
38
|
+
entity_type=entity_t.EntityType.MATERIAL_FAMILY,
|
|
39
|
+
identifier_keys=[identifier_t.IdentifierKeyId(id=1)],
|
|
40
|
+
),
|
|
41
|
+
),
|
|
42
|
+
field_values_t.FieldArgumentValue(
|
|
43
|
+
field_key=identifier_t.IdentifierKeyRefName(
|
|
44
|
+
ref_name="core_output_quantityType"
|
|
45
|
+
),
|
|
46
|
+
value=field_values_t.FieldValueFieldOption(value="numeric"),
|
|
47
|
+
),
|
|
48
|
+
],
|
|
49
|
+
)
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
Example Response:
|
|
53
|
+
|
|
54
|
+
```{code}
|
|
55
|
+
Data(modification_made=True, result_id=653, entity=None, result_values=None)
|
|
56
|
+
```
|
examples/basic_auth.py
ADDED
examples/oauth.py
ADDED
|
@@ -267,7 +267,9 @@ def _extract_and_validate_layout(
|
|
|
267
267
|
for group in ext_info.layout.groups:
|
|
268
268
|
fields = set(group.fields or [])
|
|
269
269
|
for field in fields:
|
|
270
|
-
assert field in stype.properties,
|
|
270
|
+
assert field in stype.properties or field == DISCRIMINATOR_COMMON_NAME, (
|
|
271
|
+
f"layout-refers-to-missing-field:{field}"
|
|
272
|
+
)
|
|
271
273
|
|
|
272
274
|
local_ref_name = None
|
|
273
275
|
if group.ref_name is not None:
|
|
@@ -314,6 +316,9 @@ def _pull_property_from_type_recursively(
|
|
|
314
316
|
return _pull_property_from_type_recursively(stype.base, property_name)
|
|
315
317
|
|
|
316
318
|
|
|
319
|
+
DISCRIMINATOR_COMMON_NAME = "type"
|
|
320
|
+
|
|
321
|
+
|
|
317
322
|
def _validate_type_ext_info(
|
|
318
323
|
stype: builder.SpecTypeDefnObject,
|
|
319
324
|
) -> tuple[ExtInfoLayout | None, type_info_t.ExtInfo | None]:
|
|
@@ -324,12 +329,16 @@ def _validate_type_ext_info(
|
|
|
324
329
|
if ext_info.label_fields is not None:
|
|
325
330
|
assert stype.properties is not None
|
|
326
331
|
for name in ext_info.label_fields:
|
|
332
|
+
if name == DISCRIMINATOR_COMMON_NAME:
|
|
333
|
+
continue
|
|
327
334
|
prop = _pull_property_from_type_recursively(stype, name)
|
|
328
335
|
assert prop is not None, f"missing-label-field:{name}"
|
|
329
336
|
|
|
330
337
|
if ext_info.actions is not None:
|
|
331
338
|
assert stype.properties is not None
|
|
332
339
|
for action in ext_info.actions:
|
|
340
|
+
if action.property == DISCRIMINATOR_COMMON_NAME:
|
|
341
|
+
continue
|
|
333
342
|
prop = _pull_property_from_type_recursively(stype, action.property)
|
|
334
343
|
assert prop is not None, f"missing-action-field:{action.property}"
|
|
335
344
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import functools
|
|
2
|
+
import json
|
|
2
3
|
import os
|
|
3
4
|
import time
|
|
4
5
|
import traceback
|
|
@@ -32,6 +33,10 @@ def _cast_attributes(attributes: dict[str, base_t.JsonValue]) -> Attributes:
|
|
|
32
33
|
return cast(Attributes, attributes)
|
|
33
34
|
|
|
34
35
|
|
|
36
|
+
def one_line_formatter(record: LogRecord) -> str:
|
|
37
|
+
return json.dumps(record.to_json(), separators=(",", ":"))
|
|
38
|
+
|
|
39
|
+
|
|
35
40
|
@functools.cache
|
|
36
41
|
def get_otel_resource() -> Resource:
|
|
37
42
|
attributes: dict[str, base_t.JsonValue] = {
|
|
@@ -60,7 +65,9 @@ def get_otel_tracer() -> Tracer:
|
|
|
60
65
|
@functools.cache
|
|
61
66
|
def get_otel_logger() -> OTELLogger:
|
|
62
67
|
provider = LoggerProvider(resource=get_otel_resource())
|
|
63
|
-
provider.add_log_record_processor(
|
|
68
|
+
provider.add_log_record_processor(
|
|
69
|
+
BatchLogRecordProcessor(ConsoleLogExporter(formatter=one_line_formatter))
|
|
70
|
+
)
|
|
64
71
|
if get_otel_enabled():
|
|
65
72
|
provider.add_log_record_processor(BatchLogRecordProcessor(OTLPLogExporter()))
|
|
66
73
|
_logs.set_logger_provider(provider)
|
uncountable/types/__init__.py
CHANGED
|
@@ -64,6 +64,7 @@ from . import identifier_t as identifier_t
|
|
|
64
64
|
from . import input_attributes_t as input_attributes_t
|
|
65
65
|
from . import inputs_t as inputs_t
|
|
66
66
|
from . import integration_server_t as integration_server_t
|
|
67
|
+
from . import integration_session_t as integration_session_t
|
|
67
68
|
from . import integrations_t as integrations_t
|
|
68
69
|
from .api.uploader import invoke_uploader as invoke_uploader_t
|
|
69
70
|
from . import job_definition_t as job_definition_t
|
|
@@ -108,6 +109,7 @@ from .api.recipes import set_recipe_output_file as set_recipe_output_file_t
|
|
|
108
109
|
from .api.recipes import set_recipe_outputs as set_recipe_outputs_t
|
|
109
110
|
from .api.recipes import set_recipe_tags as set_recipe_tags_t
|
|
110
111
|
from .api.entity import set_values as set_values_t
|
|
112
|
+
from . import sockets_t as sockets_t
|
|
111
113
|
from .api.entity import transition_entity_phase as transition_entity_phase_t
|
|
112
114
|
from .api.recipes import unarchive_recipes as unarchive_recipes_t
|
|
113
115
|
from . import units_t as units_t
|
|
@@ -184,6 +186,7 @@ __all__: list[str] = [
|
|
|
184
186
|
"input_attributes_t",
|
|
185
187
|
"inputs_t",
|
|
186
188
|
"integration_server_t",
|
|
189
|
+
"integration_session_t",
|
|
187
190
|
"integrations_t",
|
|
188
191
|
"invoke_uploader_t",
|
|
189
192
|
"job_definition_t",
|
|
@@ -228,6 +231,7 @@ __all__: list[str] = [
|
|
|
228
231
|
"set_recipe_outputs_t",
|
|
229
232
|
"set_recipe_tags_t",
|
|
230
233
|
"set_values_t",
|
|
234
|
+
"sockets_t",
|
|
231
235
|
"transition_entity_phase_t",
|
|
232
236
|
"unarchive_recipes_t",
|
|
233
237
|
"units_t",
|
|
@@ -18,12 +18,24 @@ __all__: list[str] = [
|
|
|
18
18
|
"Data",
|
|
19
19
|
"ENDPOINT_METHOD",
|
|
20
20
|
"ENDPOINT_PATH",
|
|
21
|
+
"ListingAttribute",
|
|
21
22
|
]
|
|
22
23
|
|
|
23
24
|
ENDPOINT_METHOD = "POST"
|
|
24
25
|
ENDPOINT_PATH = "api/external/entity/export_entities"
|
|
25
26
|
|
|
26
27
|
|
|
28
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
29
|
+
@serial_class(
|
|
30
|
+
named_type_path="sdk.api.entity.export_entities.ListingAttribute",
|
|
31
|
+
unconverted_values={"value"},
|
|
32
|
+
)
|
|
33
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
34
|
+
class ListingAttribute:
|
|
35
|
+
key: str
|
|
36
|
+
value: base_t.JsonValue
|
|
37
|
+
|
|
38
|
+
|
|
27
39
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
28
40
|
@serial_class(
|
|
29
41
|
named_type_path="sdk.api.entity.export_entities.Arguments",
|
|
@@ -34,6 +46,7 @@ class Arguments:
|
|
|
34
46
|
type: exports_t.ExportType = exports_t.ExportType.EXCEL
|
|
35
47
|
client_timezone: exports_t.ListingExportUserTimezone | None = None
|
|
36
48
|
limit: int | None = None
|
|
49
|
+
attributes: list[ListingAttribute] | None = None
|
|
37
50
|
|
|
38
51
|
|
|
39
52
|
# DO NOT MODIFY -- This file is generated by type_spec
|
uncountable/types/client_base.py
CHANGED
|
@@ -610,6 +610,7 @@ class ClientMethods(ABC):
|
|
|
610
610
|
type: exports_t.ExportType = exports_t.ExportType.EXCEL,
|
|
611
611
|
client_timezone: exports_t.ListingExportUserTimezone | None = None,
|
|
612
612
|
limit: int | None = None,
|
|
613
|
+
attributes: list[export_entities_t.ListingAttribute] | None = None,
|
|
613
614
|
) -> export_entities_t.Data:
|
|
614
615
|
"""Uses a structured loading configuration to export entities in the system. This endpoint is asynchronous, and returns the job ID that can be used to query the status of the export.
|
|
615
616
|
|
|
@@ -621,6 +622,7 @@ class ClientMethods(ABC):
|
|
|
621
622
|
client_timezone=client_timezone,
|
|
622
623
|
limit=limit,
|
|
623
624
|
type=type,
|
|
625
|
+
attributes=attributes,
|
|
624
626
|
)
|
|
625
627
|
api_request = APIRequest(
|
|
626
628
|
method=export_entities_t.ENDPOINT_METHOD,
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# ruff: noqa: E402 Q003
|
|
2
|
+
# fmt: off
|
|
3
|
+
# isort: skip_file
|
|
4
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
5
|
+
# Kept only for SDK backwards compatibility
|
|
6
|
+
from .integration_session_t import IntegrationSessionType as IntegrationSessionType
|
|
7
|
+
from .integration_session_t import IntegrationSessionBase as IntegrationSessionBase
|
|
8
|
+
from .integration_session_t import IntegrationSessionInstrument as IntegrationSessionInstrument
|
|
9
|
+
from .integration_session_t import IntegrationSession as IntegrationSession
|
|
10
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
3
|
+
# fmt: off
|
|
4
|
+
# isort: skip_file
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import typing # noqa: F401
|
|
7
|
+
import datetime # noqa: F401
|
|
8
|
+
from decimal import Decimal # noqa: F401
|
|
9
|
+
from enum import StrEnum
|
|
10
|
+
import dataclasses
|
|
11
|
+
from pkgs.serialization import serial_class
|
|
12
|
+
from pkgs.serialization import serial_union_annotation
|
|
13
|
+
from . import base_t
|
|
14
|
+
from . import identifier_t
|
|
15
|
+
|
|
16
|
+
__all__: list[str] = [
|
|
17
|
+
"IntegrationSession",
|
|
18
|
+
"IntegrationSessionBase",
|
|
19
|
+
"IntegrationSessionInstrument",
|
|
20
|
+
"IntegrationSessionType",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
25
|
+
class IntegrationSessionType(StrEnum):
|
|
26
|
+
INSTRUMENT = "instrument"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
30
|
+
@serial_class(
|
|
31
|
+
named_type_path="sdk.integration_session.IntegrationSessionBase",
|
|
32
|
+
)
|
|
33
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
34
|
+
class IntegrationSessionBase:
|
|
35
|
+
type: IntegrationSessionType
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
39
|
+
@serial_class(
|
|
40
|
+
named_type_path="sdk.integration_session.IntegrationSessionInstrument",
|
|
41
|
+
parse_require={"type"},
|
|
42
|
+
)
|
|
43
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
44
|
+
class IntegrationSessionInstrument(IntegrationSessionBase):
|
|
45
|
+
type: typing.Literal[IntegrationSessionType.INSTRUMENT] = IntegrationSessionType.INSTRUMENT
|
|
46
|
+
equipment_key: identifier_t.IdentifierKey
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
50
|
+
IntegrationSession = typing.Annotated[
|
|
51
|
+
typing.Union[IntegrationSessionInstrument],
|
|
52
|
+
serial_union_annotation(
|
|
53
|
+
named_type_path="sdk.integration_session.IntegrationSession",
|
|
54
|
+
discriminator="type",
|
|
55
|
+
discriminator_map={
|
|
56
|
+
"instrument": IntegrationSessionInstrument,
|
|
57
|
+
},
|
|
58
|
+
),
|
|
59
|
+
]
|
|
60
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# ruff: noqa: E402 Q003
|
|
2
|
+
# fmt: off
|
|
3
|
+
# isort: skip_file
|
|
4
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
5
|
+
# Kept only for SDK backwards compatibility
|
|
6
|
+
from .sockets_t import SocketRequestBase as SocketRequestBase
|
|
7
|
+
from .sockets_t import SocketRequestType as SocketRequestType
|
|
8
|
+
from .sockets_t import SocketRequestIntegrationSession as SocketRequestIntegrationSession
|
|
9
|
+
from .sockets_t import SocketTokenRequest as SocketTokenRequest
|
|
10
|
+
from .sockets_t import SocketTokenResponse as SocketTokenResponse
|
|
11
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
3
|
+
# fmt: off
|
|
4
|
+
# isort: skip_file
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import typing # noqa: F401
|
|
7
|
+
import datetime # noqa: F401
|
|
8
|
+
from decimal import Decimal # noqa: F401
|
|
9
|
+
from enum import StrEnum
|
|
10
|
+
import dataclasses
|
|
11
|
+
from pkgs.serialization import serial_class
|
|
12
|
+
from pkgs.serialization import serial_union_annotation
|
|
13
|
+
from . import base_t
|
|
14
|
+
from . import integration_session_t
|
|
15
|
+
|
|
16
|
+
__all__: list[str] = [
|
|
17
|
+
"SocketRequestBase",
|
|
18
|
+
"SocketRequestIntegrationSession",
|
|
19
|
+
"SocketRequestType",
|
|
20
|
+
"SocketTokenRequest",
|
|
21
|
+
"SocketTokenResponse",
|
|
22
|
+
]
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
26
|
+
@serial_class(
|
|
27
|
+
named_type_path="sdk.sockets.SocketRequestBase",
|
|
28
|
+
)
|
|
29
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
30
|
+
class SocketRequestBase:
|
|
31
|
+
type: SocketRequestType
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
35
|
+
class SocketRequestType(StrEnum):
|
|
36
|
+
INTEGRATION_SESSION = "integration_session"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
40
|
+
@serial_class(
|
|
41
|
+
named_type_path="sdk.sockets.SocketRequestIntegrationSession",
|
|
42
|
+
parse_require={"type"},
|
|
43
|
+
)
|
|
44
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
45
|
+
class SocketRequestIntegrationSession(SocketRequestBase):
|
|
46
|
+
type: typing.Literal[SocketRequestType.INTEGRATION_SESSION] = SocketRequestType.INTEGRATION_SESSION
|
|
47
|
+
integration_session: integration_session_t.IntegrationSession
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
51
|
+
SocketTokenRequest = typing.Annotated[
|
|
52
|
+
typing.Union[SocketRequestIntegrationSession],
|
|
53
|
+
serial_union_annotation(
|
|
54
|
+
named_type_path="sdk.sockets.SocketTokenRequest",
|
|
55
|
+
discriminator="type",
|
|
56
|
+
discriminator_map={
|
|
57
|
+
"integration_session": SocketRequestIntegrationSession,
|
|
58
|
+
},
|
|
59
|
+
),
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
64
|
+
@serial_class(
|
|
65
|
+
named_type_path="sdk.sockets.SocketTokenResponse",
|
|
66
|
+
)
|
|
67
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
68
|
+
class SocketTokenResponse:
|
|
69
|
+
token: str
|
|
70
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.123
|
|
4
4
|
Summary: Uncountable SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
docs/.gitignore,sha256=_ebkZUcwfvfnGEJ95rfj1lxoBNd6EE9ZvtOc7FsbfFE,7
|
|
2
|
-
docs/conf.py,sha256=
|
|
3
|
-
docs/index.md,sha256=
|
|
2
|
+
docs/conf.py,sha256=bNk-lXzCTltXz_ZyQmBWXjHa_wL_-YuvPb7yHTuCbZ8,2858
|
|
3
|
+
docs/index.md,sha256=YHwBQmoVjIfJ5nXi4-JSAGkzy7IHDD_DugV-u9s7IrQ,3197
|
|
4
4
|
docs/justfile,sha256=WymCEQ6W2A8Ak79iUPmecmuaUNN2htb7STUrz5K7ELE,273
|
|
5
|
-
docs/quickstart.md,sha256=3GuJ0MB1O5kjlsrgAmdSkDq0rYqATrYy-tzEHDy8H-c,422
|
|
6
5
|
docs/requirements.txt,sha256=Q5qvOf7nQa19R4kCWb_1DBhwW-Vtm3SAtZTPDR_aF9c,171
|
|
6
|
+
docs/integration_examples/create_ingredient.md,sha256=bzTQ943YhINxa3HQylEA26rbAsjr6HvvN_HkVkrzUeA,1547
|
|
7
|
+
docs/integration_examples/create_output.md,sha256=aDn2TjzKgY-HnxnvgsZS578cvajmHpF1y2HKkHfdtd4,2104
|
|
8
|
+
docs/integration_examples/index.md,sha256=lVP6k79rGgdWPfEKM8oJvxeJsBKlpRJaZfrqn9lkiBc,73
|
|
7
9
|
docs/static/logo_blue.png,sha256=SyYpMTVhhBbhF5Wl8lWaVwz-_p1MIR6dW6bVhufQRME,46708
|
|
8
10
|
docs/static/favicons/android-chrome-192x192.png,sha256=XoF-AhD55JlSBDGsEPJKfT_VeXT-awhwKyZnxLhrwvk,1369
|
|
9
11
|
docs/static/favicons/android-chrome-512x512.png,sha256=1S4xwY9YtJQ5ifFsZ-DOzssoyBYs0t9uwdOUmYx0Xso,3888
|
|
@@ -15,11 +17,13 @@ docs/static/favicons/manifest.json,sha256=6q_3nZkcg_x0xut4eE-xpdeMY1TydwiZIcbXlL
|
|
|
15
17
|
docs/static/favicons/mstile-150x150.png,sha256=eAK4QdEofhdLtfmjuPTpnX3MJqYnvGXsHYUjlcQekyY,1035
|
|
16
18
|
docs/static/favicons/safari-pinned-tab.svg,sha256=S84fRnz0ZxLnQrKtmmFZytiRyu1xLtMR_RVy5jmwU7k,1926
|
|
17
19
|
examples/async_batch.py,sha256=tEyvgxk2uf681mKlN4TDuPMkb1OHyM9oO8pYW4A7HvM,1142
|
|
20
|
+
examples/basic_auth.py,sha256=RU7dx_y5sWiS-wN70BXReWLwHoZ8TNmGh14e_JyG8tw,228
|
|
18
21
|
examples/create_entity.py,sha256=t6WBZsWRDbWZgFCWXKGgKL5LAB6-38oaiNYGxMAa2No,686
|
|
19
22
|
examples/create_ingredient_sdk.py,sha256=3Wte0MUH0-vOs6VtSLPIVQEmBVbR85u_qq0L9MmeP4Q,1054
|
|
20
23
|
examples/download_files.py,sha256=rjv7EUgSw_W24_F5La-MljnIDQhbrvA7p2M-qPFbrXA,734
|
|
21
24
|
examples/edit_recipe_inputs.py,sha256=mtk_oSkN-OT2hKkb1XKXrRiUaGYTJstXuOKyTR51Fjo,1663
|
|
22
25
|
examples/invoke_uploader.py,sha256=rEvmVY5TjigN_-4PTQdkjY-bC5DrYMcJgquyZ4Tt5FM,748
|
|
26
|
+
examples/oauth.py,sha256=QUmv4c27UDs3q98yigyA_Sm3hdK5qNfnDvxh7k06ZYg,213
|
|
23
27
|
examples/set_recipe_metadata_file.py,sha256=cRVXGz4UN4aqnNrNSzyBmikYHpe63lMIuzOpMwD9EDU,1036
|
|
24
28
|
examples/set_recipe_output_file_sdk.py,sha256=Lz1amqppnWTX83z-C090wCJ4hcKmCD3kb-4v0uBRi0Y,782
|
|
25
29
|
examples/upload_files.py,sha256=qMaSvMSdTMPOOP55y1AwEurc0SOdZAMvEydlqJPsGpg,432
|
|
@@ -35,7 +39,7 @@ pkgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
|
35
39
|
pkgs/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
36
40
|
pkgs/argument_parser/__init__.py,sha256=EG3pwLEHTp-Qltd3lRnO4K22RiVrasePzKPDOfTPxFY,924
|
|
37
41
|
pkgs/argument_parser/_is_enum.py,sha256=Gw6jJa8nBwYGqXwwCZbSnWL8Rvr5alkg5lSVAqXtOZM,257
|
|
38
|
-
pkgs/argument_parser/_is_namedtuple.py,sha256=
|
|
42
|
+
pkgs/argument_parser/_is_namedtuple.py,sha256=InCP2orqKbUYc4JsmE7ccri2EQPvLZeRijYPGqVSeXY,323
|
|
39
43
|
pkgs/argument_parser/argument_parser.py,sha256=AjmLCNHcGMyXLojSpuKSYvIYE3u8tbg8rjv-yrhosQs,21077
|
|
40
44
|
pkgs/argument_parser/case_convert.py,sha256=NuJLJUJRbyVb6_Slen4uqaStEHbcOS1d-hBBfDrrw-c,605
|
|
41
45
|
pkgs/filesystem_utils/__init__.py,sha256=2a0d2rEPlEEYwhm3Wckny4VCp4ZS7JtYSXmwdwNCRjo,1332
|
|
@@ -84,7 +88,7 @@ pkgs/type_spec/actions_registry/emit_typescript.py,sha256=W1lI36ITdJ7MBf37wlTB7H
|
|
|
84
88
|
pkgs/type_spec/parts/base.py.prepart,sha256=Xy8my5ol_Iu0hpQpvgsmqGLkGcMsLSg-cgjm4Yp-QI4,2369
|
|
85
89
|
pkgs/type_spec/parts/base.ts.prepart,sha256=42-1_N_K04t4c6pE62V4wBw3bR5bgPxhmXUk__A7gAs,1002
|
|
86
90
|
pkgs/type_spec/type_info/__main__.py,sha256=TLNvCHGcmaj_8Sj5bAQNpuNaaw2dpDzoFDWZds0V4Qo,1002
|
|
87
|
-
pkgs/type_spec/type_info/emit_type_info.py,sha256=
|
|
91
|
+
pkgs/type_spec/type_info/emit_type_info.py,sha256=wuhdAJh7Nrdj1tFeiaavpwCdhlig5qZE1JuE8BMLYdE,15655
|
|
88
92
|
pkgs/type_spec/ui_entry_actions/__init__.py,sha256=WiHE_BexOEZWbkkbD7EnFau1aMLNmfgQywG9PTQNCkw,135
|
|
89
93
|
pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py,sha256=65qUEp9zVcAsHEe3QjOTlPfLf45kH980fOXZXKNmOC8,9503
|
|
90
94
|
pkgs/type_spec/value_spec/__init__.py,sha256=Z-grlcZtxAfEXhPHsK0nD7PFLGsv4eqvunaPN7_TA84,83
|
|
@@ -109,7 +113,7 @@ uncountable/integration/job.py,sha256=HFYA3YxqwyCvQLqXpMnKxp2IJUjFgjMsWVz_DTb_5e
|
|
|
109
113
|
uncountable/integration/scan_profiles.py,sha256=RHBmPc5E10YZzf4cmglwrn2yAy0jHBhQ-P_GlAk2TeU,2919
|
|
110
114
|
uncountable/integration/scheduler.py,sha256=KK-1XCr8Rxi8puaynb3H0BySvsDBJJaPcGumy49ZMB8,4864
|
|
111
115
|
uncountable/integration/server.py,sha256=lL9zmzqkQRf7V1fBT20SvIy-7ryz5hFf7DF4QX4pj1E,4699
|
|
112
|
-
uncountable/integration/telemetry.py,sha256=
|
|
116
|
+
uncountable/integration/telemetry.py,sha256=usB82d1hVCoGaBUv2xM4grQN5WqHwVCASdgNJ1RoaPc,7588
|
|
113
117
|
uncountable/integration/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
114
118
|
uncountable/integration/db/connect.py,sha256=mE3bdV0huclH2iT_dXCQdRL4LkjIuf_myAR64RTWXEs,498
|
|
115
119
|
uncountable/integration/db/session.py,sha256=96cGQXpe6IugBTdSsjdP0S5yhJ6toSmbVB6qhc3FJzE,693
|
|
@@ -141,7 +145,7 @@ uncountable/integration/queue_runner/datastore/model.py,sha256=8-RI5A2yPZVGBLWIN
|
|
|
141
145
|
uncountable/integration/secret_retrieval/__init__.py,sha256=3QXVj35w8rRMxVvmmsViFYDi3lcb3g70incfalOEm6o,87
|
|
142
146
|
uncountable/integration/secret_retrieval/retrieve_secret.py,sha256=LBEf18KHtXZxg-ZZ80stJ1vW39AWf0CQllP6pNu3Eq8,2994
|
|
143
147
|
uncountable/integration/webhook_server/entrypoint.py,sha256=NQawXl_JCRojdVniS5RF7dobQQKW_Wy03bwy-uXknuA,3441
|
|
144
|
-
uncountable/types/__init__.py,sha256=
|
|
148
|
+
uncountable/types/__init__.py,sha256=bkleojXUnG9CvMaJCGiqsVk3eVTM0clOtCLvjXUx3L4,10415
|
|
145
149
|
uncountable/types/async_batch.py,sha256=yCCWrrLQfxXVqZp-KskxLBNkNmuELdz4PJjx8ULppgs,662
|
|
146
150
|
uncountable/types/async_batch_processor.py,sha256=h_8Snzt3lbEFlZAZFByt4Hg4dv2YlxMijHjTHjZ0aXY,22062
|
|
147
151
|
uncountable/types/async_batch_t.py,sha256=JuswurXlYW38MfAXJ0UWb7hE2rmzFaHBAsNhRYAyMD4,3779
|
|
@@ -155,7 +159,7 @@ uncountable/types/calculations.py,sha256=fApOFpgBemt_t7IVneVR0VdI3X5EOxiG6Xhzr6R
|
|
|
155
159
|
uncountable/types/calculations_t.py,sha256=pl-lhjyDQuj11Sf9g1-0BsSkN7Ez8UxDp8-KMQ_3enM,709
|
|
156
160
|
uncountable/types/chemical_structure.py,sha256=ujyragaD26-QG5jgKnWhO7TN3N1V9b_04T2WhqNYxxo,281
|
|
157
161
|
uncountable/types/chemical_structure_t.py,sha256=VFFyits_vx4t5L2euu_qFiSpsGJjURkDPr3ISnr3nPc,855
|
|
158
|
-
uncountable/types/client_base.py,sha256=
|
|
162
|
+
uncountable/types/client_base.py,sha256=Letfk7hK3OBX7vjqONbPytlQwGLTGsDijrLt0O4OPWk,76997
|
|
159
163
|
uncountable/types/client_config.py,sha256=qLpHt4O_B098CyN6qQajoxZ2zjZ1DILXLUEGyyGP0TQ,280
|
|
160
164
|
uncountable/types/client_config_t.py,sha256=yTFIYAitMrcc4oV9J-HADODS_Hwi45z-piz7rr7QT04,781
|
|
161
165
|
uncountable/types/curves.py,sha256=QyEyC20jsG-LGKVx6miiF-w70vKMwNkILFBDIJ5Ok9g,345
|
|
@@ -184,6 +188,8 @@ uncountable/types/inputs.py,sha256=3ghg39_oiLF5HqWF_wNwYv4HMR1lrKLfeRLn5ptIGw4,4
|
|
|
184
188
|
uncountable/types/inputs_t.py,sha256=eSVA7LNgLI3ja83GJm4sA9KhPICVV4zj2Dd4OhbuY9g,2158
|
|
185
189
|
uncountable/types/integration_server.py,sha256=VonA8h8TGnVBiss5W8-K82lA01JQa7TLk0ubFo8iiBQ,364
|
|
186
190
|
uncountable/types/integration_server_t.py,sha256=pgtoyuW6QvGRawidJZFB-WnOdwCE4OIoJAvGfussZKU,1304
|
|
191
|
+
uncountable/types/integration_session.py,sha256=MVTtZa04INF4L8PxPjqz3l1Lse6Hze3IlYPs2bRSqE0,548
|
|
192
|
+
uncountable/types/integration_session_t.py,sha256=HEfmPB6pt9GpgdaGKG0kgsJwq6W0Lid9Jy7Dzghhaic,1920
|
|
187
193
|
uncountable/types/integrations.py,sha256=0fOhtbLIOl9w1GP9J3PTagRU8mjOKV48JNLLH3SJQP0,472
|
|
188
194
|
uncountable/types/integrations_t.py,sha256=ihyhuMDKtJarQ19OppS0fYpJUYd8o5-w6YCDE440O-w,1871
|
|
189
195
|
uncountable/types/job_definition.py,sha256=hYp5jPYLLYm3NKEqzQrQfXL0Ms5KgEQGTON13YWSPYk,1804
|
|
@@ -220,6 +226,8 @@ uncountable/types/response.py,sha256=SJTwjTxZGItGJJYPZ_T1zTooEbtR5ZA8GT_cf8aXfn8
|
|
|
220
226
|
uncountable/types/response_t.py,sha256=EJwr5j9IZrtmyD4k8PxHSmTtHa470XkZCQYIpbpsJx0,728
|
|
221
227
|
uncountable/types/secret_retrieval.py,sha256=poY_nuZBIjNu64Wa0x5Ytsmh3OdAxps2kzuDgv1sa_8,571
|
|
222
228
|
uncountable/types/secret_retrieval_t.py,sha256=igWrOW_CwRvAE7BHIHVJojBwgcAG05Pqup8D45Sb0F4,2342
|
|
229
|
+
uncountable/types/sockets.py,sha256=avkDlKqvvA9W492N9jrfYbnQlVWHN94hne39RM0cUxM,552
|
|
230
|
+
uncountable/types/sockets_t.py,sha256=EC3qRIegdIOcIITC1Y_O79xfo-FSevxsM_IhJ-Up_Bw,2224
|
|
223
231
|
uncountable/types/units.py,sha256=yxuddayiE8cnzrjQiIsURisWc-Vm1F37uyS3fjM--Ao,254
|
|
224
232
|
uncountable/types/units_t.py,sha256=d62vY2ETqIgMHASw_IcREwDDqKAqI-vPnoBOqzMt4-o,704
|
|
225
233
|
uncountable/types/users.py,sha256=R-bFIh07mMl6HyxP8hKmlT-QMbBXZPZ7mVuOIeOlCsg,254
|
|
@@ -240,7 +248,7 @@ uncountable/types/api/entity/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8A
|
|
|
240
248
|
uncountable/types/api/entity/create_entities.py,sha256=cCDEra2SHvGWvz7nIxxMDSQN6OWrHMTT0JSomWUesto,1794
|
|
241
249
|
uncountable/types/api/entity/create_entity.py,sha256=urT6C7iGAa7_rCv9Wcz6GM_lKg1tP55E__rjNkj-Rjc,1879
|
|
242
250
|
uncountable/types/api/entity/create_or_update_entity.py,sha256=cxjJIcZTKOg8Y5kGzctYKayfnr8BNZDOM5YfI4dBSf0,1532
|
|
243
|
-
uncountable/types/api/entity/export_entities.py,sha256=
|
|
251
|
+
uncountable/types/api/entity/export_entities.py,sha256=KGAkzHXbY28v7vcO_XyHVKQ-RVryI5dlYx4HdlYnBXw,1814
|
|
244
252
|
uncountable/types/api/entity/get_entities_data.py,sha256=hu0UfkU4PTyv3_CBZ7YmR8L8BKMq8hx6zH43XtUm16E,1616
|
|
245
253
|
uncountable/types/api/entity/grant_entity_permissions.py,sha256=4CvVIMvpdok8K1Bh6wMlwuUmoeP_-nL9y2GCEM6uAhY,1536
|
|
246
254
|
uncountable/types/api/entity/list_entities.py,sha256=LLc_QRH2LI7qPamxwF8DAPJCnfDo1Nw_0VGNDl6CMXI,2139
|
|
@@ -326,7 +334,7 @@ uncountable/types/api/uploader/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr
|
|
|
326
334
|
uncountable/types/api/uploader/invoke_uploader.py,sha256=Bj7Dq4A90k00suacwk3bLA_dCb2aovS1kAbVam2AQnM,1395
|
|
327
335
|
uncountable/types/api/user/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
328
336
|
uncountable/types/api/user/get_current_user_info.py,sha256=Avqi_RXtRgbefrT_dwJ9MrO6eDNSSa_Nu650FSuESlg,1109
|
|
329
|
-
uncountablepythonsdk-0.0.
|
|
330
|
-
uncountablepythonsdk-0.0.
|
|
331
|
-
uncountablepythonsdk-0.0.
|
|
332
|
-
uncountablepythonsdk-0.0.
|
|
337
|
+
uncountablepythonsdk-0.0.123.dist-info/METADATA,sha256=c7NEs2mALBXTpQlBv3lF7A8gkSNJ8VlC0EO2rGz-RyI,2174
|
|
338
|
+
uncountablepythonsdk-0.0.123.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
339
|
+
uncountablepythonsdk-0.0.123.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
|
|
340
|
+
uncountablepythonsdk-0.0.123.dist-info/RECORD,,
|
docs/quickstart.md
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Quickstart
|
|
2
|
-
|
|
3
|
-
## Installation
|
|
4
|
-
|
|
5
|
-
Install from PyPI:
|
|
6
|
-
|
|
7
|
-
```{code-block} bash
|
|
8
|
-
pip install UncountablePythonSDK
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
## Available SDK methods
|
|
12
|
-
See the following class for a reference for the available python sdk methods. Then see the example in the next section on how to setup and call these methods.
|
|
13
|
-
[](uncountable.types.client_base.ClientMethods)
|
|
14
|
-
|
|
15
|
-
## Run a simple example
|
|
16
|
-
|
|
17
|
-
```{literalinclude} ../examples/create_entity.py
|
|
18
|
-
```
|
|
19
|
-
|
|
File without changes
|
{uncountablepythonsdk-0.0.122.dist-info → uncountablepythonsdk-0.0.123.dist-info}/top_level.txt
RENAMED
|
File without changes
|