UncountablePythonSDK 0.0.24__py3-none-any.whl → 0.0.131__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 (373) hide show
  1. docs/conf.py +60 -8
  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 +7 -5
  8. examples/async_batch.py +5 -6
  9. examples/basic_auth.py +7 -0
  10. examples/create_entity.py +4 -6
  11. examples/create_ingredient_sdk.py +34 -0
  12. examples/download_files.py +26 -0
  13. examples/edit_recipe_inputs.py +50 -0
  14. examples/integration-server/jobs/materials_auto/concurrent_cron.py +11 -0
  15. examples/integration-server/jobs/materials_auto/example_cron.py +21 -0
  16. examples/integration-server/jobs/materials_auto/example_http.py +47 -0
  17. examples/integration-server/jobs/materials_auto/example_instrument.py +100 -0
  18. examples/integration-server/jobs/materials_auto/example_parse.py +140 -0
  19. examples/integration-server/jobs/materials_auto/example_predictions.py +61 -0
  20. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +39 -0
  21. examples/integration-server/jobs/materials_auto/example_wh.py +23 -0
  22. examples/integration-server/jobs/materials_auto/profile.yaml +104 -0
  23. examples/integration-server/pyproject.toml +224 -0
  24. examples/invoke_uploader.py +26 -0
  25. examples/oauth.py +7 -0
  26. examples/set_recipe_metadata_file.py +40 -0
  27. examples/set_recipe_output_file_sdk.py +26 -0
  28. examples/upload_files.py +2 -3
  29. pkgs/argument_parser/__init__.py +9 -0
  30. pkgs/argument_parser/_is_namedtuple.py +3 -0
  31. pkgs/argument_parser/argument_parser.py +295 -74
  32. pkgs/argument_parser/case_convert.py +4 -3
  33. pkgs/filesystem_utils/__init__.py +20 -0
  34. pkgs/filesystem_utils/_blob_session.py +144 -0
  35. pkgs/filesystem_utils/_gdrive_session.py +309 -0
  36. pkgs/filesystem_utils/_local_session.py +69 -0
  37. pkgs/filesystem_utils/_s3_session.py +118 -0
  38. pkgs/filesystem_utils/_sftp_session.py +151 -0
  39. pkgs/filesystem_utils/file_type_utils.py +91 -0
  40. pkgs/filesystem_utils/filesystem_session.py +39 -0
  41. pkgs/py.typed +0 -0
  42. pkgs/serialization/__init__.py +8 -1
  43. pkgs/serialization/annotation.py +64 -0
  44. pkgs/serialization/missing_sentry.py +1 -1
  45. pkgs/serialization/opaque_key.py +1 -1
  46. pkgs/serialization/serial_alias.py +47 -0
  47. pkgs/serialization/serial_class.py +69 -54
  48. pkgs/serialization/serial_generic.py +16 -0
  49. pkgs/serialization/serial_union.py +84 -0
  50. pkgs/serialization/yaml.py +57 -0
  51. pkgs/serialization_util/__init__.py +7 -7
  52. pkgs/serialization_util/convert_to_snakecase.py +27 -0
  53. pkgs/serialization_util/dataclasses.py +14 -0
  54. pkgs/serialization_util/serialization_helpers.py +117 -71
  55. pkgs/type_spec/actions_registry/__main__.py +0 -4
  56. pkgs/type_spec/actions_registry/emit_typescript.py +5 -5
  57. pkgs/type_spec/builder.py +438 -109
  58. pkgs/type_spec/builder_types.py +9 -0
  59. pkgs/type_spec/config.py +52 -24
  60. pkgs/type_spec/cross_output_links.py +99 -0
  61. pkgs/type_spec/emit_io_ts.py +1 -1
  62. pkgs/type_spec/emit_open_api.py +160 -41
  63. pkgs/type_spec/emit_open_api_util.py +13 -7
  64. pkgs/type_spec/emit_python.py +450 -136
  65. pkgs/type_spec/emit_typescript.py +117 -250
  66. pkgs/type_spec/emit_typescript_util.py +293 -4
  67. pkgs/type_spec/load_types.py +20 -5
  68. pkgs/type_spec/non_discriminated_union_exceptions.py +14 -0
  69. pkgs/type_spec/open_api_util.py +29 -4
  70. pkgs/type_spec/parts/base.py.prepart +13 -10
  71. pkgs/type_spec/parts/base.ts.prepart +4 -0
  72. pkgs/type_spec/type_info/__main__.py +3 -1
  73. pkgs/type_spec/type_info/emit_type_info.py +161 -32
  74. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  75. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +308 -0
  76. pkgs/type_spec/util.py +4 -4
  77. pkgs/type_spec/value_spec/__main__.py +27 -10
  78. pkgs/type_spec/value_spec/convert_type.py +21 -1
  79. pkgs/type_spec/value_spec/emit_python.py +25 -7
  80. pkgs/type_spec/value_spec/types.py +1 -1
  81. uncountable/__init__.py +1 -2
  82. uncountable/core/__init__.py +11 -3
  83. uncountable/core/async_batch.py +16 -1
  84. uncountable/core/client.py +247 -52
  85. uncountable/core/environment.py +41 -0
  86. uncountable/core/file_upload.py +67 -22
  87. uncountable/core/types.py +8 -13
  88. uncountable/integration/cli.py +142 -0
  89. uncountable/integration/construct_client.py +43 -27
  90. uncountable/integration/cron.py +12 -11
  91. uncountable/integration/db/connect.py +12 -2
  92. uncountable/integration/db/session.py +25 -0
  93. uncountable/integration/entrypoint.py +4 -34
  94. uncountable/integration/executors/executors.py +147 -0
  95. uncountable/integration/executors/generic_upload_executor.py +336 -0
  96. uncountable/integration/executors/script_executor.py +15 -9
  97. uncountable/integration/http_server/__init__.py +5 -0
  98. uncountable/integration/http_server/types.py +69 -0
  99. uncountable/integration/job.py +246 -19
  100. uncountable/integration/queue_runner/__init__.py +0 -0
  101. uncountable/integration/queue_runner/command_server/__init__.py +28 -0
  102. uncountable/integration/queue_runner/command_server/command_client.py +133 -0
  103. uncountable/integration/queue_runner/command_server/command_server.py +142 -0
  104. uncountable/integration/queue_runner/command_server/constants.py +4 -0
  105. uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  106. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +58 -0
  107. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +57 -0
  108. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +114 -0
  109. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +264 -0
  110. uncountable/integration/queue_runner/command_server/types.py +75 -0
  111. uncountable/integration/queue_runner/datastore/__init__.py +3 -0
  112. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +250 -0
  113. uncountable/integration/queue_runner/datastore/interface.py +29 -0
  114. uncountable/integration/queue_runner/datastore/model.py +24 -0
  115. uncountable/integration/queue_runner/job_scheduler.py +200 -0
  116. uncountable/integration/queue_runner/queue_runner.py +34 -0
  117. uncountable/integration/queue_runner/types.py +7 -0
  118. uncountable/integration/queue_runner/worker.py +116 -0
  119. uncountable/integration/scan_profiles.py +67 -0
  120. uncountable/integration/scheduler.py +199 -0
  121. uncountable/integration/secret_retrieval/__init__.py +3 -0
  122. uncountable/integration/secret_retrieval/retrieve_secret.py +93 -0
  123. uncountable/integration/server.py +103 -54
  124. uncountable/integration/telemetry.py +251 -0
  125. uncountable/integration/webhook_server/entrypoint.py +97 -0
  126. uncountable/types/__init__.py +149 -30
  127. uncountable/types/api/batch/execute_batch.py +16 -9
  128. uncountable/types/api/batch/execute_batch_load_async.py +13 -7
  129. uncountable/types/api/chemical/convert_chemical_formats.py +20 -8
  130. uncountable/types/api/condition_parameters/__init__.py +1 -0
  131. uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
  132. uncountable/types/api/entity/create_entities.py +24 -12
  133. uncountable/types/api/entity/create_entity.py +22 -13
  134. uncountable/types/api/entity/create_or_update_entity.py +48 -0
  135. uncountable/types/api/entity/export_entities.py +59 -0
  136. uncountable/types/api/entity/get_entities_data.py +18 -9
  137. uncountable/types/api/entity/grant_entity_permissions.py +48 -0
  138. uncountable/types/api/entity/list_aggregate.py +79 -0
  139. uncountable/types/api/entity/list_entities.py +53 -14
  140. uncountable/types/api/entity/lock_entity.py +45 -0
  141. uncountable/types/api/entity/lookup_entity.py +116 -0
  142. uncountable/types/api/entity/resolve_entity_ids.py +19 -10
  143. uncountable/types/api/entity/set_entity_field_values.py +44 -0
  144. uncountable/types/api/entity/set_values.py +15 -8
  145. uncountable/types/api/entity/transition_entity_phase.py +27 -12
  146. uncountable/types/api/entity/unlock_entity.py +44 -0
  147. uncountable/types/api/equipment/__init__.py +1 -0
  148. uncountable/types/api/equipment/associate_equipment_input.py +43 -0
  149. uncountable/types/api/field_options/__init__.py +1 -0
  150. uncountable/types/api/field_options/upsert_field_options.py +55 -0
  151. uncountable/types/api/files/__init__.py +1 -0
  152. uncountable/types/api/files/download_file.py +77 -0
  153. uncountable/types/api/id_source/list_id_source.py +20 -11
  154. uncountable/types/api/id_source/match_id_source.py +15 -10
  155. uncountable/types/api/input_groups/get_input_group_names.py +16 -7
  156. uncountable/types/api/inputs/create_inputs.py +28 -14
  157. uncountable/types/api/inputs/get_input_data.py +34 -16
  158. uncountable/types/api/inputs/get_input_names.py +19 -10
  159. uncountable/types/api/inputs/get_inputs_data.py +29 -11
  160. uncountable/types/api/inputs/set_input_attribute_values.py +16 -10
  161. uncountable/types/api/inputs/set_input_category.py +44 -0
  162. uncountable/types/api/inputs/set_input_subcategories.py +45 -0
  163. uncountable/types/api/inputs/set_intermediate_type.py +50 -0
  164. uncountable/types/api/integrations/__init__.py +1 -0
  165. uncountable/types/api/integrations/publish_realtime_data.py +41 -0
  166. uncountable/types/api/integrations/push_notification.py +49 -0
  167. uncountable/types/api/integrations/register_sockets_token.py +41 -0
  168. uncountable/types/api/listing/__init__.py +1 -0
  169. uncountable/types/api/listing/fetch_listing.py +58 -0
  170. uncountable/types/api/material_families/__init__.py +1 -0
  171. uncountable/types/api/material_families/update_entity_material_families.py +47 -0
  172. uncountable/types/api/notebooks/__init__.py +1 -0
  173. uncountable/types/api/notebooks/add_notebook_content.py +119 -0
  174. uncountable/types/api/outputs/get_output_data.py +32 -17
  175. uncountable/types/api/outputs/get_output_names.py +18 -9
  176. uncountable/types/api/outputs/get_output_organization.py +173 -0
  177. uncountable/types/api/outputs/resolve_output_conditions.py +23 -11
  178. uncountable/types/api/permissions/set_core_permissions.py +31 -15
  179. uncountable/types/api/project/get_projects.py +20 -11
  180. uncountable/types/api/project/get_projects_data.py +23 -14
  181. uncountable/types/api/recipe_links/create_recipe_link.py +17 -10
  182. uncountable/types/api/recipe_links/remove_recipe_link.py +45 -0
  183. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +19 -10
  184. uncountable/types/api/recipes/add_recipe_to_project.py +42 -0
  185. uncountable/types/api/recipes/add_time_series_data.py +64 -0
  186. uncountable/types/api/recipes/archive_recipes.py +14 -7
  187. uncountable/types/api/recipes/associate_recipe_as_input.py +16 -8
  188. uncountable/types/api/recipes/associate_recipe_as_lot.py +14 -7
  189. uncountable/types/api/recipes/clear_recipe_outputs.py +42 -0
  190. uncountable/types/api/recipes/create_mix_order.py +44 -0
  191. uncountable/types/api/recipes/create_recipe.py +21 -14
  192. uncountable/types/api/recipes/create_recipes.py +25 -13
  193. uncountable/types/api/recipes/disassociate_recipe_as_input.py +14 -7
  194. uncountable/types/api/recipes/edit_recipe_inputs.py +208 -19
  195. uncountable/types/api/recipes/get_column_calculation_values.py +57 -0
  196. uncountable/types/api/recipes/get_curve.py +15 -9
  197. uncountable/types/api/recipes/get_recipe_calculations.py +17 -11
  198. uncountable/types/api/recipes/get_recipe_links.py +14 -8
  199. uncountable/types/api/recipes/get_recipe_names.py +16 -7
  200. uncountable/types/api/recipes/get_recipe_output_metadata.py +16 -10
  201. uncountable/types/api/recipes/get_recipes_data.py +96 -45
  202. uncountable/types/api/recipes/lock_recipes.py +64 -0
  203. uncountable/types/api/recipes/remove_recipe_from_project.py +42 -0
  204. uncountable/types/api/recipes/set_recipe_inputs.py +19 -13
  205. uncountable/types/api/recipes/set_recipe_metadata.py +14 -7
  206. uncountable/types/api/recipes/set_recipe_output_annotations.py +114 -0
  207. uncountable/types/api/recipes/set_recipe_output_file.py +55 -0
  208. uncountable/types/api/recipes/set_recipe_outputs.py +40 -15
  209. uncountable/types/api/recipes/set_recipe_tags.py +30 -13
  210. uncountable/types/api/recipes/set_recipe_total.py +59 -0
  211. uncountable/types/api/recipes/unarchive_recipes.py +41 -0
  212. uncountable/types/api/recipes/unlock_recipes.py +51 -0
  213. uncountable/types/api/runsheet/__init__.py +1 -0
  214. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  215. uncountable/types/api/triggers/run_trigger.py +15 -8
  216. uncountable/types/api/uploader/__init__.py +1 -0
  217. uncountable/types/api/uploader/complete_async_parse.py +46 -0
  218. uncountable/types/api/uploader/invoke_uploader.py +46 -0
  219. uncountable/types/api/user/__init__.py +1 -0
  220. uncountable/types/api/user/get_current_user_info.py +40 -0
  221. uncountable/types/async_batch.py +8 -52
  222. uncountable/types/async_batch_processor.py +694 -18
  223. uncountable/types/async_batch_t.py +108 -0
  224. uncountable/types/async_jobs.py +8 -0
  225. uncountable/types/async_jobs_t.py +52 -0
  226. uncountable/types/auth_retrieval.py +11 -0
  227. uncountable/types/auth_retrieval_t.py +75 -0
  228. uncountable/types/base.py +5 -80
  229. uncountable/types/base_t.py +87 -0
  230. uncountable/types/calculations.py +3 -19
  231. uncountable/types/calculations_t.py +26 -0
  232. uncountable/types/chemical_structure.py +3 -23
  233. uncountable/types/chemical_structure_t.py +28 -0
  234. uncountable/types/client_base.py +1170 -88
  235. uncountable/types/client_config.py +8 -0
  236. uncountable/types/client_config_t.py +36 -0
  237. uncountable/types/curves.py +5 -43
  238. uncountable/types/curves_t.py +50 -0
  239. uncountable/types/data.py +12 -0
  240. uncountable/types/data_t.py +103 -0
  241. uncountable/types/entity.py +8 -270
  242. uncountable/types/entity_t.py +446 -0
  243. uncountable/types/experiment_groups.py +3 -19
  244. uncountable/types/experiment_groups_t.py +26 -0
  245. uncountable/types/exports.py +8 -0
  246. uncountable/types/exports_t.py +34 -0
  247. uncountable/types/field_values.py +25 -61
  248. uncountable/types/field_values_t.py +302 -0
  249. uncountable/types/fields.py +3 -20
  250. uncountable/types/fields_t.py +27 -0
  251. uncountable/types/generic_upload.py +14 -0
  252. uncountable/types/generic_upload_t.py +119 -0
  253. uncountable/types/id_source.py +7 -45
  254. uncountable/types/id_source_t.py +68 -0
  255. uncountable/types/identifier.py +6 -50
  256. uncountable/types/identifier_t.py +62 -0
  257. uncountable/types/input_attributes.py +3 -25
  258. uncountable/types/input_attributes_t.py +29 -0
  259. uncountable/types/inputs.py +6 -57
  260. uncountable/types/inputs_t.py +82 -0
  261. uncountable/types/integration_server.py +8 -0
  262. uncountable/types/integration_server_t.py +46 -0
  263. uncountable/types/integration_session.py +10 -0
  264. uncountable/types/integration_session_t.py +60 -0
  265. uncountable/types/integrations.py +10 -0
  266. uncountable/types/integrations_t.py +62 -0
  267. uncountable/types/job_definition.py +28 -0
  268. uncountable/types/job_definition_t.py +285 -0
  269. uncountable/types/listing.py +9 -0
  270. uncountable/types/listing_t.py +51 -0
  271. uncountable/types/notices.py +8 -0
  272. uncountable/types/notices_t.py +37 -0
  273. uncountable/types/notifications.py +11 -0
  274. uncountable/types/notifications_t.py +74 -0
  275. uncountable/types/outputs.py +3 -22
  276. uncountable/types/outputs_t.py +29 -0
  277. uncountable/types/overrides.py +9 -0
  278. uncountable/types/overrides_t.py +49 -0
  279. uncountable/types/permissions.py +3 -42
  280. uncountable/types/permissions_t.py +45 -0
  281. uncountable/types/phases.py +3 -19
  282. uncountable/types/phases_t.py +26 -0
  283. uncountable/types/post_base.py +3 -26
  284. uncountable/types/post_base_t.py +29 -0
  285. uncountable/types/queued_job.py +17 -0
  286. uncountable/types/queued_job_t.py +140 -0
  287. uncountable/types/recipe_identifiers.py +7 -58
  288. uncountable/types/recipe_identifiers_t.py +75 -0
  289. uncountable/types/recipe_inputs.py +4 -26
  290. uncountable/types/recipe_inputs_t.py +29 -0
  291. uncountable/types/recipe_links.py +4 -46
  292. uncountable/types/recipe_links_t.py +53 -0
  293. uncountable/types/recipe_metadata.py +5 -48
  294. uncountable/types/recipe_metadata_t.py +57 -0
  295. uncountable/types/recipe_output_metadata.py +3 -20
  296. uncountable/types/recipe_output_metadata_t.py +27 -0
  297. uncountable/types/recipe_tags.py +3 -19
  298. uncountable/types/recipe_tags_t.py +26 -0
  299. uncountable/types/recipe_workflow_steps.py +9 -73
  300. uncountable/types/recipe_workflow_steps_t.py +95 -0
  301. uncountable/types/recipes.py +7 -0
  302. uncountable/types/recipes_t.py +25 -0
  303. uncountable/types/response.py +3 -21
  304. uncountable/types/response_t.py +26 -0
  305. uncountable/types/secret_retrieval.py +11 -0
  306. uncountable/types/secret_retrieval_t.py +75 -0
  307. uncountable/types/sockets.py +20 -0
  308. uncountable/types/sockets_t.py +169 -0
  309. uncountable/types/structured_filters.py +25 -0
  310. uncountable/types/structured_filters_t.py +248 -0
  311. uncountable/types/units.py +3 -19
  312. uncountable/types/units_t.py +26 -0
  313. uncountable/types/uploader.py +24 -0
  314. uncountable/types/uploader_t.py +222 -0
  315. uncountable/types/users.py +3 -20
  316. uncountable/types/users_t.py +27 -0
  317. uncountable/types/webhook_job.py +9 -0
  318. uncountable/types/webhook_job_t.py +48 -0
  319. uncountable/types/workflows.py +4 -28
  320. uncountable/types/workflows_t.py +38 -0
  321. uncountablepythonsdk-0.0.131.dist-info/METADATA +64 -0
  322. uncountablepythonsdk-0.0.131.dist-info/RECORD +363 -0
  323. {UncountablePythonSDK-0.0.24.dist-info → uncountablepythonsdk-0.0.131.dist-info}/WHEEL +1 -1
  324. {UncountablePythonSDK-0.0.24.dist-info → uncountablepythonsdk-0.0.131.dist-info}/top_level.txt +0 -1
  325. UncountablePythonSDK-0.0.24.dist-info/METADATA +0 -47
  326. UncountablePythonSDK-0.0.24.dist-info/RECORD +0 -216
  327. docs/quickstart.md +0 -19
  328. examples/recipe-import/importer.py +0 -39
  329. type_spec/external/api/batch/execute_batch.yaml +0 -56
  330. type_spec/external/api/batch/execute_batch_load_async.yaml +0 -18
  331. type_spec/external/api/chemical/convert_chemical_formats.yaml +0 -33
  332. type_spec/external/api/entity/create_entities.yaml +0 -45
  333. type_spec/external/api/entity/create_entity.yaml +0 -51
  334. type_spec/external/api/entity/get_entities_data.yaml +0 -29
  335. type_spec/external/api/entity/list_entities.yaml +0 -52
  336. type_spec/external/api/entity/resolve_entity_ids.yaml +0 -29
  337. type_spec/external/api/entity/set_values.yaml +0 -18
  338. type_spec/external/api/entity/transition_entity_phase.yaml +0 -44
  339. type_spec/external/api/id_source/list_id_source.yaml +0 -35
  340. type_spec/external/api/id_source/match_id_source.yaml +0 -32
  341. type_spec/external/api/input_groups/get_input_group_names.yaml +0 -29
  342. type_spec/external/api/inputs/create_inputs.yaml +0 -48
  343. type_spec/external/api/inputs/get_input_data.yaml +0 -95
  344. type_spec/external/api/inputs/get_input_names.yaml +0 -38
  345. type_spec/external/api/inputs/get_inputs_data.yaml +0 -82
  346. type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -33
  347. type_spec/external/api/outputs/get_output_data.yaml +0 -92
  348. type_spec/external/api/outputs/get_output_names.yaml +0 -35
  349. type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -50
  350. type_spec/external/api/permissions/set_core_permissions.yaml +0 -69
  351. type_spec/external/api/project/get_projects.yaml +0 -42
  352. type_spec/external/api/project/get_projects_data.yaml +0 -50
  353. type_spec/external/api/recipe_links/create_recipe_link.yaml +0 -25
  354. type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -41
  355. type_spec/external/api/recipes/archive_recipes.yaml +0 -20
  356. type_spec/external/api/recipes/associate_recipe_as_input.yaml +0 -19
  357. type_spec/external/api/recipes/associate_recipe_as_lot.yaml +0 -19
  358. type_spec/external/api/recipes/create_recipe.yaml +0 -39
  359. type_spec/external/api/recipes/create_recipes.yaml +0 -47
  360. type_spec/external/api/recipes/disassociate_recipe_as_input.yaml +0 -16
  361. type_spec/external/api/recipes/edit_recipe_inputs.yaml +0 -85
  362. type_spec/external/api/recipes/get_curve.yaml +0 -21
  363. type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -39
  364. type_spec/external/api/recipes/get_recipe_links.yaml +0 -26
  365. type_spec/external/api/recipes/get_recipe_names.yaml +0 -29
  366. type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -36
  367. type_spec/external/api/recipes/get_recipes_data.yaml +0 -244
  368. type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -42
  369. type_spec/external/api/recipes/set_recipe_metadata.yaml +0 -20
  370. type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -52
  371. type_spec/external/api/recipes/set_recipe_tags.yaml +0 -62
  372. type_spec/external/api/triggers/run_trigger.yaml +0 -18
  373. uncountable/integration/types.py +0 -89
