UncountablePythonSDK 0.0.115__py3-none-any.whl → 0.0.142.dev0__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 +52 -5
- docs/index.md +107 -4
- docs/integration_examples/create_ingredient.md +43 -0
- docs/integration_examples/create_output.md +56 -0
- docs/integration_examples/index.md +6 -0
- docs/justfile +1 -1
- docs/requirements.txt +3 -2
- examples/basic_auth.py +7 -0
- examples/integration-server/jobs/materials_auto/example_cron.py +3 -0
- examples/integration-server/jobs/materials_auto/example_http.py +19 -7
- examples/integration-server/jobs/materials_auto/example_instrument.py +100 -0
- examples/integration-server/jobs/materials_auto/example_parse.py +140 -0
- examples/integration-server/jobs/materials_auto/example_predictions.py +61 -0
- examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +57 -16
- examples/integration-server/jobs/materials_auto/profile.yaml +27 -0
- examples/integration-server/pyproject.toml +4 -4
- examples/oauth.py +7 -0
- pkgs/argument_parser/__init__.py +1 -0
- pkgs/argument_parser/_is_namedtuple.py +3 -0
- pkgs/argument_parser/argument_parser.py +22 -3
- pkgs/serialization_util/serialization_helpers.py +3 -1
- pkgs/type_spec/builder.py +66 -19
- pkgs/type_spec/builder_types.py +9 -0
- pkgs/type_spec/config.py +26 -5
- pkgs/type_spec/cross_output_links.py +10 -16
- pkgs/type_spec/emit_open_api.py +72 -22
- pkgs/type_spec/emit_open_api_util.py +1 -0
- pkgs/type_spec/emit_python.py +76 -12
- pkgs/type_spec/emit_typescript.py +48 -32
- pkgs/type_spec/emit_typescript_util.py +44 -6
- pkgs/type_spec/load_types.py +2 -2
- pkgs/type_spec/open_api_util.py +16 -1
- pkgs/type_spec/parts/base.ts.prepart +4 -0
- pkgs/type_spec/type_info/emit_type_info.py +37 -4
- pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +1 -0
- pkgs/type_spec/value_spec/__main__.py +2 -2
- pkgs/type_spec/value_spec/emit_python.py +6 -1
- uncountable/core/client.py +10 -3
- uncountable/integration/cli.py +175 -23
- uncountable/integration/executors/executors.py +1 -2
- uncountable/integration/executors/generic_upload_executor.py +1 -1
- uncountable/integration/http_server/types.py +3 -1
- uncountable/integration/job.py +35 -3
- uncountable/integration/queue_runner/command_server/__init__.py +4 -0
- uncountable/integration/queue_runner/command_server/command_client.py +89 -0
- uncountable/integration/queue_runner/command_server/command_server.py +117 -5
- uncountable/integration/queue_runner/command_server/constants.py +4 -0
- uncountable/integration/queue_runner/command_server/protocol/command_server.proto +51 -0
- uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +34 -11
- uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +102 -1
- uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +180 -0
- uncountable/integration/queue_runner/command_server/types.py +44 -1
- uncountable/integration/queue_runner/datastore/datastore_sqlite.py +189 -8
- uncountable/integration/queue_runner/datastore/interface.py +13 -0
- uncountable/integration/queue_runner/datastore/model.py +8 -1
- uncountable/integration/queue_runner/job_scheduler.py +85 -21
- uncountable/integration/queue_runner/queue_runner.py +10 -2
- uncountable/integration/queue_runner/types.py +2 -0
- uncountable/integration/queue_runner/worker.py +28 -29
- uncountable/integration/scheduler.py +121 -23
- uncountable/integration/server.py +36 -6
- uncountable/integration/telemetry.py +129 -8
- uncountable/integration/webhook_server/entrypoint.py +2 -0
- uncountable/types/__init__.py +38 -0
- uncountable/types/api/entity/create_or_update_entity.py +1 -0
- uncountable/types/api/entity/export_entities.py +13 -0
- uncountable/types/api/entity/list_aggregate.py +79 -0
- uncountable/types/api/entity/list_entities.py +25 -0
- uncountable/types/api/entity/set_barcode.py +43 -0
- uncountable/types/api/entity/transition_entity_phase.py +2 -1
- uncountable/types/api/files/download_file.py +15 -1
- uncountable/types/api/integrations/__init__.py +1 -0
- uncountable/types/api/integrations/publish_realtime_data.py +41 -0
- uncountable/types/api/integrations/push_notification.py +49 -0
- uncountable/types/api/integrations/register_sockets_token.py +41 -0
- uncountable/types/api/listing/__init__.py +1 -0
- uncountable/types/api/listing/fetch_listing.py +57 -0
- uncountable/types/api/notebooks/__init__.py +1 -0
- uncountable/types/api/notebooks/add_notebook_content.py +119 -0
- uncountable/types/api/outputs/get_output_organization.py +173 -0
- uncountable/types/api/recipes/edit_recipe_inputs.py +1 -1
- uncountable/types/api/recipes/get_recipe_output_metadata.py +2 -2
- uncountable/types/api/recipes/get_recipes_data.py +29 -0
- uncountable/types/api/recipes/lock_recipes.py +2 -1
- uncountable/types/api/recipes/set_recipe_total.py +59 -0
- uncountable/types/api/recipes/unlock_recipes.py +2 -1
- uncountable/types/api/runsheet/export_default_runsheet.py +44 -0
- uncountable/types/api/uploader/complete_async_parse.py +46 -0
- uncountable/types/api/user/__init__.py +1 -0
- uncountable/types/api/user/get_current_user_info.py +40 -0
- uncountable/types/async_batch_processor.py +266 -0
- uncountable/types/async_batch_t.py +5 -0
- uncountable/types/client_base.py +432 -2
- uncountable/types/client_config.py +1 -0
- uncountable/types/client_config_t.py +10 -0
- uncountable/types/entity_t.py +9 -1
- uncountable/types/exports_t.py +1 -0
- uncountable/types/integration_server_t.py +2 -0
- uncountable/types/integration_session.py +10 -0
- uncountable/types/integration_session_t.py +60 -0
- uncountable/types/integrations.py +10 -0
- uncountable/types/integrations_t.py +62 -0
- uncountable/types/listing.py +46 -0
- uncountable/types/listing_t.py +533 -0
- uncountable/types/notices.py +8 -0
- uncountable/types/notices_t.py +37 -0
- uncountable/types/notifications.py +11 -0
- uncountable/types/notifications_t.py +74 -0
- uncountable/types/queued_job.py +2 -0
- uncountable/types/queued_job_t.py +20 -2
- uncountable/types/sockets.py +20 -0
- uncountable/types/sockets_t.py +169 -0
- uncountable/types/uploader.py +24 -0
- uncountable/types/uploader_t.py +222 -0
- {uncountablepythonsdk-0.0.115.dist-info → uncountablepythonsdk-0.0.142.dev0.dist-info}/METADATA +5 -2
- {uncountablepythonsdk-0.0.115.dist-info → uncountablepythonsdk-0.0.142.dev0.dist-info}/RECORD +118 -79
- docs/quickstart.md +0 -19
- {uncountablepythonsdk-0.0.115.dist-info → uncountablepythonsdk-0.0.142.dev0.dist-info}/WHEEL +0 -0
- {uncountablepythonsdk-0.0.115.dist-info → uncountablepythonsdk-0.0.142.dev0.dist-info}/top_level.txt +0 -0
|
@@ -20,7 +20,9 @@ __all__: list[str] = [
|
|
|
20
20
|
"InvocationContextManual",
|
|
21
21
|
"InvocationContextType",
|
|
22
22
|
"InvocationContextWebhook",
|
|
23
|
+
"JobStatus",
|
|
23
24
|
"QueuedJob",
|
|
25
|
+
"QueuedJobMetadata",
|
|
24
26
|
"QueuedJobPayload",
|
|
25
27
|
"QueuedJobResult",
|
|
26
28
|
]
|
|
@@ -110,13 +112,29 @@ class QueuedJobResult:
|
|
|
110
112
|
|
|
111
113
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
112
114
|
@serial_class(
|
|
113
|
-
named_type_path="sdk.queued_job.
|
|
115
|
+
named_type_path="sdk.queued_job.QueuedJobMetadata",
|
|
114
116
|
)
|
|
115
117
|
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
116
|
-
class
|
|
118
|
+
class QueuedJobMetadata:
|
|
117
119
|
queued_job_uuid: str
|
|
118
120
|
job_ref_name: str
|
|
119
121
|
num_attempts: int
|
|
120
122
|
submitted_at: datetime.datetime
|
|
123
|
+
status: JobStatus | None = None
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
127
|
+
@serial_class(
|
|
128
|
+
named_type_path="sdk.queued_job.QueuedJob",
|
|
129
|
+
)
|
|
130
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
131
|
+
class QueuedJob(QueuedJobMetadata):
|
|
121
132
|
payload: QueuedJobPayload
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
136
|
+
class JobStatus(StrEnum):
|
|
137
|
+
QUEUED = "queued"
|
|
138
|
+
FAILED = "failed"
|
|
139
|
+
SUCCESS = "success"
|
|
122
140
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,20 @@
|
|
|
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
|
+
from .sockets_t import SocketEventType as SocketEventType
|
|
12
|
+
from .sockets_t import BaseSocketEventData as BaseSocketEventData
|
|
13
|
+
from .sockets_t import UsersInRoomUpdatedEventData as UsersInRoomUpdatedEventData
|
|
14
|
+
from .sockets_t import SocketEventData as SocketEventData
|
|
15
|
+
from .sockets_t import SocketResponse as SocketResponse
|
|
16
|
+
from .sockets_t import SocketClientMessageType as SocketClientMessageType
|
|
17
|
+
from .sockets_t import JoinRoomWithTokenSocketClientMessage as JoinRoomWithTokenSocketClientMessage
|
|
18
|
+
from .sockets_t import SendInstrumentReadingClientMessage as SendInstrumentReadingClientMessage
|
|
19
|
+
from .sockets_t import SocketClientMessage as SocketClientMessage
|
|
20
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,169 @@
|
|
|
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 pkgs.serialization import serial_alias_annotation
|
|
14
|
+
from . import base_t
|
|
15
|
+
from . import integration_session_t
|
|
16
|
+
|
|
17
|
+
__all__: list[str] = [
|
|
18
|
+
"BaseSocketEventData",
|
|
19
|
+
"JoinRoomWithTokenSocketClientMessage",
|
|
20
|
+
"SendInstrumentReadingClientMessage",
|
|
21
|
+
"SocketClientMessage",
|
|
22
|
+
"SocketClientMessageType",
|
|
23
|
+
"SocketEventData",
|
|
24
|
+
"SocketEventType",
|
|
25
|
+
"SocketRequestBase",
|
|
26
|
+
"SocketRequestIntegrationSession",
|
|
27
|
+
"SocketRequestType",
|
|
28
|
+
"SocketResponse",
|
|
29
|
+
"SocketTokenRequest",
|
|
30
|
+
"SocketTokenResponse",
|
|
31
|
+
"UsersInRoomUpdatedEventData",
|
|
32
|
+
]
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
36
|
+
@serial_class(
|
|
37
|
+
named_type_path="sdk.sockets.SocketRequestBase",
|
|
38
|
+
)
|
|
39
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
40
|
+
class SocketRequestBase:
|
|
41
|
+
type: SocketRequestType
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
45
|
+
class SocketRequestType(StrEnum):
|
|
46
|
+
INTEGRATION_SESSION = "integration_session"
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
50
|
+
@serial_class(
|
|
51
|
+
named_type_path="sdk.sockets.SocketRequestIntegrationSession",
|
|
52
|
+
parse_require={"type"},
|
|
53
|
+
)
|
|
54
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
55
|
+
class SocketRequestIntegrationSession(SocketRequestBase):
|
|
56
|
+
type: typing.Literal[SocketRequestType.INTEGRATION_SESSION] = SocketRequestType.INTEGRATION_SESSION
|
|
57
|
+
integration_session: integration_session_t.IntegrationSession
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
61
|
+
SocketTokenRequest = typing.Annotated[
|
|
62
|
+
typing.Union[SocketRequestIntegrationSession],
|
|
63
|
+
serial_union_annotation(
|
|
64
|
+
named_type_path="sdk.sockets.SocketTokenRequest",
|
|
65
|
+
discriminator="type",
|
|
66
|
+
discriminator_map={
|
|
67
|
+
"integration_session": SocketRequestIntegrationSession,
|
|
68
|
+
},
|
|
69
|
+
),
|
|
70
|
+
]
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
74
|
+
@serial_class(
|
|
75
|
+
named_type_path="sdk.sockets.SocketTokenResponse",
|
|
76
|
+
)
|
|
77
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
78
|
+
class SocketTokenResponse:
|
|
79
|
+
token: str
|
|
80
|
+
room_key: str
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
84
|
+
class SocketEventType(StrEnum):
|
|
85
|
+
USERS_IN_ROOM_UPDATED = "users_in_room_updated"
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
89
|
+
@serial_class(
|
|
90
|
+
named_type_path="sdk.sockets.BaseSocketEventData",
|
|
91
|
+
)
|
|
92
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
93
|
+
class BaseSocketEventData:
|
|
94
|
+
pass
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
98
|
+
@serial_class(
|
|
99
|
+
named_type_path="sdk.sockets.UsersInRoomUpdatedEventData",
|
|
100
|
+
parse_require={"type"},
|
|
101
|
+
)
|
|
102
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
103
|
+
class UsersInRoomUpdatedEventData(BaseSocketEventData):
|
|
104
|
+
type: typing.Literal[SocketEventType.USERS_IN_ROOM_UPDATED] = SocketEventType.USERS_IN_ROOM_UPDATED
|
|
105
|
+
user_ids: list[base_t.ObjectId]
|
|
106
|
+
number_of_connections: int
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
110
|
+
SocketEventData = typing.Annotated[
|
|
111
|
+
typing.Union[UsersInRoomUpdatedEventData],
|
|
112
|
+
serial_alias_annotation(
|
|
113
|
+
named_type_path="sdk.sockets.SocketEventData",
|
|
114
|
+
),
|
|
115
|
+
]
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
119
|
+
@serial_class(
|
|
120
|
+
named_type_path="sdk.sockets.SocketResponse",
|
|
121
|
+
)
|
|
122
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
123
|
+
class SocketResponse:
|
|
124
|
+
data: SocketEventData
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
128
|
+
class SocketClientMessageType(StrEnum):
|
|
129
|
+
JOIN_ROOM_WITH_TOKEN = "join_room_with_token"
|
|
130
|
+
SEND_INSTRUMENT_READING = "send_instrument_reading"
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
134
|
+
@serial_class(
|
|
135
|
+
named_type_path="sdk.sockets.JoinRoomWithTokenSocketClientMessage",
|
|
136
|
+
parse_require={"type"},
|
|
137
|
+
)
|
|
138
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
139
|
+
class JoinRoomWithTokenSocketClientMessage:
|
|
140
|
+
type: typing.Literal[SocketClientMessageType.JOIN_ROOM_WITH_TOKEN] = SocketClientMessageType.JOIN_ROOM_WITH_TOKEN
|
|
141
|
+
token: str
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
145
|
+
@serial_class(
|
|
146
|
+
named_type_path="sdk.sockets.SendInstrumentReadingClientMessage",
|
|
147
|
+
to_string_values={"value"},
|
|
148
|
+
parse_require={"type"},
|
|
149
|
+
)
|
|
150
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
151
|
+
class SendInstrumentReadingClientMessage:
|
|
152
|
+
type: typing.Literal[SocketClientMessageType.SEND_INSTRUMENT_READING] = SocketClientMessageType.SEND_INSTRUMENT_READING
|
|
153
|
+
room_key: str
|
|
154
|
+
value: Decimal
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
158
|
+
SocketClientMessage = typing.Annotated[
|
|
159
|
+
JoinRoomWithTokenSocketClientMessage | SendInstrumentReadingClientMessage,
|
|
160
|
+
serial_union_annotation(
|
|
161
|
+
named_type_path="sdk.sockets.SocketClientMessage",
|
|
162
|
+
discriminator="type",
|
|
163
|
+
discriminator_map={
|
|
164
|
+
"join_room_with_token": JoinRoomWithTokenSocketClientMessage,
|
|
165
|
+
"send_instrument_reading": SendInstrumentReadingClientMessage,
|
|
166
|
+
},
|
|
167
|
+
),
|
|
168
|
+
]
|
|
169
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,24 @@
|
|
|
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 .uploader_t import HeaderType as HeaderType
|
|
7
|
+
from .uploader_t import ChannelType as ChannelType
|
|
8
|
+
from .uploader_t import StructureElementType as StructureElementType
|
|
9
|
+
from .uploader_t import StructureElementBase as StructureElementBase
|
|
10
|
+
from .uploader_t import DecimalValue as DecimalValue
|
|
11
|
+
from .uploader_t import StringValue as StringValue
|
|
12
|
+
from .uploader_t import BaseData as BaseData
|
|
13
|
+
from .uploader_t import NumericHeaderData as NumericHeaderData
|
|
14
|
+
from .uploader_t import TextHeaderData as TextHeaderData
|
|
15
|
+
from .uploader_t import HeaderValue as HeaderValue
|
|
16
|
+
from .uploader_t import NumericChannelData as NumericChannelData
|
|
17
|
+
from .uploader_t import TimestampChannelData as TimestampChannelData
|
|
18
|
+
from .uploader_t import TextChannelData as TextChannelData
|
|
19
|
+
from .uploader_t import Channel as Channel
|
|
20
|
+
from .uploader_t import DataChannel as DataChannel
|
|
21
|
+
from .uploader_t import HeaderEntry as HeaderEntry
|
|
22
|
+
from .uploader_t import StructureElement as StructureElement
|
|
23
|
+
from .uploader_t import ParsedFileData as ParsedFileData
|
|
24
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,222 @@
|
|
|
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
|
+
|
|
15
|
+
__all__: list[str] = [
|
|
16
|
+
"BaseData",
|
|
17
|
+
"Channel",
|
|
18
|
+
"ChannelType",
|
|
19
|
+
"DataChannel",
|
|
20
|
+
"DecimalValue",
|
|
21
|
+
"HeaderEntry",
|
|
22
|
+
"HeaderType",
|
|
23
|
+
"HeaderValue",
|
|
24
|
+
"NumericChannelData",
|
|
25
|
+
"NumericHeaderData",
|
|
26
|
+
"ParsedFileData",
|
|
27
|
+
"StringValue",
|
|
28
|
+
"StructureElement",
|
|
29
|
+
"StructureElementBase",
|
|
30
|
+
"StructureElementType",
|
|
31
|
+
"TextChannelData",
|
|
32
|
+
"TextHeaderData",
|
|
33
|
+
"TimestampChannelData",
|
|
34
|
+
]
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
38
|
+
class HeaderType(StrEnum):
|
|
39
|
+
NUMERIC_HEADER = "numeric_header"
|
|
40
|
+
TEXT_HEADER = "text_header"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
44
|
+
class ChannelType(StrEnum):
|
|
45
|
+
NUMERIC_CHANNEL = "numeric_channel"
|
|
46
|
+
TIMESTAMP_CHANNEL = "timestamp_channel"
|
|
47
|
+
TEXT_CHANNEL = "text_channel"
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
51
|
+
class StructureElementType(StrEnum):
|
|
52
|
+
CHANNEL = "channel"
|
|
53
|
+
HEADER = "header"
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
57
|
+
@serial_class(
|
|
58
|
+
named_type_path="sdk.uploader.StructureElementBase",
|
|
59
|
+
)
|
|
60
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
61
|
+
class StructureElementBase:
|
|
62
|
+
type: StructureElementType
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
66
|
+
@serial_class(
|
|
67
|
+
named_type_path="sdk.uploader.DecimalValue",
|
|
68
|
+
to_string_values={"value"},
|
|
69
|
+
)
|
|
70
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
71
|
+
class DecimalValue:
|
|
72
|
+
value: Decimal
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
76
|
+
@serial_class(
|
|
77
|
+
named_type_path="sdk.uploader.StringValue",
|
|
78
|
+
)
|
|
79
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
80
|
+
class StringValue:
|
|
81
|
+
value: str
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
85
|
+
@serial_class(
|
|
86
|
+
named_type_path="sdk.uploader.BaseData",
|
|
87
|
+
)
|
|
88
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
89
|
+
class BaseData:
|
|
90
|
+
name: str
|
|
91
|
+
type: str
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
95
|
+
@serial_class(
|
|
96
|
+
named_type_path="sdk.uploader.NumericHeaderData",
|
|
97
|
+
parse_require={"type"},
|
|
98
|
+
)
|
|
99
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
100
|
+
class NumericHeaderData(BaseData):
|
|
101
|
+
type: typing.Literal[HeaderType.NUMERIC_HEADER] = HeaderType.NUMERIC_HEADER
|
|
102
|
+
data: DecimalValue | None
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
106
|
+
@serial_class(
|
|
107
|
+
named_type_path="sdk.uploader.TextHeaderData",
|
|
108
|
+
parse_require={"type"},
|
|
109
|
+
)
|
|
110
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
111
|
+
class TextHeaderData(BaseData):
|
|
112
|
+
type: typing.Literal[HeaderType.TEXT_HEADER] = HeaderType.TEXT_HEADER
|
|
113
|
+
data: StringValue | None
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
117
|
+
HeaderValue = typing.Annotated[
|
|
118
|
+
NumericHeaderData | TextHeaderData,
|
|
119
|
+
serial_union_annotation(
|
|
120
|
+
named_type_path="sdk.uploader.HeaderValue",
|
|
121
|
+
discriminator="type",
|
|
122
|
+
discriminator_map={
|
|
123
|
+
"numeric_header": NumericHeaderData,
|
|
124
|
+
"text_header": TextHeaderData,
|
|
125
|
+
},
|
|
126
|
+
),
|
|
127
|
+
]
|
|
128
|
+
|
|
129
|
+
|
|
130
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
131
|
+
@serial_class(
|
|
132
|
+
named_type_path="sdk.uploader.NumericChannelData",
|
|
133
|
+
parse_require={"type"},
|
|
134
|
+
)
|
|
135
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
136
|
+
class NumericChannelData(BaseData):
|
|
137
|
+
type: typing.Literal[ChannelType.NUMERIC_CHANNEL] = ChannelType.NUMERIC_CHANNEL
|
|
138
|
+
data: list[DecimalValue]
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
142
|
+
@serial_class(
|
|
143
|
+
named_type_path="sdk.uploader.TimestampChannelData",
|
|
144
|
+
parse_require={"type"},
|
|
145
|
+
)
|
|
146
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
147
|
+
class TimestampChannelData(BaseData):
|
|
148
|
+
type: typing.Literal[ChannelType.TIMESTAMP_CHANNEL] = ChannelType.TIMESTAMP_CHANNEL
|
|
149
|
+
data: list[DecimalValue]
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
153
|
+
@serial_class(
|
|
154
|
+
named_type_path="sdk.uploader.TextChannelData",
|
|
155
|
+
parse_require={"type"},
|
|
156
|
+
)
|
|
157
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
158
|
+
class TextChannelData(BaseData):
|
|
159
|
+
type: typing.Literal[ChannelType.TEXT_CHANNEL] = ChannelType.TEXT_CHANNEL
|
|
160
|
+
data: list[StringValue]
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
164
|
+
Channel = typing.Annotated[
|
|
165
|
+
TextChannelData | TimestampChannelData | NumericChannelData,
|
|
166
|
+
serial_union_annotation(
|
|
167
|
+
named_type_path="sdk.uploader.Channel",
|
|
168
|
+
discriminator="type",
|
|
169
|
+
discriminator_map={
|
|
170
|
+
"text_channel": TextChannelData,
|
|
171
|
+
"timestamp_channel": TimestampChannelData,
|
|
172
|
+
"numeric_channel": NumericChannelData,
|
|
173
|
+
},
|
|
174
|
+
),
|
|
175
|
+
]
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
179
|
+
@serial_class(
|
|
180
|
+
named_type_path="sdk.uploader.DataChannel",
|
|
181
|
+
parse_require={"type"},
|
|
182
|
+
)
|
|
183
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
184
|
+
class DataChannel(StructureElementBase):
|
|
185
|
+
type: typing.Literal[StructureElementType.CHANNEL] = StructureElementType.CHANNEL
|
|
186
|
+
channel: Channel
|
|
187
|
+
|
|
188
|
+
|
|
189
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
190
|
+
@serial_class(
|
|
191
|
+
named_type_path="sdk.uploader.HeaderEntry",
|
|
192
|
+
parse_require={"type"},
|
|
193
|
+
)
|
|
194
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
195
|
+
class HeaderEntry(StructureElementBase):
|
|
196
|
+
type: typing.Literal[StructureElementType.HEADER] = StructureElementType.HEADER
|
|
197
|
+
value: HeaderValue
|
|
198
|
+
|
|
199
|
+
|
|
200
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
201
|
+
StructureElement = typing.Annotated[
|
|
202
|
+
DataChannel | HeaderEntry,
|
|
203
|
+
serial_union_annotation(
|
|
204
|
+
named_type_path="sdk.uploader.StructureElement",
|
|
205
|
+
discriminator="type",
|
|
206
|
+
discriminator_map={
|
|
207
|
+
"channel": DataChannel,
|
|
208
|
+
"header": HeaderEntry,
|
|
209
|
+
},
|
|
210
|
+
),
|
|
211
|
+
]
|
|
212
|
+
|
|
213
|
+
|
|
214
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
215
|
+
@serial_class(
|
|
216
|
+
named_type_path="sdk.uploader.ParsedFileData",
|
|
217
|
+
)
|
|
218
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
219
|
+
class ParsedFileData:
|
|
220
|
+
file_name: str
|
|
221
|
+
file_structures: list[StructureElement]
|
|
222
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
{uncountablepythonsdk-0.0.115.dist-info → uncountablepythonsdk-0.0.142.dev0.dist-info}/METADATA
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.142.dev0
|
|
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
|
|
@@ -40,12 +40,15 @@ Requires-Dist: protobuf>=4.21.1
|
|
|
40
40
|
Requires-Dist: azure-storage-blob==12.*
|
|
41
41
|
Requires-Dist: boto3-stubs[essential,ses]==1.*
|
|
42
42
|
Requires-Dist: msgspec==0.19.*
|
|
43
|
+
Requires-Dist: tabulate==0.9.0
|
|
44
|
+
Requires-Dist: types-psutil~=5.9.5
|
|
45
|
+
Requires-Dist: psutil>=5.9.0
|
|
43
46
|
Provides-Extra: test
|
|
44
47
|
Requires-Dist: mypy==1.*; extra == "test"
|
|
45
48
|
Requires-Dist: ruff==0.*; extra == "test"
|
|
46
49
|
Requires-Dist: pytest==8.*; extra == "test"
|
|
47
50
|
Requires-Dist: coverage[toml]==7.*; extra == "test"
|
|
48
|
-
Requires-Dist: pytest-cov==
|
|
51
|
+
Requires-Dist: pytest-cov==7.*; extra == "test"
|
|
49
52
|
Requires-Dist: pytest-xdist==3.*; extra == "test"
|
|
50
53
|
|
|
51
54
|
# Uncountable Python SDK
|