UncountablePythonSDK 0.0.8__py3-none-any.whl → 0.0.92__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 (312) hide show
  1. UncountablePythonSDK-0.0.92.dist-info/METADATA +61 -0
  2. UncountablePythonSDK-0.0.92.dist-info/RECORD +301 -0
  3. {UncountablePythonSDK-0.0.8.dist-info → UncountablePythonSDK-0.0.92.dist-info}/WHEEL +1 -1
  4. {UncountablePythonSDK-0.0.8.dist-info → UncountablePythonSDK-0.0.92.dist-info}/top_level.txt +1 -1
  5. docs/.gitignore +1 -0
  6. docs/conf.py +57 -0
  7. docs/index.md +13 -0
  8. docs/justfile +12 -0
  9. docs/quickstart.md +19 -0
  10. docs/requirements.txt +7 -0
  11. docs/static/favicons/android-chrome-192x192.png +0 -0
  12. docs/static/favicons/android-chrome-512x512.png +0 -0
  13. docs/static/favicons/apple-touch-icon.png +0 -0
  14. docs/static/favicons/browserconfig.xml +9 -0
  15. docs/static/favicons/favicon-16x16.png +0 -0
  16. docs/static/favicons/favicon-32x32.png +0 -0
  17. docs/static/favicons/manifest.json +18 -0
  18. docs/static/favicons/mstile-150x150.png +0 -0
  19. docs/static/favicons/safari-pinned-tab.svg +32 -0
  20. docs/static/logo_blue.png +0 -0
  21. examples/async_batch.py +35 -0
  22. examples/create_entity.py +22 -17
  23. examples/download_files.py +26 -0
  24. examples/edit_recipe_inputs.py +50 -0
  25. examples/integration-server/jobs/materials_auto/example_cron.py +18 -0
  26. examples/integration-server/jobs/materials_auto/example_wh.py +15 -0
  27. examples/integration-server/jobs/materials_auto/profile.yaml +43 -0
  28. examples/integration-server/pyproject.toml +224 -0
  29. examples/invoke_uploader.py +26 -0
  30. examples/set_recipe_metadata_file.py +40 -0
  31. examples/set_recipe_output_file_sdk.py +26 -0
  32. examples/upload_files.py +18 -0
  33. pkgs/argument_parser/__init__.py +5 -0
  34. pkgs/argument_parser/_is_enum.py +1 -6
  35. pkgs/argument_parser/argument_parser.py +232 -76
  36. pkgs/argument_parser/case_convert.py +4 -3
  37. pkgs/filesystem_utils/__init__.py +20 -0
  38. pkgs/filesystem_utils/_blob_session.py +137 -0
  39. pkgs/filesystem_utils/_gdrive_session.py +309 -0
  40. pkgs/filesystem_utils/_local_session.py +69 -0
  41. pkgs/filesystem_utils/_s3_session.py +117 -0
  42. pkgs/filesystem_utils/_sftp_session.py +147 -0
  43. pkgs/filesystem_utils/file_type_utils.py +91 -0
  44. pkgs/filesystem_utils/filesystem_session.py +39 -0
  45. pkgs/py.typed +0 -0
  46. pkgs/serialization/__init__.py +8 -1
  47. pkgs/serialization/annotation.py +64 -0
  48. pkgs/serialization/missing_sentry.py +1 -1
  49. pkgs/serialization/opaque_key.py +1 -1
  50. pkgs/serialization/serial_alias.py +47 -0
  51. pkgs/serialization/serial_class.py +65 -50
  52. pkgs/serialization/serial_generic.py +16 -0
  53. pkgs/serialization/serial_union.py +84 -0
  54. pkgs/serialization/yaml.py +57 -0
  55. pkgs/serialization_util/__init__.py +7 -7
  56. pkgs/serialization_util/_get_type_for_serialization.py +1 -3
  57. pkgs/serialization_util/convert_to_snakecase.py +27 -0
  58. pkgs/serialization_util/dataclasses.py +14 -0
  59. pkgs/serialization_util/serialization_helpers.py +116 -74
  60. pkgs/strenum_compat/strenum_compat.py +1 -9
  61. pkgs/type_spec/actions_registry/__init__.py +0 -0
  62. pkgs/type_spec/actions_registry/__main__.py +126 -0
  63. pkgs/type_spec/actions_registry/emit_typescript.py +182 -0
  64. pkgs/type_spec/builder.py +475 -89
  65. pkgs/type_spec/config.py +24 -19
  66. pkgs/type_spec/emit_io_ts.py +5 -2
  67. pkgs/type_spec/emit_open_api.py +266 -32
  68. pkgs/type_spec/emit_open_api_util.py +32 -13
  69. pkgs/type_spec/emit_python.py +599 -151
  70. pkgs/type_spec/emit_typescript.py +74 -273
  71. pkgs/type_spec/emit_typescript_util.py +239 -5
  72. pkgs/type_spec/load_types.py +55 -10
  73. pkgs/type_spec/open_api_util.py +30 -41
  74. pkgs/type_spec/parts/base.py.prepart +4 -3
  75. pkgs/type_spec/type_info/emit_type_info.py +178 -16
  76. pkgs/type_spec/util.py +11 -11
  77. pkgs/type_spec/value_spec/__main__.py +3 -3
  78. pkgs/type_spec/value_spec/convert_type.py +8 -1
  79. pkgs/type_spec/value_spec/emit_python.py +13 -4
  80. uncountable/__init__.py +1 -2
  81. uncountable/core/__init__.py +12 -2
  82. uncountable/core/async_batch.py +37 -0
  83. uncountable/core/client.py +293 -43
  84. uncountable/core/environment.py +41 -0
  85. uncountable/core/file_upload.py +135 -0
  86. uncountable/core/types.py +17 -0
  87. uncountable/integration/__init__.py +0 -0
  88. uncountable/integration/cli.py +49 -0
  89. uncountable/integration/construct_client.py +51 -0
  90. uncountable/integration/cron.py +29 -0
  91. uncountable/integration/db/__init__.py +0 -0
  92. uncountable/integration/db/connect.py +18 -0
  93. uncountable/integration/db/session.py +25 -0
  94. uncountable/integration/entrypoint.py +13 -0
  95. uncountable/integration/executors/__init__.py +0 -0
  96. uncountable/integration/executors/executors.py +148 -0
  97. uncountable/integration/executors/generic_upload_executor.py +284 -0
  98. uncountable/integration/executors/script_executor.py +25 -0
  99. uncountable/integration/job.py +87 -0
  100. uncountable/integration/queue_runner/__init__.py +0 -0
  101. uncountable/integration/queue_runner/command_server/__init__.py +24 -0
  102. uncountable/integration/queue_runner/command_server/command_client.py +68 -0
  103. uncountable/integration/queue_runner/command_server/command_server.py +64 -0
  104. uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  105. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +22 -0
  106. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +40 -0
  107. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +38 -0
  108. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +129 -0
  109. uncountable/integration/queue_runner/command_server/types.py +52 -0
  110. uncountable/integration/queue_runner/datastore/__init__.py +3 -0
  111. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +93 -0
  112. uncountable/integration/queue_runner/datastore/interface.py +19 -0
  113. uncountable/integration/queue_runner/datastore/model.py +17 -0
  114. uncountable/integration/queue_runner/job_scheduler.py +163 -0
  115. uncountable/integration/queue_runner/queue_runner.py +26 -0
  116. uncountable/integration/queue_runner/types.py +7 -0
  117. uncountable/integration/queue_runner/worker.py +119 -0
  118. uncountable/integration/scan_profiles.py +67 -0
  119. uncountable/integration/scheduler.py +150 -0
  120. uncountable/integration/secret_retrieval/__init__.py +3 -0
  121. uncountable/integration/secret_retrieval/retrieve_secret.py +93 -0
  122. uncountable/integration/server.py +117 -0
  123. uncountable/integration/telemetry.py +209 -0
  124. uncountable/integration/webhook_server/entrypoint.py +170 -0
  125. uncountable/types/__init__.py +136 -20
  126. uncountable/types/api/batch/execute_batch.py +15 -7
  127. uncountable/types/api/batch/execute_batch_load_async.py +42 -0
  128. uncountable/types/api/chemical/__init__.py +1 -0
  129. uncountable/types/api/chemical/convert_chemical_formats.py +63 -0
  130. uncountable/types/api/entity/create_entities.py +23 -11
  131. uncountable/types/api/entity/create_entity.py +21 -12
  132. uncountable/types/api/entity/get_entities_data.py +18 -8
  133. uncountable/types/api/entity/grant_entity_permissions.py +48 -0
  134. uncountable/types/api/entity/list_entities.py +27 -12
  135. uncountable/types/api/entity/lock_entity.py +45 -0
  136. uncountable/types/api/entity/resolve_entity_ids.py +17 -7
  137. uncountable/types/api/entity/set_entity_field_values.py +44 -0
  138. uncountable/types/api/entity/set_values.py +14 -7
  139. uncountable/types/api/entity/transition_entity_phase.py +80 -0
  140. uncountable/types/api/entity/unlock_entity.py +44 -0
  141. uncountable/types/api/equipment/__init__.py +1 -0
  142. uncountable/types/api/equipment/associate_equipment_input.py +44 -0
  143. uncountable/types/api/field_options/__init__.py +1 -0
  144. uncountable/types/api/field_options/upsert_field_options.py +55 -0
  145. uncountable/types/api/files/__init__.py +1 -0
  146. uncountable/types/api/files/download_file.py +77 -0
  147. uncountable/types/api/id_source/__init__.py +1 -0
  148. uncountable/types/api/id_source/list_id_source.py +56 -0
  149. uncountable/types/api/id_source/match_id_source.py +54 -0
  150. uncountable/types/api/input_groups/get_input_group_names.py +16 -6
  151. uncountable/types/api/inputs/create_inputs.py +24 -11
  152. uncountable/types/api/inputs/get_input_data.py +32 -13
  153. uncountable/types/api/inputs/get_input_names.py +18 -8
  154. uncountable/types/api/inputs/get_inputs_data.py +29 -10
  155. uncountable/types/api/inputs/set_input_attribute_values.py +16 -9
  156. uncountable/types/api/inputs/set_input_category.py +44 -0
  157. uncountable/types/api/inputs/set_input_subcategories.py +45 -0
  158. uncountable/types/api/inputs/set_intermediate_type.py +50 -0
  159. uncountable/types/api/material_families/__init__.py +1 -0
  160. uncountable/types/api/material_families/update_entity_material_families.py +48 -0
  161. uncountable/types/api/outputs/get_output_data.py +32 -16
  162. uncountable/types/api/outputs/get_output_names.py +18 -8
  163. uncountable/types/api/outputs/resolve_output_conditions.py +23 -10
  164. uncountable/types/api/permissions/__init__.py +1 -0
  165. uncountable/types/api/permissions/set_core_permissions.py +105 -0
  166. uncountable/types/api/project/get_projects.py +17 -7
  167. uncountable/types/api/project/get_projects_data.py +21 -11
  168. uncountable/types/api/recipe_links/__init__.py +1 -0
  169. uncountable/types/api/recipe_links/create_recipe_link.py +46 -0
  170. uncountable/types/api/recipe_links/remove_recipe_link.py +45 -0
  171. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +18 -8
  172. uncountable/types/api/recipes/add_recipe_to_project.py +42 -0
  173. uncountable/types/api/recipes/archive_recipes.py +42 -0
  174. uncountable/types/api/recipes/associate_recipe_as_input.py +44 -0
  175. uncountable/types/api/recipes/associate_recipe_as_lot.py +43 -0
  176. uncountable/types/api/recipes/clear_recipe_outputs.py +42 -0
  177. uncountable/types/api/recipes/create_recipe.py +51 -0
  178. uncountable/types/api/recipes/create_recipes.py +25 -12
  179. uncountable/types/api/recipes/disassociate_recipe_as_input.py +42 -0
  180. uncountable/types/api/recipes/edit_recipe_inputs.py +283 -0
  181. uncountable/types/api/recipes/get_column_calculation_values.py +58 -0
  182. uncountable/types/api/recipes/get_curve.py +15 -7
  183. uncountable/types/api/recipes/get_recipe_calculations.py +17 -10
  184. uncountable/types/api/recipes/get_recipe_links.py +13 -6
  185. uncountable/types/api/recipes/get_recipe_names.py +16 -6
  186. uncountable/types/api/recipes/get_recipe_output_metadata.py +14 -7
  187. uncountable/types/api/recipes/get_recipes_data.py +63 -38
  188. uncountable/types/api/recipes/lock_recipes.py +63 -0
  189. uncountable/types/api/recipes/remove_recipe_from_project.py +42 -0
  190. uncountable/types/api/recipes/set_recipe_inputs.py +19 -10
  191. uncountable/types/api/recipes/set_recipe_metadata.py +43 -0
  192. uncountable/types/api/recipes/set_recipe_output_annotations.py +115 -0
  193. uncountable/types/api/recipes/set_recipe_output_file.py +56 -0
  194. uncountable/types/api/recipes/set_recipe_outputs.py +26 -12
  195. uncountable/types/api/recipes/set_recipe_tags.py +109 -0
  196. uncountable/types/api/recipes/unarchive_recipes.py +41 -0
  197. uncountable/types/api/recipes/unlock_recipes.py +50 -0
  198. uncountable/types/api/triggers/__init__.py +1 -0
  199. uncountable/types/api/triggers/run_trigger.py +43 -0
  200. uncountable/types/api/uploader/__init__.py +1 -0
  201. uncountable/types/api/uploader/invoke_uploader.py +47 -0
  202. uncountable/types/async_batch.py +13 -0
  203. uncountable/types/async_batch_processor.py +384 -0
  204. uncountable/types/async_batch_t.py +97 -0
  205. uncountable/types/async_jobs.py +9 -0
  206. uncountable/types/async_jobs_t.py +53 -0
  207. uncountable/types/auth_retrieval.py +12 -0
  208. uncountable/types/auth_retrieval_t.py +75 -0
  209. uncountable/types/base.py +5 -78
  210. uncountable/types/base_t.py +85 -0
  211. uncountable/types/calculations.py +3 -18
  212. uncountable/types/calculations_t.py +27 -0
  213. uncountable/types/chemical_structure.py +8 -0
  214. uncountable/types/chemical_structure_t.py +28 -0
  215. uncountable/types/client_base.py +1093 -54
  216. uncountable/types/client_config.py +8 -0
  217. uncountable/types/client_config_t.py +26 -0
  218. uncountable/types/curves.py +5 -42
  219. uncountable/types/curves_t.py +51 -0
  220. uncountable/types/entity.py +8 -269
  221. uncountable/types/entity_t.py +393 -0
  222. uncountable/types/experiment_groups.py +3 -18
  223. uncountable/types/experiment_groups_t.py +27 -0
  224. uncountable/types/field_values.py +17 -60
  225. uncountable/types/field_values_t.py +204 -0
  226. uncountable/types/fields.py +3 -19
  227. uncountable/types/fields_t.py +28 -0
  228. uncountable/types/generic_upload.py +15 -0
  229. uncountable/types/generic_upload_t.py +119 -0
  230. uncountable/types/id_source.py +12 -0
  231. uncountable/types/id_source_t.py +68 -0
  232. uncountable/types/identifier.py +11 -0
  233. uncountable/types/identifier_t.py +63 -0
  234. uncountable/types/input_attributes.py +3 -24
  235. uncountable/types/input_attributes_t.py +30 -0
  236. uncountable/types/inputs.py +6 -56
  237. uncountable/types/inputs_t.py +83 -0
  238. uncountable/types/integration_server.py +9 -0
  239. uncountable/types/integration_server_t.py +42 -0
  240. uncountable/types/job_definition.py +27 -0
  241. uncountable/types/job_definition_t.py +260 -0
  242. uncountable/types/outputs.py +3 -21
  243. uncountable/types/outputs_t.py +30 -0
  244. uncountable/types/overrides.py +10 -0
  245. uncountable/types/overrides_t.py +49 -0
  246. uncountable/types/permissions.py +8 -0
  247. uncountable/types/permissions_t.py +46 -0
  248. uncountable/types/phases.py +3 -18
  249. uncountable/types/phases_t.py +27 -0
  250. uncountable/types/post_base.py +8 -0
  251. uncountable/types/post_base_t.py +30 -0
  252. uncountable/types/queued_job.py +16 -0
  253. uncountable/types/queued_job_t.py +123 -0
  254. uncountable/types/recipe_identifiers.py +12 -0
  255. uncountable/types/recipe_identifiers_t.py +76 -0
  256. uncountable/types/recipe_inputs.py +9 -0
  257. uncountable/types/recipe_inputs_t.py +30 -0
  258. uncountable/types/recipe_links.py +4 -45
  259. uncountable/types/recipe_links_t.py +54 -0
  260. uncountable/types/recipe_metadata.py +5 -45
  261. uncountable/types/recipe_metadata_t.py +58 -0
  262. uncountable/types/recipe_output_metadata.py +3 -19
  263. uncountable/types/recipe_output_metadata_t.py +28 -0
  264. uncountable/types/recipe_tags.py +3 -18
  265. uncountable/types/recipe_tags_t.py +27 -0
  266. uncountable/types/recipe_workflow_steps.py +14 -0
  267. uncountable/types/recipe_workflow_steps_t.py +95 -0
  268. uncountable/types/recipes.py +8 -0
  269. uncountable/types/recipes_t.py +25 -0
  270. uncountable/types/response.py +3 -20
  271. uncountable/types/response_t.py +26 -0
  272. uncountable/types/secret_retrieval.py +12 -0
  273. uncountable/types/secret_retrieval_t.py +75 -0
  274. uncountable/types/units.py +3 -18
  275. uncountable/types/units_t.py +27 -0
  276. uncountable/types/users.py +3 -19
  277. uncountable/types/users_t.py +28 -0
  278. uncountable/types/webhook_job.py +9 -0
  279. uncountable/types/webhook_job_t.py +37 -0
  280. uncountable/types/workflows.py +4 -27
  281. uncountable/types/workflows_t.py +39 -0
  282. UncountablePythonSDK-0.0.8.dist-info/METADATA +0 -27
  283. UncountablePythonSDK-0.0.8.dist-info/RECORD +0 -134
  284. examples/recipe-import/importer.py +0 -39
  285. type_spec/external/api/batch/execute_batch.yaml +0 -56
  286. type_spec/external/api/entity/create_entities.yaml +0 -33
  287. type_spec/external/api/entity/create_entity.yaml +0 -39
  288. type_spec/external/api/entity/get_entities_data.yaml +0 -29
  289. type_spec/external/api/entity/list_entities.yaml +0 -52
  290. type_spec/external/api/entity/resolve_entity_ids.yaml +0 -29
  291. type_spec/external/api/entity/set_values.yaml +0 -18
  292. type_spec/external/api/input_groups/get_input_group_names.yaml +0 -29
  293. type_spec/external/api/inputs/create_inputs.yaml +0 -48
  294. type_spec/external/api/inputs/get_input_data.yaml +0 -95
  295. type_spec/external/api/inputs/get_input_names.yaml +0 -38
  296. type_spec/external/api/inputs/get_inputs_data.yaml +0 -82
  297. type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -33
  298. type_spec/external/api/outputs/get_output_data.yaml +0 -92
  299. type_spec/external/api/outputs/get_output_names.yaml +0 -35
  300. type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -50
  301. type_spec/external/api/project/get_projects.yaml +0 -42
  302. type_spec/external/api/project/get_projects_data.yaml +0 -50
  303. type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -41
  304. type_spec/external/api/recipes/create_recipes.yaml +0 -47
  305. type_spec/external/api/recipes/get_curve.yaml +0 -18
  306. type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -39
  307. type_spec/external/api/recipes/get_recipe_links.yaml +0 -26
  308. type_spec/external/api/recipes/get_recipe_names.yaml +0 -29
  309. type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -36
  310. type_spec/external/api/recipes/get_recipes_data.yaml +0 -238
  311. type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -36
  312. type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -52