@@ -0,0 +1,45 @@
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
+ from pkgs.serialization import serial_string_enum
11
+
12
+ __all__: list[str] = [
13
+ "CorePermissionType",
14
+ ]
15
+
16
+
17
+ # DO NOT MODIFY -- This file is generated by type_spec
18
+ @serial_string_enum(
19
+ labels={
20
+ "admin_rights": "Admin Rights",
21
+ "read_ingredients": "View Ingredients",
22
+ "read_recipe_all": "View Entire Recipe",
23
+ "read_recipe_outputs": "View Recipe Outputs",
24
+ "view_material_family": "View Material Family",
25
+ "write_ingredients": "Modify Ingredients",
26
+ "write_outputs": "Modify Outputs",
27
+ "write_recipe_all": "Modify Entire Recipe",
28
+ "write_recipe_ingredients": "Modify Recipe Inputs",
29
+ "write_recipe_outputs": "Modify Recipe Outputs",
30
+ "add_recipe": "Create Experiments",
31
+ },
32
+ )
33
+ class CorePermissionType(StrEnum):
34
+ ADMIN_RIGHTS = "admin_rights"
35
+ READ_INGREDIENTS = "read_ingredients"
36
+ READ_RECIPE_ALL = "read_recipe_all"
37
+ READ_RECIPE_OUTPUTS = "read_recipe_outputs"
38
+ VIEW_MATERIAL_FAMILY = "view_material_family"
39
+ WRITE_INGREDIENTS = "write_ingredients"
40
+ WRITE_OUTPUTS = "write_outputs"
41
+ WRITE_RECIPE_ALL = "write_recipe_all"
42
+ WRITE_RECIPE_INGREDIENTS = "write_recipe_ingredients"
43
+ WRITE_RECIPE_OUTPUTS = "write_recipe_outputs"
44
+ ADD_RECIPE = "add_recipe"
45
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,23 +1,7 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
- # ruff: noqa: E402
1
+ # ruff: noqa: E402 Q003
4
2
  # fmt: off
