UncountablePythonSDK 0.0.82__py3-none-any.whl → 0.0.132__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.

Files changed (298) hide show
  1. docs/conf.py +54 -7
  2. docs/index.md +107 -4
  3. docs/integration_examples/create_ingredient.md +43 -0
  4. docs/integration_examples/create_output.md +56 -0
  5. docs/integration_examples/index.md +6 -0
  6. docs/justfile +2 -2
  7. docs/requirements.txt +6 -4
  8. examples/basic_auth.py +7 -0
  9. examples/create_ingredient_sdk.py +34 -0
  10. examples/download_files.py +26 -0
  11. examples/integration-server/jobs/materials_auto/concurrent_cron.py +11 -0
  12. examples/integration-server/jobs/materials_auto/example_cron.py +3 -0
  13. examples/integration-server/jobs/materials_auto/example_http.py +47 -0
  14. examples/integration-server/jobs/materials_auto/example_instrument.py +100 -0
  15. examples/integration-server/jobs/materials_auto/example_parse.py +140 -0
  16. examples/integration-server/jobs/materials_auto/example_predictions.py +61 -0
  17. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +39 -0
  18. examples/integration-server/jobs/materials_auto/example_wh.py +17 -9
  19. examples/integration-server/jobs/materials_auto/profile.yaml +61 -0
  20. examples/integration-server/pyproject.toml +10 -10
  21. examples/oauth.py +7 -0
  22. examples/set_recipe_metadata_file.py +1 -1
  23. examples/upload_files.py +1 -2
  24. pkgs/argument_parser/__init__.py +8 -0
  25. pkgs/argument_parser/_is_namedtuple.py +3 -0
  26. pkgs/argument_parser/argument_parser.py +196 -63
  27. pkgs/filesystem_utils/__init__.py +1 -0
  28. pkgs/filesystem_utils/_blob_session.py +144 -0
  29. pkgs/filesystem_utils/_gdrive_session.py +5 -5
  30. pkgs/filesystem_utils/_s3_session.py +2 -1
  31. pkgs/filesystem_utils/_sftp_session.py +6 -3
  32. pkgs/filesystem_utils/file_type_utils.py +30 -10
  33. pkgs/serialization/__init__.py +7 -2
  34. pkgs/serialization/annotation.py +64 -0
  35. pkgs/serialization/missing_sentry.py +1 -1
  36. pkgs/serialization/opaque_key.py +1 -1
  37. pkgs/serialization/serial_alias.py +47 -0
  38. pkgs/serialization/serial_class.py +40 -48
  39. pkgs/serialization/serial_generic.py +16 -0
  40. pkgs/serialization/serial_union.py +16 -16
  41. pkgs/serialization_util/__init__.py +6 -0
  42. pkgs/serialization_util/dataclasses.py +14 -0
  43. pkgs/serialization_util/serialization_helpers.py +15 -5
  44. pkgs/type_spec/actions_registry/__main__.py +0 -4
  45. pkgs/type_spec/actions_registry/emit_typescript.py +2 -4
  46. pkgs/type_spec/builder.py +248 -70
  47. pkgs/type_spec/builder_types.py +9 -0
  48. pkgs/type_spec/config.py +40 -7
  49. pkgs/type_spec/cross_output_links.py +99 -0
  50. pkgs/type_spec/emit_open_api.py +121 -34
  51. pkgs/type_spec/emit_open_api_util.py +5 -5
  52. pkgs/type_spec/emit_python.py +277 -86
  53. pkgs/type_spec/emit_typescript.py +102 -29
  54. pkgs/type_spec/emit_typescript_util.py +66 -10
  55. pkgs/type_spec/load_types.py +16 -3
  56. pkgs/type_spec/non_discriminated_union_exceptions.py +14 -0
  57. pkgs/type_spec/open_api_util.py +29 -4
  58. pkgs/type_spec/parts/base.py.prepart +11 -8
  59. pkgs/type_spec/parts/base.ts.prepart +4 -0
  60. pkgs/type_spec/type_info/__main__.py +3 -1
  61. pkgs/type_spec/type_info/emit_type_info.py +115 -22
  62. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  63. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +308 -0
  64. pkgs/type_spec/util.py +3 -3
  65. pkgs/type_spec/value_spec/__main__.py +26 -9
  66. pkgs/type_spec/value_spec/convert_type.py +18 -0
  67. pkgs/type_spec/value_spec/emit_python.py +13 -3
  68. pkgs/type_spec/value_spec/types.py +1 -1
  69. uncountable/core/async_batch.py +1 -1
  70. uncountable/core/client.py +133 -34
  71. uncountable/core/environment.py +3 -3
  72. uncountable/core/file_upload.py +39 -15
  73. uncountable/integration/cli.py +116 -23
  74. uncountable/integration/construct_client.py +3 -3
  75. uncountable/integration/executors/executors.py +12 -2
  76. uncountable/integration/executors/generic_upload_executor.py +66 -14
  77. uncountable/integration/http_server/__init__.py +5 -0
  78. uncountable/integration/http_server/types.py +69 -0
  79. uncountable/integration/job.py +192 -7
  80. uncountable/integration/queue_runner/command_server/__init__.py +4 -0
  81. uncountable/integration/queue_runner/command_server/command_client.py +65 -0
  82. uncountable/integration/queue_runner/command_server/command_server.py +83 -5
  83. uncountable/integration/queue_runner/command_server/constants.py +4 -0
  84. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +36 -0
  85. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +28 -11
  86. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +77 -1
  87. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +135 -0
  88. uncountable/integration/queue_runner/command_server/types.py +25 -2
  89. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +168 -11
  90. uncountable/integration/queue_runner/datastore/interface.py +10 -0
  91. uncountable/integration/queue_runner/datastore/model.py +8 -1
  92. uncountable/integration/queue_runner/job_scheduler.py +63 -23
  93. uncountable/integration/queue_runner/queue_runner.py +10 -2
  94. uncountable/integration/queue_runner/worker.py +22 -17
  95. uncountable/integration/scan_profiles.py +1 -1
  96. uncountable/integration/scheduler.py +74 -25
  97. uncountable/integration/secret_retrieval/retrieve_secret.py +1 -1
  98. uncountable/integration/server.py +42 -12
  99. uncountable/integration/telemetry.py +63 -10
  100. uncountable/integration/webhook_server/entrypoint.py +39 -112
  101. uncountable/types/__init__.py +58 -1
  102. uncountable/types/api/batch/execute_batch.py +5 -6
  103. uncountable/types/api/batch/execute_batch_load_async.py +2 -3
  104. uncountable/types/api/chemical/convert_chemical_formats.py +10 -5
  105. uncountable/types/api/condition_parameters/__init__.py +1 -0
  106. uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
  107. uncountable/types/api/entity/create_entities.py +7 -7
  108. uncountable/types/api/entity/create_entity.py +8 -8
  109. uncountable/types/api/entity/create_or_update_entity.py +48 -0
  110. uncountable/types/api/entity/export_entities.py +59 -0
  111. uncountable/types/api/entity/get_entities_data.py +3 -4
  112. uncountable/types/api/entity/grant_entity_permissions.py +6 -6
  113. uncountable/types/api/entity/list_aggregate.py +79 -0
  114. uncountable/types/api/entity/list_entities.py +34 -10
  115. uncountable/types/api/entity/lock_entity.py +4 -4
  116. uncountable/types/api/entity/lookup_entity.py +116 -0
  117. uncountable/types/api/entity/resolve_entity_ids.py +5 -6
  118. uncountable/types/api/entity/set_entity_field_values.py +44 -0
  119. uncountable/types/api/entity/set_values.py +3 -3
  120. uncountable/types/api/entity/transition_entity_phase.py +14 -7
  121. uncountable/types/api/entity/unlock_entity.py +3 -3
  122. uncountable/types/api/equipment/associate_equipment_input.py +2 -3
  123. uncountable/types/api/field_options/upsert_field_options.py +7 -7
  124. uncountable/types/api/files/__init__.py +1 -0
  125. uncountable/types/api/files/download_file.py +77 -0
  126. uncountable/types/api/id_source/list_id_source.py +6 -7
  127. uncountable/types/api/id_source/match_id_source.py +4 -5
  128. uncountable/types/api/input_groups/get_input_group_names.py +3 -4
  129. uncountable/types/api/inputs/create_inputs.py +10 -9
  130. uncountable/types/api/inputs/get_input_data.py +11 -12
  131. uncountable/types/api/inputs/get_input_names.py +6 -7
  132. uncountable/types/api/inputs/get_inputs_data.py +6 -7
  133. uncountable/types/api/inputs/set_input_attribute_values.py +5 -6
  134. uncountable/types/api/inputs/set_input_category.py +5 -5
  135. uncountable/types/api/inputs/set_input_subcategories.py +3 -3
  136. uncountable/types/api/inputs/set_intermediate_type.py +4 -4
  137. uncountable/types/api/integrations/__init__.py +1 -0
  138. uncountable/types/api/integrations/publish_realtime_data.py +41 -0
  139. uncountable/types/api/integrations/push_notification.py +49 -0
  140. uncountable/types/api/integrations/register_sockets_token.py +41 -0
  141. uncountable/types/api/listing/__init__.py +1 -0
  142. uncountable/types/api/listing/fetch_listing.py +58 -0
  143. uncountable/types/api/material_families/update_entity_material_families.py +3 -4
  144. uncountable/types/api/notebooks/__init__.py +1 -0
  145. uncountable/types/api/notebooks/add_notebook_content.py +119 -0
  146. uncountable/types/api/outputs/get_output_data.py +12 -13
  147. uncountable/types/api/outputs/get_output_names.py +5 -6
  148. uncountable/types/api/outputs/get_output_organization.py +173 -0
  149. uncountable/types/api/outputs/resolve_output_conditions.py +7 -8
  150. uncountable/types/api/permissions/set_core_permissions.py +16 -10
  151. uncountable/types/api/project/get_projects.py +6 -7
  152. uncountable/types/api/project/get_projects_data.py +7 -8
  153. uncountable/types/api/recipe_links/create_recipe_link.py +5 -5
  154. uncountable/types/api/recipe_links/remove_recipe_link.py +4 -4
  155. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +6 -7
  156. uncountable/types/api/recipes/add_recipe_to_project.py +3 -3
  157. uncountable/types/api/recipes/add_time_series_data.py +64 -0
  158. uncountable/types/api/recipes/archive_recipes.py +4 -4
  159. uncountable/types/api/recipes/associate_recipe_as_input.py +5 -5
  160. uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -3
  161. uncountable/types/api/recipes/clear_recipe_outputs.py +3 -3
  162. uncountable/types/api/recipes/create_mix_order.py +44 -0
  163. uncountable/types/api/recipes/create_recipe.py +8 -9
  164. uncountable/types/api/recipes/create_recipes.py +8 -9
  165. uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -3
  166. uncountable/types/api/recipes/edit_recipe_inputs.py +101 -24
  167. uncountable/types/api/recipes/get_column_calculation_values.py +4 -5
  168. uncountable/types/api/recipes/get_curve.py +4 -5
  169. uncountable/types/api/recipes/get_recipe_calculations.py +6 -7
  170. uncountable/types/api/recipes/get_recipe_links.py +3 -4
  171. uncountable/types/api/recipes/get_recipe_names.py +3 -4
  172. uncountable/types/api/recipes/get_recipe_output_metadata.py +5 -6
  173. uncountable/types/api/recipes/get_recipes_data.py +62 -34
  174. uncountable/types/api/recipes/lock_recipes.py +9 -8
  175. uncountable/types/api/recipes/remove_recipe_from_project.py +3 -3
  176. uncountable/types/api/recipes/set_recipe_inputs.py +9 -10
  177. uncountable/types/api/recipes/set_recipe_metadata.py +3 -3
  178. uncountable/types/api/recipes/set_recipe_output_annotations.py +11 -12
  179. uncountable/types/api/recipes/set_recipe_output_file.py +5 -6
  180. uncountable/types/api/recipes/set_recipe_outputs.py +24 -13
  181. uncountable/types/api/recipes/set_recipe_tags.py +14 -9
  182. uncountable/types/api/recipes/set_recipe_total.py +59 -0
  183. uncountable/types/api/recipes/unarchive_recipes.py +3 -3
  184. uncountable/types/api/recipes/unlock_recipes.py +7 -6
  185. uncountable/types/api/runsheet/__init__.py +1 -0
  186. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  187. uncountable/types/api/triggers/run_trigger.py +4 -4
  188. uncountable/types/api/uploader/complete_async_parse.py +46 -0
  189. uncountable/types/api/uploader/invoke_uploader.py +4 -5
  190. uncountable/types/api/user/__init__.py +1 -0
  191. uncountable/types/api/user/get_current_user_info.py +40 -0
  192. uncountable/types/async_batch.py +1 -1
  193. uncountable/types/async_batch_processor.py +506 -23
  194. uncountable/types/async_batch_t.py +35 -8
  195. uncountable/types/async_jobs.py +0 -1
  196. uncountable/types/async_jobs_t.py +1 -2
  197. uncountable/types/auth_retrieval.py +0 -1
  198. uncountable/types/auth_retrieval_t.py +6 -6
  199. uncountable/types/base.py +0 -1
  200. uncountable/types/base_t.py +11 -9
  201. uncountable/types/calculations.py +0 -1
  202. uncountable/types/calculations_t.py +1 -2
  203. uncountable/types/chemical_structure.py +0 -1
  204. uncountable/types/chemical_structure_t.py +5 -5
  205. uncountable/types/client_base.py +614 -69
  206. uncountable/types/client_config.py +1 -1
  207. uncountable/types/client_config_t.py +13 -3
  208. uncountable/types/curves.py +0 -1
  209. uncountable/types/curves_t.py +6 -7
  210. uncountable/types/data.py +12 -0
  211. uncountable/types/data_t.py +103 -0
  212. uncountable/types/entity.py +1 -1
  213. uncountable/types/entity_t.py +90 -10
  214. uncountable/types/experiment_groups.py +0 -1
  215. uncountable/types/experiment_groups_t.py +1 -2
  216. uncountable/types/exports.py +8 -0
  217. uncountable/types/exports_t.py +34 -0
  218. uncountable/types/field_values.py +19 -1
  219. uncountable/types/field_values_t.py +242 -9
  220. uncountable/types/fields.py +0 -1
  221. uncountable/types/fields_t.py +1 -2
  222. uncountable/types/generic_upload.py +0 -1
  223. uncountable/types/generic_upload_t.py +14 -14
  224. uncountable/types/id_source.py +0 -1
  225. uncountable/types/id_source_t.py +13 -7
  226. uncountable/types/identifier.py +0 -1
  227. uncountable/types/identifier_t.py +10 -5
  228. uncountable/types/input_attributes.py +0 -1
  229. uncountable/types/input_attributes_t.py +3 -4
  230. uncountable/types/inputs.py +0 -1
  231. uncountable/types/inputs_t.py +3 -4
  232. uncountable/types/integration_server.py +0 -1
  233. uncountable/types/integration_server_t.py +13 -4
  234. uncountable/types/integration_session.py +10 -0
  235. uncountable/types/integration_session_t.py +60 -0
  236. uncountable/types/integrations.py +10 -0
  237. uncountable/types/integrations_t.py +62 -0
  238. uncountable/types/job_definition.py +2 -1
  239. uncountable/types/job_definition_t.py +57 -32
  240. uncountable/types/listing.py +9 -0
  241. uncountable/types/listing_t.py +51 -0
  242. uncountable/types/notices.py +8 -0
  243. uncountable/types/notices_t.py +37 -0
  244. uncountable/types/notifications.py +11 -0
  245. uncountable/types/notifications_t.py +74 -0
  246. uncountable/types/outputs.py +0 -1
  247. uncountable/types/outputs_t.py +2 -3
  248. uncountable/types/overrides.py +0 -1
  249. uncountable/types/overrides_t.py +10 -4
  250. uncountable/types/permissions.py +0 -1
  251. uncountable/types/permissions_t.py +1 -2
  252. uncountable/types/phases.py +0 -1
  253. uncountable/types/phases_t.py +1 -2
  254. uncountable/types/post_base.py +0 -1
  255. uncountable/types/post_base_t.py +1 -2
  256. uncountable/types/queued_job.py +2 -1
  257. uncountable/types/queued_job_t.py +29 -12
  258. uncountable/types/recipe_identifiers.py +0 -1
  259. uncountable/types/recipe_identifiers_t.py +18 -8
  260. uncountable/types/recipe_inputs.py +0 -1
  261. uncountable/types/recipe_inputs_t.py +1 -2
  262. uncountable/types/recipe_links.py +0 -1
  263. uncountable/types/recipe_links_t.py +3 -4
  264. uncountable/types/recipe_metadata.py +0 -1
  265. uncountable/types/recipe_metadata_t.py +9 -10
  266. uncountable/types/recipe_output_metadata.py +0 -1
  267. uncountable/types/recipe_output_metadata_t.py +1 -2
  268. uncountable/types/recipe_tags.py +0 -1
  269. uncountable/types/recipe_tags_t.py +1 -2
  270. uncountable/types/recipe_workflow_steps.py +0 -1
  271. uncountable/types/recipe_workflow_steps_t.py +7 -7
  272. uncountable/types/recipes.py +0 -1
  273. uncountable/types/recipes_t.py +2 -2
  274. uncountable/types/response.py +0 -1
  275. uncountable/types/response_t.py +2 -2
  276. uncountable/types/secret_retrieval.py +0 -1
  277. uncountable/types/secret_retrieval_t.py +7 -7
  278. uncountable/types/sockets.py +20 -0
  279. uncountable/types/sockets_t.py +169 -0
  280. uncountable/types/structured_filters.py +25 -0
  281. uncountable/types/structured_filters_t.py +248 -0
  282. uncountable/types/units.py +0 -1
  283. uncountable/types/units_t.py +1 -2
  284. uncountable/types/uploader.py +24 -0
  285. uncountable/types/uploader_t.py +222 -0
  286. uncountable/types/users.py +0 -1
  287. uncountable/types/users_t.py +1 -2
  288. uncountable/types/webhook_job.py +1 -1
  289. uncountable/types/webhook_job_t.py +14 -3
  290. uncountable/types/workflows.py +0 -1
  291. uncountable/types/workflows_t.py +3 -4
  292. uncountablepythonsdk-0.0.132.dist-info/METADATA +64 -0
  293. uncountablepythonsdk-0.0.132.dist-info/RECORD +363 -0
  294. {UncountablePythonSDK-0.0.82.dist-info → uncountablepythonsdk-0.0.132.dist-info}/WHEEL +1 -1
  295. UncountablePythonSDK-0.0.82.dist-info/METADATA +0 -60
  296. UncountablePythonSDK-0.0.82.dist-info/RECORD +0 -292
  297. docs/quickstart.md +0 -19
  298. {UncountablePythonSDK-0.0.82.dist-info → uncountablepythonsdk-0.0.132.dist-info}/top_level.txt +0 -0