@@ -0,0 +1,30 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ from pkgs.serialization import serial_string_enum
12
+
13
+ __all__: list[str] = [
14
+ "UpdateType",
15
+ ]
16
+
17
+
18
+ # DO NOT MODIFY -- This file is generated by type_spec
19
+ @serial_string_enum(
20
+ labels={
21
+ "append": "Append values",
22
+ "override": "Wipe existing and replace",
23
+ "remove": "Remove values",
24
+ },
25
+ )
26
+ class UpdateType(StrEnum):
27
+ APPEND = "append"
28
+ OVERRIDE = "override"
29
+ REMOVE = "remove"
30
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,16 @@
1
+ # flake8: noqa: F821
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ # DO NOT MODIFY -- This file is generated by type_spec
6
+ # Kept only for SDK backwards compatibility
7
+ from .queued_job_t import InvocationContextType as InvocationContextType
8
+ from .queued_job_t import InvocationContextBase as InvocationContextBase
9
+ from .queued_job_t import InvocationContextCron as InvocationContextCron
10
+ from .queued_job_t import InvocationContextManual as InvocationContextManual
11
+ from .queued_job_t import InvocationContextWebhook as InvocationContextWebhook
12
+ from .queued_job_t import InvocationContext as InvocationContext
13
+ from .queued_job_t import QueuedJobPayload as QueuedJobPayload
14
+ from .queued_job_t import QueuedJobResult as QueuedJobResult
15
+ from .queued_job_t import QueuedJob as QueuedJob
16
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,123 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ import dataclasses
12
+ from pkgs.serialization import serial_class
13
+ from pkgs.serialization import serial_union_annotation
14
+ from . import base_t
15
+ from . import job_definition_t
16
+
17
+ __all__: list[str] = [
18
+ "InvocationContext",
19
+ "InvocationContextBase",
20
+ "InvocationContextCron",
21
+ "InvocationContextManual",
22
+ "InvocationContextType",
23
+ "InvocationContextWebhook",
24
+ "QueuedJob",
25
+ "QueuedJobPayload",
26
+ "QueuedJobResult",
27
+ ]
28
+
29
+
30
+ # DO NOT MODIFY -- This file is generated by type_spec
31
+ class InvocationContextType(StrEnum):
32
+ CRON = "cron"
33
+ MANUAL = "manual"
34
+ WEBHOOK = "webhook"
35
+
36
+
37
+ # DO NOT MODIFY -- This file is generated by type_spec
38
+ @serial_class(
39
+ named_type_path="sdk.queued_job.InvocationContextBase",
40
+ )
41
+ @dataclasses.dataclass(kw_only=True)
42
+ class InvocationContextBase:
43
+ type: InvocationContextType
44
+
45
+
46
+ # DO NOT MODIFY -- This file is generated by type_spec
47
+ @serial_class(
48
+ named_type_path="sdk.queued_job.InvocationContextCron",
49
+ parse_require={"type"},
50
+ )
51
+ @dataclasses.dataclass(kw_only=True)
52
+ class InvocationContextCron(InvocationContextBase):
53
+ type: typing.Literal[InvocationContextType.CRON] = InvocationContextType.CRON
54
+
55
+
56
+ # DO NOT MODIFY -- This file is generated by type_spec
57
+ @serial_class(
58
+ named_type_path="sdk.queued_job.InvocationContextManual",
59
+ parse_require={"type"},
60
+ )
61
+ @dataclasses.dataclass(kw_only=True)
62
+ class InvocationContextManual(InvocationContextBase):
63
+ type: typing.Literal[InvocationContextType.MANUAL] = InvocationContextType.MANUAL
64
+
65
+
66
+ # DO NOT MODIFY -- This file is generated by type_spec
67
+ @serial_class(
68
+ named_type_path="sdk.queued_job.InvocationContextWebhook",
69
+ unconverted_values={"webhook_payload"},
70
+ parse_require={"type"},
71
+ )
72
+ @dataclasses.dataclass(kw_only=True)
73
+ class InvocationContextWebhook(InvocationContextBase):
74
+ type: typing.Literal[InvocationContextType.WEBHOOK] = InvocationContextType.WEBHOOK
75
+ webhook_payload: base_t.JsonValue
76
+
77
+
78
+ # DO NOT MODIFY -- This file is generated by type_spec
79
+ InvocationContext = typing.Annotated[
80
+ typing.Union[InvocationContextCron, InvocationContextManual, InvocationContextWebhook],
81
+ serial_union_annotation(
82
+ named_type_path="sdk.queued_job.InvocationContext",
83
+ discriminator="type",
84
+ discriminator_map={
85
+ "cron": InvocationContextCron,
86
+ "manual": InvocationContextManual,
87
+ "webhook": InvocationContextWebhook,
88
+ },
89
+ ),
90
+ ]
91
+
92
+
93
+ # DO NOT MODIFY -- This file is generated by type_spec
94
+ @serial_class(
95
+ named_type_path="sdk.queued_job.QueuedJobPayload",
96
+ )
97
+ @dataclasses.dataclass(kw_only=True)
98
+ class QueuedJobPayload:
99
+ invocation_context: InvocationContext
100
+
101
+
102
+ # DO NOT MODIFY -- This file is generated by type_spec
103
+ @serial_class(
104
+ named_type_path="sdk.queued_job.QueuedJobResult",
105
+ )
106
+ @dataclasses.dataclass(kw_only=True)
107
+ class QueuedJobResult:
108
+ queued_job_uuid: str
109
+ job_result: job_definition_t.JobResult
110
+
111
+
112
+ # DO NOT MODIFY -- This file is generated by type_spec
113
+ @serial_class(
114
+ named_type_path="sdk.queued_job.QueuedJob",
115
+ )
116
+ @dataclasses.dataclass(kw_only=True)
117
+ class QueuedJob:
118
+ queued_job_uuid: str
119
+ job_ref_name: str
120
+ num_attempts: int
121
+ submitted_at: datetime.datetime
122
+ payload: QueuedJobPayload
123
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,12 @@
1
+ # flake8: noqa: F821
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ # DO NOT MODIFY -- This file is generated by type_spec
6
+ # Kept only for SDK backwards compatibility
7
+ from .recipe_identifiers_t import RecipeIdentifierEditableName as RecipeIdentifierEditableName
8
+ from .recipe_identifiers_t import RecipeIdentifierMetadata as RecipeIdentifierMetadata
9
+ from .recipe_identifiers_t import RecipeIdentifierMaterialFamily as RecipeIdentifierMaterialFamily
10
+ from .recipe_identifiers_t import RecipeIdentifier as RecipeIdentifier
11
+ from .recipe_identifiers_t import RecipeIdentifiers as RecipeIdentifiers
12
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,76 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from pkgs.serialization import serial_alias_annotation
13
+ from . import base_t
14
+
15
+ __all__: list[str] = [
16
+ "RecipeIdentifier",
17
+ "RecipeIdentifierEditableName",
18
+ "RecipeIdentifierMaterialFamily",
19
+ "RecipeIdentifierMetadata",
20
+ "RecipeIdentifiers",
21
+ ]
22
+
23
+
24
+ # DO NOT MODIFY -- This file is generated by type_spec
25
+ @serial_class(
26
+ named_type_path="sdk.recipe_identifiers.RecipeIdentifierEditableName",
27
+ parse_require={"type"},
28
+ )
29
+ @dataclasses.dataclass(kw_only=True)
30
+ class RecipeIdentifierEditableName:
31
+ type: typing.Literal["name"] = "name"
32
+ editable_name: str
33
+
34
+
35
+ # DO NOT MODIFY -- This file is generated by type_spec
36
+ @serial_class(
37
+ named_type_path="sdk.recipe_identifiers.RecipeIdentifierMetadata",
38
+ to_string_values={"quantity_dec"},
39
+ parse_require={"type"},
40
+ )
41
+ @dataclasses.dataclass(kw_only=True)
42
+ class RecipeIdentifierMetadata:
43
+ type: typing.Literal["metadata"] = "metadata"
44
+ recipe_metadata_id: base_t.ObjectId
45
+ quantity_dec: Decimal | None = None
46
+ quantity_json: str | None = None
47
+
48
+
49
+ # DO NOT MODIFY -- This file is generated by type_spec
50
+ @serial_class(
51
+ named_type_path="sdk.recipe_identifiers.RecipeIdentifierMaterialFamily",
52
+ parse_require={"type"},
53
+ )
54
+ @dataclasses.dataclass(kw_only=True)
55
+ class RecipeIdentifierMaterialFamily:
56
+ type: typing.Literal["material_family_id"] = "material_family_id"
57
+ material_family_id: base_t.ObjectId
58
+
59
+
60
+ # DO NOT MODIFY -- This file is generated by type_spec
61
+ RecipeIdentifier = typing.Annotated[
62
+ typing.Union[RecipeIdentifierEditableName, RecipeIdentifierMetadata, RecipeIdentifierMaterialFamily],
63
+ serial_alias_annotation(
64
+ named_type_path="sdk.recipe_identifiers.RecipeIdentifier",
65
+ ),
66
+ ]
67
+
68
+
69
+ # DO NOT MODIFY -- This file is generated by type_spec
70
+ RecipeIdentifiers = typing.Annotated[
71
+ list[RecipeIdentifier],
72
+ serial_alias_annotation(
73
+ named_type_path="sdk.recipe_identifiers.RecipeIdentifiers",
74
+ ),
75
+ ]
76
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,9 @@
1
+ # flake8: noqa: F821
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ # DO NOT MODIFY -- This file is generated by type_spec
6
+ # Kept only for SDK backwards compatibility
7
+ from .recipe_inputs_t import InputValueType as InputValueType
8
+ from .recipe_inputs_t import QuantityBasis as QuantityBasis
9
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,30 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+
12
+ __all__: list[str] = [
13
+ "InputValueType",
14
+ "QuantityBasis",
15
+ ]
16
+
17
+
18
+ # DO NOT MODIFY -- This file is generated by type_spec
19
+ class InputValueType(StrEnum):
20
+ VALUE = "value"
21
+ ACTUAL_VALUE = "actual_value"
22
+
23
+
24
+ # DO NOT MODIFY -- This file is generated by type_spec
25
+ class QuantityBasis(StrEnum):
26
+ ARBITRARY = "arbitrary"
27
+ MASS = "mass"
28
+ MOLES = "moles"
29
+ VOLUME = "volume"
30
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,50 +1,9 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
1
  # flake8: noqa: F821