5
3
  # 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
- "Phase",
15
- ]
16
-
17
-
18
4
  # DO NOT MODIFY -- This file is generated by type_spec
19
- @dataclass(kw_only=True)
20
- class Phase:
21
- id: base_t.ObjectId
22
- name: str
5
+ # Kept only for SDK backwards compatibility
6
+ from .phases_t import Phase as Phase
23
7
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,26 @@
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
+ import dataclasses
10
+ from pkgs.serialization import serial_class
11
+ from . import base_t
12
+
13
+ __all__: list[str] = [
14
+ "Phase",
15
+ ]
16
+
17
+
18
+ # DO NOT MODIFY -- This file is generated by type_spec
19
+ @serial_class(
20
+ named_type_path="sdk.phases.Phase",
21
+ )
22
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
23
+ class Phase:
24
+ id: base_t.ObjectId
25
+ name: str
26
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,30 +1,7 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
- # ruff: noqa: E402
1
+ # ruff: noqa: E402 Q003
4
2
  # fmt: off
5
3
  # 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
4
  # 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"
5
+ # Kept only for SDK backwards compatibility
6
+ from .post_base_t import UpdateType as UpdateType
30
7
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,29 @@
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
+ from pkgs.serialization import serial_string_enum
11
+
12
+ __all__: list[str] = [
13
+ "UpdateType",
14
+ ]
15
+
16
+
17
+ # DO NOT MODIFY -- This file is generated by type_spec
18
+ @serial_string_enum(
19
+ labels={
20
+ "append": "Append values",
21
+ "override": "Wipe existing and replace",
22
+ "remove": "Remove values",
23
+ },
24
+ )
25
+ class UpdateType(StrEnum):
26
+ APPEND = "append"
27
+ OVERRIDE = "override"
28
+ REMOVE = "remove"
29
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,17 @@
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 .queued_job_t import InvocationContextType as InvocationContextType
7
+ from .queued_job_t import InvocationContextBase as InvocationContextBase
8
+ from .queued_job_t import InvocationContextCron as InvocationContextCron
9
+ from .queued_job_t import InvocationContextManual as InvocationContextManual
10
+ from .queued_job_t import InvocationContextWebhook as InvocationContextWebhook
11
+ from .queued_job_t import InvocationContext as InvocationContext
12
+ from .queued_job_t import QueuedJobPayload as QueuedJobPayload
13
+ from .queued_job_t import QueuedJobResult as QueuedJobResult
14
+ from .queued_job_t import QueuedJobMetadata as QueuedJobMetadata
15
+ from .queued_job_t import QueuedJob as QueuedJob
16
+ from .queued_job_t import JobStatus as JobStatus
17
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,140 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ from __future__ import annotations
6
+ import typing # noqa: F401
7
+ import datetime # noqa: F401
8
+ from decimal import Decimal # noqa: F401
9
+ from enum import StrEnum
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from pkgs.serialization import serial_union_annotation
13
+ from . import base_t
14
+ from . import job_definition_t
15
+
16
+ __all__: list[str] = [
17
+ "InvocationContext",
18
+ "InvocationContextBase",
19
+ "InvocationContextCron",
20
+ "InvocationContextManual",
21
+ "InvocationContextType",
22
+ "InvocationContextWebhook",
23
+ "JobStatus",
24
+ "QueuedJob",
25
+ "QueuedJobMetadata",
26
+ "QueuedJobPayload",
27
+ "QueuedJobResult",
28
+ ]
29
+
30
+
31
+ # DO NOT MODIFY -- This file is generated by type_spec
32
+ class InvocationContextType(StrEnum):
33
+ CRON = "cron"
34
+ MANUAL = "manual"
35
+ WEBHOOK = "webhook"
36
+
37
+
38
+ # DO NOT MODIFY -- This file is generated by type_spec
39
+ @serial_class(
40
+ named_type_path="sdk.queued_job.InvocationContextBase",
41
+ )
42
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
43
+ class InvocationContextBase:
44
+ type: InvocationContextType
45
+
46
+
47
+ # DO NOT MODIFY -- This file is generated by type_spec
48
+ @serial_class(
49
+ named_type_path="sdk.queued_job.InvocationContextCron",
50
+ parse_require={"type"},
51
+ )
52
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
53
+ class InvocationContextCron(InvocationContextBase):
54
+ type: typing.Literal[InvocationContextType.CRON] = InvocationContextType.CRON
55
+
56
+
57
+ # DO NOT MODIFY -- This file is generated by type_spec
58
+ @serial_class(
59
+ named_type_path="sdk.queued_job.InvocationContextManual",
60
+ parse_require={"type"},
61
+ )
62
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
63
+ class InvocationContextManual(InvocationContextBase):
64
+ type: typing.Literal[InvocationContextType.MANUAL] = InvocationContextType.MANUAL
65
+
66
+
67
+ # DO NOT MODIFY -- This file is generated by type_spec
68
+ @serial_class(
69
+ named_type_path="sdk.queued_job.InvocationContextWebhook",
70
+ unconverted_values={"webhook_payload"},
71
+ parse_require={"type"},
72
+ )
73
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
74
+ class InvocationContextWebhook(InvocationContextBase):
75
+ type: typing.Literal[InvocationContextType.WEBHOOK] = InvocationContextType.WEBHOOK
76
+ webhook_payload: base_t.JsonValue
77
+
78
+
79
+ # DO NOT MODIFY -- This file is generated by type_spec
80
+ InvocationContext = typing.Annotated[
81
+ InvocationContextCron | InvocationContextManual | InvocationContextWebhook,
82
+ serial_union_annotation(
83
+ named_type_path="sdk.queued_job.InvocationContext",
84
+ discriminator="type",
85
+ discriminator_map={
86
+ "cron": InvocationContextCron,
87
+ "manual": InvocationContextManual,
88
+ "webhook": InvocationContextWebhook,
89
+ },
90
+ ),
91
+ ]
92
+
93
+
94
+ # DO NOT MODIFY -- This file is generated by type_spec
95
+ @serial_class(
96
+ named_type_path="sdk.queued_job.QueuedJobPayload",
97
+ )
98
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
99
+ class QueuedJobPayload:
100
+ invocation_context: InvocationContext
101
+
102
+
103
+ # DO NOT MODIFY -- This file is generated by type_spec
104
+ @serial_class(
105
+ named_type_path="sdk.queued_job.QueuedJobResult",
106
+ )
107
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
108
+ class QueuedJobResult:
109
+ queued_job_uuid: str
110
+ job_result: job_definition_t.JobResult
111
+
112
+
113
+ # DO NOT MODIFY -- This file is generated by type_spec
114
+ @serial_class(
115
+ named_type_path="sdk.queued_job.QueuedJobMetadata",
116
+ )
117
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
118
+ class QueuedJobMetadata:
119
+ queued_job_uuid: str
120
+ job_ref_name: str
121
+ num_attempts: int
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):
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"
140
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,62 +1,11 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
- # ruff: noqa: E402
1
+ # ruff: noqa: E402 Q003
4
2
  # fmt: off