@@ -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,25 @@
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 .structured_filters_t import FilterRelation as FilterRelation
7
+ from .structured_filters_t import FilterSpecBase as FilterSpecBase
8
+ from .structured_filters_t import FilterScalarType as FilterScalarType
9
+ from .structured_filters_t import FilterIdType as FilterIdType
10
+ from .structured_filters_t import StringFilterValue as StringFilterValue
11
+ from .structured_filters_t import FilterSpecEquals as FilterSpecEquals
12
+ from .structured_filters_t import FilterSpecInclude as FilterSpecInclude
13
+ from .structured_filters_t import FilterSpecIStrContains as FilterSpecIStrContains
14
+ from .structured_filters_t import FilterSpecIStrStartsWith as FilterSpecIStrStartsWith
15
+ from .structured_filters_t import FilterSpecExists as FilterSpecExists
16
+ from .structured_filters_t import FilterSpecGreater as FilterSpecGreater
17
+ from .structured_filters_t import FilterLess as FilterLess
18
+ from .structured_filters_t import FilterSpecGeq as FilterSpecGeq
19
+ from .structured_filters_t import FilterSpecLeq as FilterSpecLeq
20
+ from .structured_filters_t import FilterSpec as FilterSpec
21
+ from .structured_filters_t import FilterNodeType as FilterNodeType
22
+ from .structured_filters_t import FilterNodeBase as FilterNodeBase
23
+ from .structured_filters_t import FilterNodeColumnAnd as FilterNodeColumnAnd
24
+ from .structured_filters_t import FilterNode as FilterNode
25
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,248 @@
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 listing_t
16
+
17
+ __all__: list[str] = [
18
+ "FilterIdType",
19
+ "FilterLess",
20
+ "FilterNode",
21
+ "FilterNodeBase",
22
+ "FilterNodeColumnAnd",
23
+ "FilterNodeType",
24
+ "FilterRelation",
25
+ "FilterScalarType",
26
+ "FilterSpec",
27
+ "FilterSpecBase",
28
+ "FilterSpecEquals",
29
+ "FilterSpecExists",
30
+ "FilterSpecGeq",
31
+ "FilterSpecGreater",
32
+ "FilterSpecIStrContains",
33
+ "FilterSpecIStrStartsWith",
34
+ "FilterSpecInclude",
35
+ "FilterSpecLeq",
36
+ "StringFilterValue",
37
+ ]
38
+
39
+
40
+ # DO NOT MODIFY -- This file is generated by type_spec
41
+ class FilterRelation(StrEnum):
42
+ EQUALS = "equals"
43
+ GREATER = "greater"
44
+ GEQ = "geq"
45
+ LESS = "less"
46
+ LEQ = "leq"
47
+ ISTR_CONTAINS = "istr_contains"
48
+ ISTR_STARTS_WITH = "istr_starts_with"
49
+ INCLUDE = "include"
50
+ EXISTS = "exists"
51
+
52
+
53
+ # DO NOT MODIFY -- This file is generated by type_spec
54
+ @serial_class(
55
+ named_type_path="sdk.structured_filters.FilterSpecBase",
56
+ )
57
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
58
+ class FilterSpecBase:
59
+ relation: FilterRelation
60
+ column: listing_t.ColumnIdentifier
61
+
62
+
63
+ # DO NOT MODIFY -- This file is generated by type_spec
64
+ FilterScalarType = typing.Annotated[
65
+ str | int | Decimal,
66
+ serial_alias_annotation(
67
+ named_type_path="sdk.structured_filters.FilterScalarType",
68
+ ),
69
+ ]
70
+
71
+
72
+ # DO NOT MODIFY -- This file is generated by type_spec
73
+ FilterIdType = typing.Annotated[
74
+ base_t.ObjectId | str,
75
+ serial_alias_annotation(
76
+ named_type_path="sdk.structured_filters.FilterIdType",
77
+ ),
78
+ ]
79
+
80
+
81
+ # DO NOT MODIFY -- This file is generated by type_spec
82
+ StringFilterValue = typing.Annotated[
83
+ typing.Union[str],
84
+ serial_alias_annotation(
85
+ named_type_path="sdk.structured_filters.StringFilterValue",
86
+ ),
87
+ ]
88
+
89
+
90
+ # DO NOT MODIFY -- This file is generated by type_spec
91
+ @serial_class(
92
+ named_type_path="sdk.structured_filters.FilterSpecEquals",
93
+ parse_require={"relation"},
94
+ )
95
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
96
+ class FilterSpecEquals(FilterSpecBase):
97
+ relation: typing.Literal[FilterRelation.EQUALS] = FilterRelation.EQUALS
98
+ value: FilterScalarType
99
+
100
+
101
+ # DO NOT MODIFY -- This file is generated by type_spec
102
+ @serial_class(
103
+ named_type_path="sdk.structured_filters.FilterSpecInclude",
104
+ parse_require={"relation"},
105
+ )
106
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
107
+ class FilterSpecInclude(FilterSpecBase):
108
+ relation: typing.Literal[FilterRelation.INCLUDE] = FilterRelation.INCLUDE
109
+ value: FilterIdType | tuple[FilterIdType, ...]
110
+
111
+
112
+ # DO NOT MODIFY -- This file is generated by type_spec
113
+ @serial_class(
114
+ named_type_path="sdk.structured_filters.FilterSpecIStrContains",
115
+ parse_require={"relation"},
116
+ )
117
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
118
+ class FilterSpecIStrContains(FilterSpecBase):
119
+ relation: typing.Literal[FilterRelation.ISTR_CONTAINS] = FilterRelation.ISTR_CONTAINS
120
+ value: str
121
+
122
+
123
+ # DO NOT MODIFY -- This file is generated by type_spec
124
+ @serial_class(
125
+ named_type_path="sdk.structured_filters.FilterSpecIStrStartsWith",
126
+ parse_require={"relation"},
127
+ )
128
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
129
+ class FilterSpecIStrStartsWith(FilterSpecBase):
130
+ relation: typing.Literal[FilterRelation.ISTR_STARTS_WITH] = FilterRelation.ISTR_STARTS_WITH
131
+ value: str
132
+
133
+
134
+ # DO NOT MODIFY -- This file is generated by type_spec
135
+ @serial_class(
136
+ named_type_path="sdk.structured_filters.FilterSpecExists",
137
+ parse_require={"relation"},
138
+ )
139
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
140
+ class FilterSpecExists(FilterSpecBase):
141
+ relation: typing.Literal[FilterRelation.EXISTS] = FilterRelation.EXISTS
142
+
143
+
144
+ # DO NOT MODIFY -- This file is generated by type_spec
145
+ @serial_class(
146
+ named_type_path="sdk.structured_filters.FilterSpecGreater",
147
+ to_string_values={"value"},
148
+ parse_require={"relation"},
149
+ )
150
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
151
+ class FilterSpecGreater(FilterSpecBase):
152
+ relation: typing.Literal[FilterRelation.GREATER] = FilterRelation.GREATER
153
+ value: Decimal
154
+
155
+
156
+ # DO NOT MODIFY -- This file is generated by type_spec
157
+ @serial_class(
158
+ named_type_path="sdk.structured_filters.FilterLess",
159
+ to_string_values={"value"},
160
+ parse_require={"relation"},
161
+ )
162
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
163
+ class FilterLess(FilterSpecBase):
164
+ relation: typing.Literal[FilterRelation.LESS] = FilterRelation.LESS
165
+ value: Decimal
166
+
167
+
168
+ # DO NOT MODIFY -- This file is generated by type_spec
169
+ @serial_class(
170
+ named_type_path="sdk.structured_filters.FilterSpecGeq",
171
+ to_string_values={"value"},
172
+ parse_require={"relation"},
173
+ )
174
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
175
+ class FilterSpecGeq(FilterSpecBase):
176
+ relation: typing.Literal[FilterRelation.GEQ] = FilterRelation.GEQ
177
+ value: Decimal
178
+
179
+
180
+ # DO NOT MODIFY -- This file is generated by type_spec
181
+ @serial_class(
182
+ named_type_path="sdk.structured_filters.FilterSpecLeq",
183
+ to_string_values={"value"},
184
+ parse_require={"relation"},
185
+ )
186
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
187
+ class FilterSpecLeq(FilterSpecBase):
188
+ relation: typing.Literal[FilterRelation.LEQ] = FilterRelation.LEQ
189
+ value: Decimal
190
+
191
+
192
+ # DO NOT MODIFY -- This file is generated by type_spec
193
+ FilterSpec = typing.Annotated[
194
+ FilterSpecEquals | FilterSpecGreater | FilterSpecGeq | FilterSpecLeq | FilterSpecIStrContains | FilterSpecIStrStartsWith | FilterSpecInclude | FilterSpecExists,
195
+ serial_union_annotation(
196
+ named_type_path="sdk.structured_filters.FilterSpec",
197
+ discriminator="relation",
198
+ discriminator_map={
199
+ "equals": FilterSpecEquals,
200
+ "greater": FilterSpecGreater,
201
+ "geq": FilterSpecGeq,
202
+ "leq": FilterSpecLeq,
203
+ "istr_contains": FilterSpecIStrContains,
204
+ "istr_starts_with": FilterSpecIStrStartsWith,
205
+ "include": FilterSpecInclude,
206
+ "exists": FilterSpecExists,
207
+ },
208
+ ),
209
+ ]
210
+
211
+
212
+ # DO NOT MODIFY -- This file is generated by type_spec
213
+ class FilterNodeType(StrEnum):
214
+ COLUMN_AND = "column_and"
215
+
216
+
217
+ # DO NOT MODIFY -- This file is generated by type_spec
218
+ @serial_class(
219
+ named_type_path="sdk.structured_filters.FilterNodeBase",
220
+ )
221
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
222
+ class FilterNodeBase:
223
+ type: FilterNodeType
224
+
225
+
226
+ # DO NOT MODIFY -- This file is generated by type_spec
227
+ @serial_class(
228
+ named_type_path="sdk.structured_filters.FilterNodeColumnAnd",
229
+ parse_require={"type"},
230
+ )
231
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
232
+ class FilterNodeColumnAnd:
233
+ type: typing.Literal[FilterNodeType.COLUMN_AND] = FilterNodeType.COLUMN_AND
234
+ filters: tuple[FilterSpec, ...]
235
+
236
+
237
+ # DO NOT MODIFY -- This file is generated by type_spec
238
+ FilterNode = typing.Annotated[
239
+ typing.Union[FilterNodeColumnAnd],
240
+ serial_union_annotation(
241
+ named_type_path="sdk.structured_filters.FilterNode",
242
+ discriminator="type",
243
+ discriminator_map={
244
+ "column_and": FilterNodeColumnAnd,
245
+ },
246
+ ),
247
+ ]
248
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # isort: skip_file
@@ -1,5 +1,4 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
2
  # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
@@ -20,7 +19,7 @@ __all__: list[str] = [
20
19
  @serial_class(
21
20
  named_type_path="sdk.units.SimpleUnit",
22
21
  )
23
- @dataclasses.dataclass(kw_only=True)
22
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
24
23
  class SimpleUnit:
25
24
  unit_id: base_t.ObjectId
26
25
  name: str
@@ -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