3
- # ruff: noqa: E402
2
+ # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
6
- from __future__ import annotations
7
- import typing # noqa: F401
8
- import datetime # noqa: F401
9
- from decimal import Decimal # noqa: F401
10
- from pkgs.strenum_compat import StrEnum
11
- from dataclasses import dataclass
12
- from pkgs.serialization import serial_string_enum
13
- from . import base as base_t
14
-
15
- __all__: list[str] = [
16
- "RecipeLink",
17
- "RecipeLinkType",
18
- ]
19
-
20
-
21
- # DO NOT MODIFY -- This file is generated by type_spec
22
- @serial_string_enum(
23
- labels={
24
- "user_link": "Manual Link",
25
- "child": "Test Sample",
26
- "self": "Self Link",
27
- "recipe_as_output": "Analytical Sample",
28
- "control": "Control Link",
29
- "intermediate_recipe": "Used as Component Link",
30
- "previous_experiment": "Previous Sample",
31
- },
32
- )
33
- class RecipeLinkType(StrEnum):
34
- USER_LINK = "user_link"
35
- CHILD = "child"
36
- SELF = "self"
37
- RECIPE_AS_OUTPUT = "recipe_as_output"
38
- CONTROL = "control"
39
- INTERMEDIATE_RECIPE = "intermediate_recipe"
40
- PREVIOUS_EXPERIMENT = "previous_experiment"
41
-
42
-
43
5
  # DO NOT MODIFY -- This file is generated by type_spec