5
3
  # 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
- "RecipeIdentifier",
16
- "RecipeIdentifierEditableName",
17
- "RecipeIdentifierMaterialFamily",
18
- "RecipeIdentifierMetadata",
19
- "RecipeIdentifiers",
20
- ]
21
-
22
-
23
- # DO NOT MODIFY -- This file is generated by type_spec
24
- @serial_class(
25
- parse_require={"type"},
26
- )
27
- @dataclass(kw_only=True)
28
- class RecipeIdentifierEditableName:
29
- type: typing.Literal["name"] = "name"
30
- editable_name: str
31
-
32
-
33
- # DO NOT MODIFY -- This file is generated by type_spec
34
- @serial_class(
35
- to_string_values={"quantity_dec"},
36
- parse_require={"type"},
37
- )
38
- @dataclass(kw_only=True)
39
- class RecipeIdentifierMetadata:
40
- type: typing.Literal["metadata"] = "metadata"
41
- recipe_metadata_id: base_t.ObjectId
42
- quantity_dec: typing.Optional[Decimal] = None
43
- quantity_json: typing.Optional[str] = None
44
-
45
-
46
- # DO NOT MODIFY -- This file is generated by type_spec
47
- @serial_class(
48
- parse_require={"type"},
49
- )
50
- @dataclass(kw_only=True)
51
- class RecipeIdentifierMaterialFamily:
52
- type: typing.Literal["material_family_id"] = "material_family_id"
53
- material_family_id: base_t.ObjectId
54
-
55
-
56
- # DO NOT MODIFY -- This file is generated by type_spec
57
- RecipeIdentifier = typing.Union[RecipeIdentifierEditableName, RecipeIdentifierMetadata, RecipeIdentifierMaterialFamily]
58
-
59
-
60
4
  # DO NOT MODIFY -- This file is generated by type_spec
