UncountablePythonSDK 0.0.176__py3-none-any.whl → 0.0.178__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.
- docs/conf.py +20 -0
- pkgs/filesystem_utils/__init__.py +31 -0
- pkgs/serialization/opaque_key.py +2 -0
- pkgs/strenum_compat/__init__.py +2 -0
- uncountable/core/client.py +4 -0
- uncountable/core/file_upload.py +18 -13
- uncountable/core/query/builder.py +10 -1
- uncountable/core/query/column.py +29 -0
- uncountable/integration/telemetry.py +4 -0
- uncountable/types/api/integrations/publish_realtime_data.py +1 -1
- uncountable/types/client_base.py +1 -1
- uncountable/types/entity_t.py +6 -0
- {uncountablepythonsdk-0.0.176.dist-info → uncountablepythonsdk-0.0.178.dist-info}/METADATA +1 -1
- {uncountablepythonsdk-0.0.176.dist-info → uncountablepythonsdk-0.0.178.dist-info}/RECORD +16 -16
- {uncountablepythonsdk-0.0.176.dist-info → uncountablepythonsdk-0.0.178.dist-info}/WHEEL +0 -0
- {uncountablepythonsdk-0.0.176.dist-info → uncountablepythonsdk-0.0.178.dist-info}/top_level.txt +0 -0
docs/conf.py
CHANGED
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
# https://www.sphinx-doc.org/en/master/usage/configuration.html#project-information
|
|
8
8
|
|
|
9
9
|
import datetime
|
|
10
|
+
import importlib
|
|
11
|
+
import inspect
|
|
10
12
|
|
|
11
13
|
from docutils import nodes # type: ignore[import-untyped]
|
|
12
14
|
from sphinx.addnodes import pending_xref # type: ignore[import-not-found]
|
|
@@ -63,6 +65,20 @@ favicons = [
|
|
|
63
65
|
]
|
|
64
66
|
|
|
65
67
|
|
|
68
|
+
def _resolve_alias_to_real_module(target_module: str) -> str:
|
|
69
|
+
if "." not in target_module:
|
|
70
|
+
return target_module
|
|
71
|
+
parent_name, attr_name = target_module.rsplit(".", 1)
|
|
72
|
+
try:
|
|
73
|
+
parent = importlib.import_module(parent_name)
|
|
74
|
+
except ImportError:
|
|
75
|
+
return target_module
|
|
76
|
+
aliased = getattr(parent, attr_name, None)
|
|
77
|
+
if not inspect.ismodule(aliased) or aliased.__name__ == target_module:
|
|
78
|
+
return target_module
|
|
79
|
+
return aliased.__name__
|
|
80
|
+
|
|
81
|
+
|
|
66
82
|
def _hook_missing_reference(
|
|
67
83
|
_app: Sphinx, _env: BuildEnvironment, node: pending_xref, contnode: nodes.Text
|
|
68
84
|
) -> nodes.reference | None:
|
|
@@ -80,6 +96,10 @@ def _hook_missing_reference(
|
|
|
80
96
|
return None
|
|
81
97
|
|
|
82
98
|
target_module, target_name = target.rsplit(".", 1)
|
|
99
|
+
real_module = _resolve_alias_to_real_module(target_module)
|
|
100
|
+
if real_module != target_module:
|
|
101
|
+
target_module = real_module
|
|
102
|
+
target = f"{target_module}.{target_name}"
|
|
83
103
|
|
|
84
104
|
# construct relative path from current doc page to target page
|
|
85
105
|
relative_segments_to_root = [".." for _ in current_doc.split("/")]
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# CLOSED MODULE
|
|
2
|
+
|
|
1
3
|
from ._blob_session import BlobSession as BlobSession
|
|
2
4
|
from ._file_share_session import FileShareSession as FileShareSession
|
|
3
5
|
from ._gdrive_session import (
|
|
@@ -32,3 +34,32 @@ from .file_type_utils import (
|
|
|
32
34
|
RemoteObjectReference as RemoteObjectReference,
|
|
33
35
|
)
|
|
34
36
|
from .filesystem_session import FileSystemSession as FileSystemSession
|
|
37
|
+
|
|
38
|
+
__all__ = [
|
|
39
|
+
"BlobSession",
|
|
40
|
+
"FileObjectData",
|
|
41
|
+
"FileShareSession",
|
|
42
|
+
"FileSystemBlobConfig",
|
|
43
|
+
"FileSystemFileReference",
|
|
44
|
+
"FileSystemFileShareConfig",
|
|
45
|
+
"FileSystemObject",
|
|
46
|
+
"FileSystemS3Config",
|
|
47
|
+
"FileSystemSFTPConfig",
|
|
48
|
+
"FileSystemSession",
|
|
49
|
+
"FileTransfer",
|
|
50
|
+
"GDriveSession",
|
|
51
|
+
"IncompatibleFileReference",
|
|
52
|
+
"LocalSession",
|
|
53
|
+
"RemoteObjectReference",
|
|
54
|
+
"S3Session",
|
|
55
|
+
"SFTPConnection",
|
|
56
|
+
"SFTPCredentialError",
|
|
57
|
+
"SFTPSession",
|
|
58
|
+
"delete_gdrive_file",
|
|
59
|
+
"download_gdrive_file",
|
|
60
|
+
"list_gdrive_files",
|
|
61
|
+
"list_sftp_files",
|
|
62
|
+
"move_gdrive_file",
|
|
63
|
+
"move_sftp_files",
|
|
64
|
+
"upload_file_gdrive",
|
|
65
|
+
]
|
pkgs/serialization/opaque_key.py
CHANGED
pkgs/strenum_compat/__init__.py
CHANGED
uncountable/core/client.py
CHANGED
|
@@ -298,6 +298,10 @@ class Client(ClientMethods):
|
|
|
298
298
|
else None
|
|
299
299
|
)
|
|
300
300
|
response = self._send_request(request, timeout=timeout)
|
|
301
|
+
if self._cfg.logger is not None:
|
|
302
|
+
self._cfg.logger.set_span_attribute(
|
|
303
|
+
"http.status_code", response.status_code
|
|
304
|
+
)
|
|
301
305
|
response_data = self._get_response_json(response, request_id=request_id)
|
|
302
306
|
cached_parser = self._get_cached_parser(return_type)
|
|
303
307
|
try:
|
uncountable/core/file_upload.py
CHANGED
|
@@ -17,6 +17,7 @@ from uncountable.types import uploader_t
|
|
|
17
17
|
from .types import AuthDetailsAll, AuthDetailsApiKey
|
|
18
18
|
|
|
19
19
|
_CHUNK_SIZE = 5 * 1024 * 1024 # s3 requires 5MiB minimum
|
|
20
|
+
_PARSED_FILE_DATA_FILENAME = "parsed_file_data.json"
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
class FileUploadType(StrEnum):
|
|
@@ -51,17 +52,27 @@ class UploaderFileUpload:
|
|
|
51
52
|
FileUpload = MediaFileUpload | DataFileUpload | UploaderFileUpload
|
|
52
53
|
|
|
53
54
|
|
|
54
|
-
@dataclass(kw_only=True)
|
|
55
|
-
class _ParsedFileDataWrapper:
|
|
56
|
-
parsed_file_data: list[uploader_t.ParsedFileData]
|
|
57
|
-
|
|
58
|
-
|
|
59
55
|
@dataclass(kw_only=True)
|
|
60
56
|
class FileBytes:
|
|
61
57
|
name: str
|
|
62
58
|
bytes_data: BytesIO
|
|
63
59
|
|
|
64
60
|
|
|
61
|
+
def _build_parsed_file_data_bytes(
|
|
62
|
+
*, parsed_file_data: list[uploader_t.ParsedFileData]
|
|
63
|
+
) -> FileBytes:
|
|
64
|
+
buffer = BytesIO()
|
|
65
|
+
buffer.write(b'{"parsed_file_data": [')
|
|
66
|
+
for index, file_data in enumerate(parsed_file_data):
|
|
67
|
+
if index > 0:
|
|
68
|
+
buffer.write(b", ")
|
|
69
|
+
serialized_file_data = serialize_for_storage(file_data)
|
|
70
|
+
buffer.write(json.dumps(serialized_file_data).encode("utf-8"))
|
|
71
|
+
buffer.write(b"]}")
|
|
72
|
+
buffer.seek(0)
|
|
73
|
+
return FileBytes(name=_PARSED_FILE_DATA_FILENAME, bytes_data=buffer)
|
|
74
|
+
|
|
75
|
+
|
|
65
76
|
@contextmanager
|
|
66
77
|
def file_upload_data(file_upload: FileUpload) -> Generator[FileBytes, None, None]:
|
|
67
78
|
match file_upload:
|
|
@@ -73,15 +84,9 @@ def file_upload_data(file_upload: FileUpload) -> Generator[FileBytes, None, None
|
|
|
73
84
|
case DataFileUpload():
|
|
74
85
|
yield FileBytes(name=file_upload.name, bytes_data=file_upload.data)
|
|
75
86
|
case UploaderFileUpload():
|
|
76
|
-
|
|
87
|
+
yield _build_parsed_file_data_bytes(
|
|
77
88
|
parsed_file_data=file_upload.parsed_file_data
|
|
78
89
|
)
|
|
79
|
-
serialized = serialize_for_storage(wrapper)
|
|
80
|
-
json_bytes = json.dumps(serialized).encode("utf-8")
|
|
81
|
-
yield FileBytes(
|
|
82
|
-
name="parsed_file_data.json",
|
|
83
|
-
bytes_data=BytesIO(json_bytes),
|
|
84
|
-
)
|
|
85
90
|
|
|
86
91
|
|
|
87
92
|
@dataclass(kw_only=True)
|
|
@@ -135,7 +140,7 @@ class FileUploader:
|
|
|
135
140
|
case DataFileUpload():
|
|
136
141
|
attributes["file_name"] = file_upload.name
|
|
137
142
|
case UploaderFileUpload():
|
|
138
|
-
attributes["file_name"] =
|
|
143
|
+
attributes["file_name"] = _PARSED_FILE_DATA_FILENAME
|
|
139
144
|
case _:
|
|
140
145
|
assert_never(file_upload)
|
|
141
146
|
with push_scope_optional(
|
|
@@ -13,6 +13,7 @@ from uncountable.core.query.column import (
|
|
|
13
13
|
Column,
|
|
14
14
|
ColumnFilter,
|
|
15
15
|
EnumColumn,
|
|
16
|
+
JsonColumn,
|
|
16
17
|
NullableColumn,
|
|
17
18
|
PrimaryKeyColumn,
|
|
18
19
|
get_column_base,
|
|
@@ -72,8 +73,16 @@ class QueryBuilder[QueryRowT: QueryRow]:
|
|
|
72
73
|
column.identifier for column in column_definitions.values()
|
|
73
74
|
)
|
|
74
75
|
self._property_names: tuple[str, ...] = tuple(column_definitions.keys())
|
|
76
|
+
json_property_names = {
|
|
77
|
+
name
|
|
78
|
+
for name, column in column_definitions.items()
|
|
79
|
+
if isinstance(column, JsonColumn)
|
|
80
|
+
}
|
|
75
81
|
self._parser: CachedParser = CachedParser(
|
|
76
|
-
serial_class(
|
|
82
|
+
serial_class(
|
|
83
|
+
unconverted_keys={*self._property_names},
|
|
84
|
+
unconverted_values=json_property_names,
|
|
85
|
+
)(
|
|
77
86
|
make_dataclass(
|
|
78
87
|
cls_name=self._model.__name__,
|
|
79
88
|
fields=[
|
uncountable/core/query/column.py
CHANGED
|
@@ -465,6 +465,27 @@ class NullableTextsColumn[
|
|
|
465
465
|
# IMPROVE: Implement "Not Exists" filter (when supported in SDK)
|
|
466
466
|
|
|
467
467
|
|
|
468
|
+
class JsonColumn(Column[base_t.JsonValue, NullableColumn]):
|
|
469
|
+
__hash__ = Column.__hash__
|
|
470
|
+
|
|
471
|
+
def __init__(self, identifier: listing_t.ColumnIdentifier) -> None:
|
|
472
|
+
super().__init__(
|
|
473
|
+
identifier=identifier,
|
|
474
|
+
nullable=NullableColumn,
|
|
475
|
+
value_type=(
|
|
476
|
+
dict[str, base_t.JsonValue] | list[base_t.JsonValue] | base_t.JsonScalar
|
|
477
|
+
),
|
|
478
|
+
)
|
|
479
|
+
|
|
480
|
+
def __ne__(self, other: None) -> ColumnFilter: # type: ignore[override]
|
|
481
|
+
return ColumnFilter(
|
|
482
|
+
identifier=self.identifier,
|
|
483
|
+
filter=lambda identifier: listing_t.FilterSpecExists(column=identifier),
|
|
484
|
+
)
|
|
485
|
+
|
|
486
|
+
# IMPROVE: Implement "Not Exists" filter (when supported in SDK)
|
|
487
|
+
|
|
488
|
+
|
|
468
489
|
class PrimaryKeyColumn(
|
|
469
490
|
Column[base_t.ObjectId, NonNullableColumn],
|
|
470
491
|
):
|
|
@@ -684,6 +705,10 @@ class IdColumn[
|
|
|
684
705
|
column: NullableTextsColumn[BaseNullableT],
|
|
685
706
|
) -> NullableTextsColumn[BaseNullableT]: ...
|
|
686
707
|
|
|
708
|
+
# Json
|
|
709
|
+
@overload
|
|
710
|
+
def __rshift__(self, column: JsonColumn) -> JsonColumn: ...
|
|
711
|
+
|
|
687
712
|
# Ids
|
|
688
713
|
@overload
|
|
689
714
|
def __rshift__[
|
|
@@ -734,6 +759,7 @@ class IdColumn[
|
|
|
734
759
|
| NumericColumn[BaseNullableT]
|
|
735
760
|
| TextsColumn[BaseNullableT]
|
|
736
761
|
| NullableTextsColumn[BaseNullableT]
|
|
762
|
+
| JsonColumn
|
|
737
763
|
| IdsColumn[BaseNullableT]
|
|
738
764
|
| IdColumn[BaseNullableT],
|
|
739
765
|
) -> (
|
|
@@ -768,6 +794,7 @@ class IdColumn[
|
|
|
768
794
|
| NullableTextsColumn[BaseNullableT]
|
|
769
795
|
| NullableTextsColumn[NonNullableColumn | NullableColumn]
|
|
770
796
|
| NullableTextsColumn[NullableColumn]
|
|
797
|
+
| JsonColumn
|
|
771
798
|
| IdsColumn[BaseNullableT]
|
|
772
799
|
| IdsColumn[NonNullableColumn | NullableColumn]
|
|
773
800
|
| IdsColumn[NullableColumn]
|
|
@@ -869,6 +896,8 @@ class IdColumn[
|
|
|
869
896
|
if self.nullable is NonNullableColumn
|
|
870
897
|
else NullableColumn,
|
|
871
898
|
)
|
|
899
|
+
case JsonColumn():
|
|
900
|
+
return JsonColumn(identifier=transitive_identifier)
|
|
872
901
|
case IdsColumn():
|
|
873
902
|
return IdsColumn(
|
|
874
903
|
id_type=column.id_type,
|
|
@@ -27,6 +27,7 @@ from opentelemetry.sdk.trace.export import (
|
|
|
27
27
|
SimpleSpanProcessor,
|
|
28
28
|
)
|
|
29
29
|
from opentelemetry.trace import Span, Tracer
|
|
30
|
+
from opentelemetry.util.types import AttributeValue
|
|
30
31
|
|
|
31
32
|
from pkgs.serialization_util import dict_fields
|
|
32
33
|
from uncountable.core.environment import (
|
|
@@ -188,6 +189,9 @@ class Logger:
|
|
|
188
189
|
)
|
|
189
190
|
otel_logger.emit(log_record)
|
|
190
191
|
|
|
192
|
+
def set_span_attribute(self, key: str, value: AttributeValue) -> None:
|
|
193
|
+
self._current_span_with_fallback().set_attribute(key, value)
|
|
194
|
+
|
|
191
195
|
def bind(self, *, attributes: Attributes) -> None:
|
|
192
196
|
# Bound attributes flow into log records and the X-UNC-METADATA request
|
|
193
197
|
# header on outbound API calls. The header is capped at 2048 bytes; if
|
|
@@ -22,7 +22,7 @@ __all__: list[str] = [
|
|
|
22
22
|
|
|
23
23
|
ENDPOINT_METHOD = "POST"
|
|
24
24
|
ENDPOINT_PATH = "api/external/integrations/publish_realtime_data"
|
|
25
|
-
ENDPOINT_DESCRIPTION = "Publish a numeric reading for a realtime instrument integration. Currently only supports equipment entities. Resolves the target equipment via identifier key. Returns the integration session details and status.
|
|
25
|
+
ENDPOINT_DESCRIPTION = "Publish a numeric reading for a realtime instrument integration. Currently only supports equipment entities. Resolves the target equipment via identifier key. Returns the integration session details and status. Contact Uncountable for realtime integration guidance."
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
# DO NOT MODIFY -- This file is generated by type_spec
|
uncountable/types/client_base.py
CHANGED
|
@@ -1713,7 +1713,7 @@ class ClientMethods(ABC):
|
|
|
1713
1713
|
data_package: integrations_t.DataPackage,
|
|
1714
1714
|
_request_options: client_config_t.RequestOptions | None = None,
|
|
1715
1715
|
) -> publish_realtime_data_t.Data:
|
|
1716
|
-
"""Publish a numeric reading for a realtime instrument integration. Currently only supports equipment entities. Resolves the target equipment via identifier key. Returns the integration session details and status.
|
|
1716
|
+
"""Publish a numeric reading for a realtime instrument integration. Currently only supports equipment entities. Resolves the target equipment via identifier key. Returns the integration session details and status. Contact Uncountable for realtime integration guidance.
|
|
1717
1717
|
|
|
1718
1718
|
"""
|
|
1719
1719
|
args = publish_realtime_data_t.Arguments(
|
uncountable/types/entity_t.py
CHANGED
|
@@ -48,9 +48,11 @@ __all__: list[str] = [
|
|
|
48
48
|
"condition_parameter_matches": "Condition Parameter Matches",
|
|
49
49
|
"condition_parameter_rule": "Condition Parameter Rule",
|
|
50
50
|
"condition_parameter_value": "Condition Parameter Value",
|
|
51
|
+
"config_transfer_export": "Config Transfer Export",
|
|
51
52
|
"constraint": "Constraint",
|
|
52
53
|
"constraint_set": "Constraint Set",
|
|
53
54
|
"control_type": "Control Type",
|
|
55
|
+
"credit_balance": "Credit Balance",
|
|
54
56
|
"curve_settings": "Curve Settings",
|
|
55
57
|
"custom_entity": "Custom Entity",
|
|
56
58
|
"default_permissions_new_project": "Default Permissions New Project",
|
|
@@ -82,6 +84,7 @@ __all__: list[str] = [
|
|
|
82
84
|
"external_ai_connector": "External AI Connector",
|
|
83
85
|
"external_ai_model": "External AI Model",
|
|
84
86
|
"external_ai_session": "External AI Session",
|
|
87
|
+
"external_ai_usage": "External AI Usage",
|
|
85
88
|
"experiment_group": "Experiment Group",
|
|
86
89
|
"experiment_group_member": "Experiment Group Member",
|
|
87
90
|
"experiment_group_type": "Experiment Group Type",
|
|
@@ -299,9 +302,11 @@ class EntityType(StrEnum):
|
|
|
299
302
|
CONDITION_PARAMETER_MATCHES = "condition_parameter_matches"
|
|
300
303
|
CONDITION_PARAMETER_RULE = "condition_parameter_rule"
|
|
301
304
|
CONDITION_PARAMETER_VALUE = "condition_parameter_value"
|
|
305
|
+
CONFIG_TRANSFER_EXPORT = "config_transfer_export"
|
|
302
306
|
CONSTRAINT = "constraint"
|
|
303
307
|
CONSTRAINT_SET = "constraint_set"
|
|
304
308
|
CONTROL_TYPE = "control_type"
|
|
309
|
+
CREDIT_BALANCE = "credit_balance"
|
|
305
310
|
CURVE_SETTINGS = "curve_settings"
|
|
306
311
|
CUSTOM_ENTITY = "custom_entity"
|
|
307
312
|
DEFAULT_PERMISSIONS_NEW_PROJECT = "default_permissions_new_project"
|
|
@@ -333,6 +338,7 @@ class EntityType(StrEnum):
|
|
|
333
338
|
EXTERNAL_AI_CONNECTOR = "external_ai_connector"
|
|
334
339
|
EXTERNAL_AI_MODEL = "external_ai_model"
|
|
335
340
|
EXTERNAL_AI_SESSION = "external_ai_session"
|
|
341
|
+
EXTERNAL_AI_USAGE = "external_ai_usage"
|
|
336
342
|
EXPERIMENT_GROUP = "experiment_group"
|
|
337
343
|
EXPERIMENT_GROUP_MEMBER = "experiment_group_member"
|
|
338
344
|
EXPERIMENT_GROUP_TYPE = "experiment_group_type"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.178
|
|
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,6 +1,6 @@
|
|
|
1
1
|
docs/.flowmarkignore,sha256=gmJziQDpI3zbfHFgM73BE9iaLn04Oqya_7QCjJ749o8,548
|
|
2
2
|
docs/.gitignore,sha256=_ebkZUcwfvfnGEJ95rfj1lxoBNd6EE9ZvtOc7FsbfFE,7
|
|
3
|
-
docs/conf.py,sha256=
|
|
3
|
+
docs/conf.py,sha256=KivJNvQWboXqJ07NMgcYY5tsV6CoIfyTpZh8jdn_5Qk,4239
|
|
4
4
|
docs/index.md,sha256=g4Yi5831fEkywYkkcFohYLkKzSI91SOZF7DxKsm9zgI,3193
|
|
5
5
|
docs/justfile,sha256=WymCEQ6W2A8Ak79iUPmecmuaUNN2htb7STUrz5K7ELE,273
|
|
6
6
|
docs/requirements.txt,sha256=8aqtVaNV4AlzUZ7nAM8kxOF1ccAcujhQ_ayU9Whksf8,172
|
|
@@ -55,7 +55,7 @@ pkgs/argument_parser/parser_function_type.py,sha256=xmsg0YVseYbUx52qC9vP-_m9F_He
|
|
|
55
55
|
pkgs/argument_parser/parser_inner.py,sha256=yteyamw3ZyMSQtDujkXgQVIpbtrpFbtjahtDNVKoGEE,23887
|
|
56
56
|
pkgs/argument_parser/parser_options.py,sha256=NAwNZSIH8EjyfJXJSxbn4kYmF3K7D3HuOedlSjjsF28,1332
|
|
57
57
|
pkgs/argument_parser/type_predicates.py,sha256=CkQexiseN05XDz4e34K3gIOlER5LG5Ke8u0UHK4gC04,1157
|
|
58
|
-
pkgs/filesystem_utils/__init__.py,sha256=
|
|
58
|
+
pkgs/filesystem_utils/__init__.py,sha256=G-Nl0sxJsSgBB6yajzzY9aeSSBnkzJHGq3lj5LFn8fw,2056
|
|
59
59
|
pkgs/filesystem_utils/_blob_session.py,sha256=YB_idar5qVuF9QN_A6qjpTuyeZ7JDOLri1LGLfPHLow,5158
|
|
60
60
|
pkgs/filesystem_utils/_file_share_session.py,sha256=xlxCbNtOOT1xXCiL2Y_unjWZlQ9961J7mAz4D0-uea8,5095
|
|
61
61
|
pkgs/filesystem_utils/_gdrive_session.py,sha256=4P2MSsA0GNxIYJxvmf7zKR8dM8oVMCCSzDIEkGA7XqE,11089
|
|
@@ -68,7 +68,7 @@ pkgs/filesystem_utils/filesystem_session.py,sha256=BQ2Go8Mu9-GcnaWh2Pm4x7ugLVsre
|
|
|
68
68
|
pkgs/serialization/__init__.py,sha256=5OWO4IicaVrTWgRdC6E1K4dLYy2xQ6xQujDOuglykNU,1059
|
|
69
69
|
pkgs/serialization/annotation.py,sha256=JXP2caXNoj8h_Pvx_26iarPlsaPcIqe1qssTksJiKjM,3408
|
|
70
70
|
pkgs/serialization/missing_sentry.py,sha256=VCXiYs7s5MkfG8kbmwDAswdq0fL4zFRj4B2uSQzmTos,819
|
|
71
|
-
pkgs/serialization/opaque_key.py,sha256=
|
|
71
|
+
pkgs/serialization/opaque_key.py,sha256=QepNPlAnzpOgLI0ztc9BRB7Xr_wLoVozxfHmL0C6slg,233
|
|
72
72
|
pkgs/serialization/serial_alias.py,sha256=ABEGtSEapeW95wo9NT4srEhzdGaP5RhB8EyWSyWhwKg,1337
|
|
73
73
|
pkgs/serialization/serial_class.py,sha256=AfWHdGlnEY2O2GbwU-SXZp7ZbTlPoigZ624QGp8kkuE,7099
|
|
74
74
|
pkgs/serialization/serial_generic.py,sha256=qdG46rw5jnvckmKezxwMSJEIF-9Y4K5FdTezS1vRSgI,476
|
|
@@ -80,7 +80,7 @@ pkgs/serialization_util/_get_type_for_serialization.py,sha256=dW5_W9MFd6wgWfW5ql
|
|
|
80
80
|
pkgs/serialization_util/convert_to_snakecase.py,sha256=H2BAo5ZdcCDN77RpLb-uP0s7-FQ5Ukwnsd3VYc1vD0M,583
|
|
81
81
|
pkgs/serialization_util/dataclasses.py,sha256=uhNGXQPQLZblDFQuuwkAGmKOPiRyfDzCdg72CVtYJGA,390
|
|
82
82
|
pkgs/serialization_util/serialization_helpers.py,sha256=v8omOQ2BRZZCzMeUwu29fCEqx0UNDJ_iNbqpW4oHk84,7804
|
|
83
|
-
pkgs/strenum_compat/__init__.py,sha256=
|
|
83
|
+
pkgs/strenum_compat/__init__.py,sha256=Bq1kcPIQsXRiLUGWc63QGnVa5BlhvuFWpMMvdNcHy00,76
|
|
84
84
|
pkgs/strenum_compat/strenum_compat.py,sha256=uOUAgpYTjHs1MX8dG81jRlyTkt3KNbkV_25zp7xTX2s,36
|
|
85
85
|
pkgs/type_spec/__init__.py,sha256=h5DmJTca4QVV10sZR1x0-MlkZfuGYDfapR3zHvXfzto,19
|
|
86
86
|
pkgs/type_spec/__main__.py,sha256=5bJaX9Y_-FavP0qwzhk-z-V97UY7uaezJTa1zhO_HHQ,1048
|
|
@@ -118,13 +118,13 @@ uncountable/__init__.py,sha256=8l8XWNCKsu7TG94c-xa2KHpDegvxDC2FyQISdWC763Y,89
|
|
|
118
118
|
uncountable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
119
119
|
uncountable/core/__init__.py,sha256=RFv0kO6rKFf1PtBPu83hCGmxqkJamRtsgQ9_-ztw7tA,341
|
|
120
120
|
uncountable/core/async_batch.py,sha256=9pYGFzVCQXt8059qFHgutweGIFPquJ5Xfq6NT5P-1K0,1206
|
|
121
|
-
uncountable/core/client.py,sha256=
|
|
121
|
+
uncountable/core/client.py,sha256=I5q47V5Xre7ZjqLW8Dd7BRJtlpcWiTJQdaxrn8QjaQ8,16726
|
|
122
122
|
uncountable/core/environment.py,sha256=Z9vu7JtnSDgQB_KKcZnjTFNyARXjRr_PDW9krwxNNAo,1132
|
|
123
|
-
uncountable/core/file_upload.py,sha256=
|
|
123
|
+
uncountable/core/file_upload.py,sha256=IisvIBdm2f4CJTRQ9Awi5JuI16PSERjXrzZgmrUiCHY,5960
|
|
124
124
|
uncountable/core/types.py,sha256=s2CjqYJpsmbC7xMwxxT7kJ_V9bwokrjjWVVjpMcQpKI,333
|
|
125
125
|
uncountable/core/query/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
|
-
uncountable/core/query/builder.py,sha256=
|
|
127
|
-
uncountable/core/query/column.py,sha256=
|
|
126
|
+
uncountable/core/query/builder.py,sha256=LmPHfi0wdNGVn1hdYxTAU1MTsIDlVc_lgWBZFVVmZR8,8510
|
|
127
|
+
uncountable/core/query/column.py,sha256=q5Yy41oS8MNrNaHAZVoftooJExPymm2tmCTF-BAPsoY,45231
|
|
128
128
|
uncountable/core/query/row.py,sha256=dy68YKvMz336nyOsj_g2oNTLKBuUnKRUz5n99sApfT0,1600
|
|
129
129
|
uncountable/core/query/types.py,sha256=xZgc0_O1PIxZoJWQhxkg3qnSvHj3yt-bv9QX1UCOFGw,481
|
|
130
130
|
uncountable/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -137,7 +137,7 @@ uncountable/integration/request_context.py,sha256=N_FJJxqvfUJ0yV9h3I3vFTGNJiDfyL
|
|
|
137
137
|
uncountable/integration/scan_profiles.py,sha256=86CQgrQ-zXl3p41ERazzbzhTIIjIh_BprWVfYTSHHE4,3259
|
|
138
138
|
uncountable/integration/scheduler.py,sha256=BajQ4txvgEBw8S9x1P0eGm-uBkKp_oecJK65SQd2hNw,8477
|
|
139
139
|
uncountable/integration/server.py,sha256=P4RRGwU9jMselHPWbU6GxhRLgVtN7Ydcxr18sFn2zI8,5778
|
|
140
|
-
uncountable/integration/telemetry.py,sha256=
|
|
140
|
+
uncountable/integration/telemetry.py,sha256=zvg-K8uy49vQxWgInXAx-Sz8jHC0IWT1kdzPQdp9ROA,16162
|
|
141
141
|
uncountable/integration/webhook_signature_key.py,sha256=vXlNtj0qLqZxjKDLmRvlChvLS5xoPAGmYcYcs4WIVaM,3882
|
|
142
142
|
uncountable/integration/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
143
143
|
uncountable/integration/db/connect.py,sha256=mE3bdV0huclH2iT_dXCQdRL4LkjIuf_myAR64RTWXEs,498
|
|
@@ -186,7 +186,7 @@ uncountable/types/calculations.py,sha256=fApOFpgBemt_t7IVneVR0VdI3X5EOxiG6Xhzr6R
|
|
|
186
186
|
uncountable/types/calculations_t.py,sha256=_K4MDVoxa6AgxlxPrEDBujWhEGWEhUQuE2-ZgiLg9OU,660
|
|
187
187
|
uncountable/types/chemical_structure.py,sha256=ujyragaD26-QG5jgKnWhO7TN3N1V9b_04T2WhqNYxxo,281
|
|
188
188
|
uncountable/types/chemical_structure_t.py,sha256=tbA7NBO-vv7Hnk3-ETxc6Pw3wqWeenBG27Y9_bdPCu4,785
|
|
189
|
-
uncountable/types/client_base.py,sha256=
|
|
189
|
+
uncountable/types/client_base.py,sha256=h3uIZLAyJR_FPo3SAKXgkk6HDTGAaLmcio3klzcIIM0,134982
|
|
190
190
|
uncountable/types/client_config.py,sha256=M7FZ0m_lGmBsIYcMn8pm92DdoVzrLpzd8sH6DqTQLKo,456
|
|
191
191
|
uncountable/types/client_config_t.py,sha256=-YNp-zFvk5OL6_WGwGSx30ToK2bGIOh0kv_HN7KcCys,1796
|
|
192
192
|
uncountable/types/condition_match.py,sha256=ekDzij7-e1PtVwIslSjD1T9fuBIDr5c_7QPdaasiGJw,262
|
|
@@ -196,7 +196,7 @@ uncountable/types/curves_t.py,sha256=WIML06C67yC4KWdPJR2HV_Ac7eBFTDRDUL3YgeXbFOs
|
|
|
196
196
|
uncountable/types/data.py,sha256=u2isf4XEug3Eu-xSIoqGaCQmW2dFaKBHCkP_WKYwwBc,500
|
|
197
197
|
uncountable/types/data_t.py,sha256=U_dIh5GcyaJlkrHEI4Qf4TOo1uJX07PYO70sYzzKtTo,2615
|
|
198
198
|
uncountable/types/entity.py,sha256=Zclk1LYcRaYrMDhqyCjMSLEg0fE6_q8LHvV22Qvscgs,566
|
|
199
|
-
uncountable/types/entity_t.py,sha256=
|
|
199
|
+
uncountable/types/entity_t.py,sha256=LyANi9Myj5gVAMta5AN9ijiTjwOwJeKNCQ12vrmY_VQ,27852
|
|
200
200
|
uncountable/types/experiment_groups.py,sha256=qUpFOx1AKgzaT_4khCOv5Xs6jwiQGbvHH-GUh3v1nv4,288
|
|
201
201
|
uncountable/types/experiment_groups_t.py,sha256=QjZBdjnbsD1D-VpPSSV6hBg-Q7mujjKvYtdMewtXNVU,712
|
|
202
202
|
uncountable/types/exports.py,sha256=VMmxUO2PpV1Y63hZ2AnVor4H-B6aswJ7YpSru_u89lU,334
|
|
@@ -341,7 +341,7 @@ uncountable/types/api/inputs/set_input_category.py,sha256=EWQdlp-qhgtOOf0bwdjvix
|
|
|
341
341
|
uncountable/types/api/inputs/set_input_subcategories.py,sha256=5nJgffEe-9Fh_VUXqZkI6Uwoa36D0d4lIhADtRGr7tk,1615
|
|
342
342
|
uncountable/types/api/inputs/set_intermediate_type.py,sha256=Qsrjv67hvNHIad58kFm-8BcD1Ny8wzkuLz3aIB7ybSw,1641
|
|
343
343
|
uncountable/types/api/integrations/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
344
|
-
uncountable/types/api/integrations/publish_realtime_data.py,sha256=
|
|
344
|
+
uncountable/types/api/integrations/publish_realtime_data.py,sha256=R5efPtt3RMEwoazLiqblndRPd57RTF1YajgwWiieH1Y,1938
|
|
345
345
|
uncountable/types/api/integrations/push_notification.py,sha256=cqJv-qXI97jg8HFdoDF-KYaxSUgV3fqD1N614WZvaBw,1701
|
|
346
346
|
uncountable/types/api/integrations/register_sockets_token.py,sha256=LJ_1LSfjVjTz-uhZkjcIw80Ah8D9pgdjQGjsTSS8gtM,1393
|
|
347
347
|
uncountable/types/api/listing/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
@@ -414,7 +414,7 @@ uncountable/types/api/uploader/complete_async_parse.py,sha256=Os1HAubxTlbut6Gylj
|
|
|
414
414
|
uncountable/types/api/uploader/invoke_uploader.py,sha256=QU1KmAFgGHSWskZEKfaAww8rCj-hVNP0i4kMQE3x3Fc,1822
|
|
415
415
|
uncountable/types/api/user/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
|
|
416
416
|
uncountable/types/api/user/get_current_user_info.py,sha256=BT7bGp5SOHz3XdKWhhdZ6acnInafT2PgdJ-H4YH3W7c,1181
|
|
417
|
-
uncountablepythonsdk-0.0.
|
|
418
|
-
uncountablepythonsdk-0.0.
|
|
419
|
-
uncountablepythonsdk-0.0.
|
|
420
|
-
uncountablepythonsdk-0.0.
|
|
417
|
+
uncountablepythonsdk-0.0.178.dist-info/METADATA,sha256=wl_jrsVOIztNXhFZhDki7qQA8B6rK8U-suwvKFcL5nk,2175
|
|
418
|
+
uncountablepythonsdk-0.0.178.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
|
|
419
|
+
uncountablepythonsdk-0.0.178.dist-info/top_level.txt,sha256=1UVGjAU-6hJY9qw2iJ7nCBeEwZ793AEN5ZfKX9A1uj4,31
|
|
420
|
+
uncountablepythonsdk-0.0.178.dist-info/RECORD,,
|
|
File without changes
|
{uncountablepythonsdk-0.0.176.dist-info → uncountablepythonsdk-0.0.178.dist-info}/top_level.txt
RENAMED
|
File without changes
|