44
- @dataclass(kw_only=True, frozen=True, eq=True)
45
- class RecipeLink:
46
- recipe_id_from: base_t.ObjectId
47
- recipe_id_to: base_t.ObjectId
48
- link_type: str
49
- name: str
6
+ # Kept only for SDK backwards compatibility
7
+ from .recipe_links_t import RecipeLinkType as RecipeLinkType
8
+ from .recipe_links_t import RecipeLink as RecipeLink
50
9
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,54 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ import dataclasses
12
+ from pkgs.serialization import serial_class
13
+ from pkgs.serialization import serial_string_enum
14
+ from . import base_t
15
+
16
+ __all__: list[str] = [
17
+ "RecipeLink",
18
+ "RecipeLinkType",
19
+ ]
20
+
21
+
22
+ # DO NOT MODIFY -- This file is generated by type_spec
23
+ @serial_string_enum(
24
+ labels={
25
+ "user_link": "Manual Link",
26
+ "child": "Test Sample",
27
+ "self": "Self Link",
28
+ "recipe_as_output": "Analytical Sample",
29
+ "control": "Control Link",
30
+ "intermediate_recipe": "Used as Component Link",
31
+ "previous_experiment": "Previous Sample",
32
+ },
33
+ )
34
+ class RecipeLinkType(StrEnum):
35
+ USER_LINK = "user_link"
36
+ CHILD = "child"
37
+ SELF = "self"
38
+ RECIPE_AS_OUTPUT = "recipe_as_output"
39
+ CONTROL = "control"
40
+ INTERMEDIATE_RECIPE = "intermediate_recipe"
41
+ PREVIOUS_EXPERIMENT = "previous_experiment"
42
+
43
+
44
+ # DO NOT MODIFY -- This file is generated by type_spec
45
+ @serial_class(
46
+ named_type_path="sdk.recipe_links.RecipeLink",
47
+ )
48
+ @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
49
+ class RecipeLink:
50
+ recipe_id_from: base_t.ObjectId
51
+ recipe_id_to: base_t.ObjectId
52
+ link_type: str
53
+ name: typing.Optional[str]
54
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,50 +1,10 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
1
  # flake8: noqa: F821