61
- RecipeIdentifiers = list[RecipeIdentifier]
5
+ # Kept only for SDK backwards compatibility
6
+ from .recipe_identifiers_t import RecipeIdentifierEditableName as RecipeIdentifierEditableName
7
+ from .recipe_identifiers_t import RecipeIdentifierMetadata as RecipeIdentifierMetadata
8
+ from .recipe_identifiers_t import RecipeIdentifierMaterialFamily as RecipeIdentifierMaterialFamily
9
+ from .recipe_identifiers_t import RecipeIdentifier as RecipeIdentifier
10
+ from .recipe_identifiers_t import RecipeIdentifiers as RecipeIdentifiers
62
11
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,75 @@
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
+ import dataclasses
10
+ from pkgs.serialization import serial_class
11
+ from pkgs.serialization import serial_alias_annotation
12
+ from . import base_t
13
+
14
+ __all__: list[str] = [
15
+ "RecipeIdentifier",
16
+ "RecipeIdentifierEditableName",
17
+ "RecipeIdentifierMaterialFamily",
18
+ "RecipeIdentifierMetadata",
19
+ "RecipeIdentifiers",
20
+ ]
21
+
22
+
23
+ # DO NOT MODIFY -- This file is generated by type_spec
24
+ @serial_class(
25
+ named_type_path="sdk.recipe_identifiers.RecipeIdentifierEditableName",
26
+ parse_require={"type"},
27
+ )
28
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
29
+ class RecipeIdentifierEditableName:
30
+ type: typing.Literal["name"] = "name"
31
+ editable_name: str
32
+
33
+
34
+ # DO NOT MODIFY -- This file is generated by type_spec
35
+ @serial_class(
36
+ named_type_path="sdk.recipe_identifiers.RecipeIdentifierMetadata",
37
+ to_string_values={"quantity_dec"},
38
+ parse_require={"type"},
39
+ )
40
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
41
+ class RecipeIdentifierMetadata:
42
+ type: typing.Literal["metadata"] = "metadata"
43
+ recipe_metadata_id: base_t.ObjectId
44
+ quantity_dec: Decimal | None = None
45
+ quantity_json: str | None = None
46
+
47
+
48
+ # DO NOT MODIFY -- This file is generated by type_spec
49
+ @serial_class(
50
+ named_type_path="sdk.recipe_identifiers.RecipeIdentifierMaterialFamily",
51
+ parse_require={"type"},
52
+ )
53
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
54
+ class RecipeIdentifierMaterialFamily:
55
+ type: typing.Literal["material_family_id"] = "material_family_id"
56
+ material_family_id: base_t.ObjectId
57
+
58
+
59
+ # DO NOT MODIFY -- This file is generated by type_spec
60
+ RecipeIdentifier = typing.Annotated[
61
+ RecipeIdentifierEditableName | RecipeIdentifierMetadata | RecipeIdentifierMaterialFamily,
62
+ serial_alias_annotation(
63
+ named_type_path="sdk.recipe_identifiers.RecipeIdentifier",
64
+ ),
65
+ ]
66
+
67
+
68
+ # DO NOT MODIFY -- This file is generated by type_spec
69
+ RecipeIdentifiers = typing.Annotated[
70
+ list[RecipeIdentifier],
71
+ serial_alias_annotation(
72
+ named_type_path="sdk.recipe_identifiers.RecipeIdentifiers",
73
+ ),
74
+ ]
75
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,30 +1,8 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
- # ruff: noqa: E402
1
+ # ruff: noqa: E402 Q003
4
2
  # fmt: off