3
- # ruff: noqa: E402
2
+ # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
6
- from __future__ import annotations
7
- import typing # noqa: F401
8
- import datetime # noqa: F401
9
- from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
11
- from pkgs.serialization import serial_class
12
- from . import base as base_t
13
-
14
- __all__: list[str] = [
15
- "MetadataValue",
16
- "RecipeMetadata",
17
- "SimpleRecipeMetadataField",
18
- ]
19
-
20
-
21
- # DO NOT MODIFY -- This file is generated by type_spec
22
- @serial_class(
23
- to_string_values={"value_numeric"},
24
- )
25
- @dataclass(kw_only=True)
26
- class MetadataValue:
27
- metadata_id: base_t.ObjectId
28
- value_numeric: typing.Optional[Decimal] = None
29
- value_str: typing.Optional[str] = None
30
-
31
-
32
- # DO NOT MODIFY -- This file is generated by type_spec
33
- @dataclass(kw_only=True)
34
- class SimpleRecipeMetadataField:
35
- metadata_id: base_t.ObjectId
36
- name: str
37
- quantity_type: str
38
-
39
-
40
5
  # DO NOT MODIFY -- This file is generated by type_spec
41
- @serial_class(
42
- unconverted_values={"quantity_json"},
43
- to_string_values={"quantity_dec"},
44
- )
45
- @dataclass(kw_only=True)
46
- class RecipeMetadata:
47
- metadata_id: base_t.ObjectId
48
- quantity_dec: typing.Optional[Decimal] = None
49
- quantity_json: typing.Optional[base_t.JsonValue] = None
6
+ # Kept only for SDK backwards compatibility
7
+ from .recipe_metadata_t import MetadataValue as MetadataValue
8
+ from .recipe_metadata_t import SimpleRecipeMetadataField as SimpleRecipeMetadataField
9
+ from .recipe_metadata_t import RecipeMetadata as RecipeMetadata
50
10
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,58 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from . import base_t
13
+
14
+ __all__: list[str] = [
15
+ "MetadataValue",
16
+ "RecipeMetadata",
17
+ "SimpleRecipeMetadataField",
18
+ ]
19
+
20
+
21
+ # DO NOT MODIFY -- This file is generated by type_spec
22
+ @serial_class(
23
+ named_type_path="sdk.recipe_metadata.MetadataValue",
24
+ unconverted_values={"value_json"},
25
+ to_string_values={"value_numeric"},
26
+ )
27
+ @dataclasses.dataclass(kw_only=True)
28
+ class MetadataValue:
29
+ metadata_id: base_t.ObjectId
30
+ value_numeric: Decimal | None = None
31
+ value_str: str | None = None
32
+ value_json: base_t.JsonValue | None = None
33
+ value_file_ids: list[base_t.ObjectId] | None = None
34
+
35
+
36
+ # DO NOT MODIFY -- This file is generated by type_spec
37
+ @serial_class(
38
+ named_type_path="sdk.recipe_metadata.SimpleRecipeMetadataField",
39
+ )
40
+ @dataclasses.dataclass(kw_only=True)
41
+ class SimpleRecipeMetadataField:
42
+ metadata_id: base_t.ObjectId
43
+ name: str
44
+ quantity_type: str
45
+
46
+
47
+ # DO NOT MODIFY -- This file is generated by type_spec
48
+ @serial_class(
49
+ named_type_path="sdk.recipe_metadata.RecipeMetadata",
50
+ unconverted_values={"quantity_json"},
51
+ to_string_values={"quantity_dec"},
52
+ )
53
+ @dataclasses.dataclass(kw_only=True)
54
+ class RecipeMetadata:
55
+ metadata_id: base_t.ObjectId
56
+ quantity_dec: Decimal | None = None
57
+ quantity_json: base_t.JsonValue | None = None
58
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,24 +1,8 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
1
  # flake8: noqa: F821
3
- # ruff: noqa: E402
2
+ # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
6
- from __future__ import annotations
7
- import typing # noqa: F401
8
- import datetime # noqa: F401
9
- from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
11
- from . import base as base_t
12
-
13
- __all__: list[str] = [
14
- "RecipeOutputMetadataField",
15
- ]
16
-
17
-
18
5
  # DO NOT MODIFY -- This file is generated by type_spec
19
- @dataclass(kw_only=True)
20
- class RecipeOutputMetadataField:
21
- id: base_t.ObjectId
22
- name: str
23
- quantity_type: str
6
+ # Kept only for SDK backwards compatibility
7
+ from .recipe_output_metadata_t import RecipeOutputMetadataField as RecipeOutputMetadataField
24
8
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,28 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from . import base_t
13
+
14
+ __all__: list[str] = [
15
+ "RecipeOutputMetadataField",
16
+ ]
17
+
18
+
19
+ # DO NOT MODIFY -- This file is generated by type_spec
20
+ @serial_class(
21
+ named_type_path="sdk.recipe_output_metadata.RecipeOutputMetadataField",
22
+ )
23
+ @dataclasses.dataclass(kw_only=True)
24
+ class RecipeOutputMetadataField:
25
+ id: base_t.ObjectId
26
+ name: str
27
+ quantity_type: str
28
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,23 +1,8 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
1
  # flake8: noqa: F821