5
3
  # 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
4
  # 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"
5
+ # Kept only for SDK backwards compatibility
6
+ from .recipe_inputs_t import InputValueType as InputValueType
7
+ from .recipe_inputs_t import QuantityBasis as QuantityBasis
30
8
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,29 @@
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
+
11
+ __all__: list[str] = [
12
+ "InputValueType",
13
+ "QuantityBasis",
14
+ ]
15
+
16
+
17
+ # DO NOT MODIFY -- This file is generated by type_spec
18
+ class InputValueType(StrEnum):
19
+ VALUE = "value"
20
+ ACTUAL_VALUE = "actual_value"
21
+
22
+
23
+ # DO NOT MODIFY -- This file is generated by type_spec
24
+ class QuantityBasis(StrEnum):
25
+ ARBITRARY = "arbitrary"
26
+ MASS = "mass"
27
+ MOLES = "moles"
28
+ VOLUME = "volume"
29
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,50 +1,8 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
- # flake8: noqa: F821
3
- # ruff: noqa: E402
1
+ # ruff: noqa: E402 Q003
4
2
  # fmt: off
5
3
  # 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
4
  # 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
5
+ # Kept only for SDK backwards compatibility
6
+ from .recipe_links_t import RecipeLinkType as RecipeLinkType
7
+ from .recipe_links_t import RecipeLink as RecipeLink
50
8
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,53 @@
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_string_enum
13
+ from . import 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
+ # DO NOT MODIFY -- This file is generated by type_spec
44
+ @serial_class(
45
+ named_type_path="sdk.recipe_links.RecipeLink",
46
+ )
47
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
48
+ class RecipeLink:
49
+ recipe_id_from: base_t.ObjectId
50
+ recipe_id_to: base_t.ObjectId
51
+ link_type: str
52
+ name: str | None
53
+ # DO NOT MODIFY -- This file is generated by type_spec