3
- # ruff: noqa: E402
2
+ # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
6
- from __future__ import annotations
7
- import typing # noqa: F401
8
- import datetime # noqa: F401
9
- from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
11
- from . import base as base_t
12
-
13
- __all__: list[str] = [
14
- "SimpleRecipeTag",
15
- ]
16
-
17
-
18
5
  # DO NOT MODIFY -- This file is generated by type_spec
19
- @dataclass(kw_only=True)
20
- class SimpleRecipeTag:
21
- recipe_tag_id: base_t.ObjectId
22
- name: str
6
+ # Kept only for SDK backwards compatibility
7
+ from .recipe_tags_t import SimpleRecipeTag as SimpleRecipeTag
23
8
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,27 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from . import base_t
13
+
14
+ __all__: list[str] = [
15
+ "SimpleRecipeTag",
16
+ ]
17
+
18
+
19
+ # DO NOT MODIFY -- This file is generated by type_spec
20
+ @serial_class(
21
+ named_type_path="sdk.recipe_tags.SimpleRecipeTag",
22
+ )
23
+ @dataclasses.dataclass(kw_only=True)
24
+ class SimpleRecipeTag:
25
+ recipe_tag_id: base_t.ObjectId
26
+ name: str
27
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,14 @@
1
+ # flake8: noqa: F821
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ # DO NOT MODIFY -- This file is generated by type_spec
6
+ # Kept only for SDK backwards compatibility
7
+ from .recipe_workflow_steps_t import RecipeWorkflowStepIdentifierType as RecipeWorkflowStepIdentifierType
8
+ from .recipe_workflow_steps_t import RecipeWorkflowStepIdentifierBase as RecipeWorkflowStepIdentifierBase
9
+ from .recipe_workflow_steps_t import RecipeWorkflowStepIdentifierDefault as RecipeWorkflowStepIdentifierDefault
10
+ from .recipe_workflow_steps_t import RecipeWorkflowStepPosition as RecipeWorkflowStepPosition
11
+ from .recipe_workflow_steps_t import RecipeWorkflowStepIdentifierWorkflowStep as RecipeWorkflowStepIdentifierWorkflowStep
12
+ from .recipe_workflow_steps_t import RecipeWorkflowStepIdentifierKey as RecipeWorkflowStepIdentifierKey
13
+ from .recipe_workflow_steps_t import RecipeWorkflowStepIdentifier as RecipeWorkflowStepIdentifier
14
+ # DO NOT MODIFY -- This file is generated by type_spec