UncountablePythonSDK 0.0.7__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 (311) 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.7.dist-info → UncountablePythonSDK-0.0.92.dist-info}/WHEEL +1 -1
  4. {UncountablePythonSDK-0.0.7.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/opaque_key.py +1 -1
  49. pkgs/serialization/serial_alias.py +47 -0
  50. pkgs/serialization/serial_class.py +65 -50
  51. pkgs/serialization/serial_generic.py +16 -0
  52. pkgs/serialization/serial_union.py +84 -0
  53. pkgs/serialization/yaml.py +57 -0
  54. pkgs/serialization_util/__init__.py +7 -7
  55. pkgs/serialization_util/_get_type_for_serialization.py +1 -3
  56. pkgs/serialization_util/convert_to_snakecase.py +27 -0
  57. pkgs/serialization_util/dataclasses.py +14 -0
  58. pkgs/serialization_util/serialization_helpers.py +118 -73
  59. pkgs/strenum_compat/strenum_compat.py +1 -9
  60. pkgs/type_spec/actions_registry/__init__.py +0 -0
  61. pkgs/type_spec/actions_registry/__main__.py +126 -0
  62. pkgs/type_spec/actions_registry/emit_typescript.py +182 -0
  63. pkgs/type_spec/builder.py +475 -89
  64. pkgs/type_spec/config.py +24 -19
  65. pkgs/type_spec/emit_io_ts.py +5 -2
  66. pkgs/type_spec/emit_open_api.py +266 -32
  67. pkgs/type_spec/emit_open_api_util.py +32 -13
  68. pkgs/type_spec/emit_python.py +601 -150
  69. pkgs/type_spec/emit_typescript.py +74 -273
  70. pkgs/type_spec/emit_typescript_util.py +239 -5
  71. pkgs/type_spec/load_types.py +55 -10
  72. pkgs/type_spec/open_api_util.py +30 -41
  73. pkgs/type_spec/parts/base.py.prepart +4 -3
  74. pkgs/type_spec/type_info/emit_type_info.py +178 -16
  75. pkgs/type_spec/util.py +11 -11
  76. pkgs/type_spec/value_spec/__main__.py +3 -3
  77. pkgs/type_spec/value_spec/convert_type.py +8 -1
  78. pkgs/type_spec/value_spec/emit_python.py +13 -4
  79. uncountable/__init__.py +1 -2
  80. uncountable/core/__init__.py +12 -2
  81. uncountable/core/async_batch.py +37 -0
  82. uncountable/core/client.py +293 -43
  83. uncountable/core/environment.py +41 -0
  84. uncountable/core/file_upload.py +135 -0
  85. uncountable/core/types.py +17 -0
  86. uncountable/integration/__init__.py +0 -0
  87. uncountable/integration/cli.py +49 -0
  88. uncountable/integration/construct_client.py +51 -0
  89. uncountable/integration/cron.py +29 -0
  90. uncountable/integration/db/__init__.py +0 -0
  91. uncountable/integration/db/connect.py +18 -0
  92. uncountable/integration/db/session.py +25 -0
  93. uncountable/integration/entrypoint.py +13 -0
  94. uncountable/integration/executors/__init__.py +0 -0
  95. uncountable/integration/executors/executors.py +148 -0
  96. uncountable/integration/executors/generic_upload_executor.py +284 -0
  97. uncountable/integration/executors/script_executor.py +25 -0
  98. uncountable/integration/job.py +87 -0
  99. uncountable/integration/queue_runner/__init__.py +0 -0
  100. uncountable/integration/queue_runner/command_server/__init__.py +24 -0
  101. uncountable/integration/queue_runner/command_server/command_client.py +68 -0
  102. uncountable/integration/queue_runner/command_server/command_server.py +64 -0
  103. uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  104. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +22 -0
  105. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +40 -0
  106. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +38 -0
  107. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +129 -0
  108. uncountable/integration/queue_runner/command_server/types.py +52 -0
  109. uncountable/integration/queue_runner/datastore/__init__.py +3 -0
  110. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +93 -0
  111. uncountable/integration/queue_runner/datastore/interface.py +19 -0
  112. uncountable/integration/queue_runner/datastore/model.py +17 -0
  113. uncountable/integration/queue_runner/job_scheduler.py +163 -0
  114. uncountable/integration/queue_runner/queue_runner.py +26 -0
  115. uncountable/integration/queue_runner/types.py +7 -0
  116. uncountable/integration/queue_runner/worker.py +119 -0
  117. uncountable/integration/scan_profiles.py +67 -0
  118. uncountable/integration/scheduler.py +150 -0
  119. uncountable/integration/secret_retrieval/__init__.py +3 -0
  120. uncountable/integration/secret_retrieval/retrieve_secret.py +93 -0
  121. uncountable/integration/server.py +117 -0
  122. uncountable/integration/telemetry.py +209 -0
  123. uncountable/integration/webhook_server/entrypoint.py +170 -0
  124. uncountable/types/__init__.py +151 -5
  125. uncountable/types/api/batch/execute_batch.py +15 -7
  126. uncountable/types/api/batch/execute_batch_load_async.py +42 -0
  127. uncountable/types/api/chemical/__init__.py +1 -0
  128. uncountable/types/api/chemical/convert_chemical_formats.py +63 -0
  129. uncountable/types/api/entity/create_entities.py +23 -10
  130. uncountable/types/api/entity/create_entity.py +21 -12
  131. uncountable/types/api/entity/get_entities_data.py +19 -29
  132. uncountable/types/api/entity/grant_entity_permissions.py +48 -0
  133. uncountable/types/api/entity/list_entities.py +28 -20
  134. uncountable/types/api/entity/lock_entity.py +45 -0
  135. uncountable/types/api/entity/resolve_entity_ids.py +19 -7
  136. uncountable/types/api/entity/set_entity_field_values.py +44 -0
  137. uncountable/types/api/entity/set_values.py +13 -28
  138. uncountable/types/api/entity/transition_entity_phase.py +80 -0
  139. uncountable/types/api/entity/unlock_entity.py +44 -0
  140. uncountable/types/api/equipment/__init__.py +1 -0
  141. uncountable/types/api/equipment/associate_equipment_input.py +44 -0
  142. uncountable/types/api/field_options/__init__.py +1 -0
  143. uncountable/types/api/field_options/upsert_field_options.py +55 -0
  144. uncountable/types/api/files/__init__.py +1 -0
  145. uncountable/types/api/files/download_file.py +77 -0
  146. uncountable/types/api/id_source/__init__.py +1 -0
  147. uncountable/types/api/id_source/list_id_source.py +56 -0
  148. uncountable/types/api/id_source/match_id_source.py +54 -0
  149. uncountable/types/api/input_groups/get_input_group_names.py +18 -7
  150. uncountable/types/api/inputs/create_inputs.py +25 -24
  151. uncountable/types/api/inputs/get_input_data.py +37 -31
  152. uncountable/types/api/inputs/get_input_names.py +20 -9
  153. uncountable/types/api/inputs/get_inputs_data.py +33 -27
  154. uncountable/types/api/inputs/set_input_attribute_values.py +18 -13
  155. uncountable/types/api/inputs/set_input_category.py +44 -0
  156. uncountable/types/api/inputs/set_input_subcategories.py +45 -0
  157. uncountable/types/api/inputs/set_intermediate_type.py +50 -0
  158. uncountable/types/api/material_families/__init__.py +1 -0
  159. uncountable/types/api/material_families/update_entity_material_families.py +48 -0
  160. uncountable/types/api/outputs/get_output_data.py +38 -29
  161. uncountable/types/api/outputs/get_output_names.py +20 -9
  162. uncountable/types/api/outputs/resolve_output_conditions.py +23 -10
  163. uncountable/types/api/permissions/__init__.py +1 -0
  164. uncountable/types/api/permissions/set_core_permissions.py +105 -0
  165. uncountable/types/api/project/get_projects.py +23 -19
  166. uncountable/types/api/project/get_projects_data.py +26 -43
  167. uncountable/types/api/recipe_links/__init__.py +1 -0
  168. uncountable/types/api/recipe_links/create_recipe_link.py +46 -0
  169. uncountable/types/api/recipe_links/remove_recipe_link.py +45 -0
  170. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +21 -10
  171. uncountable/types/api/recipes/add_recipe_to_project.py +42 -0
  172. uncountable/types/api/recipes/archive_recipes.py +42 -0
  173. uncountable/types/api/recipes/associate_recipe_as_input.py +44 -0
  174. uncountable/types/api/recipes/associate_recipe_as_lot.py +43 -0
  175. uncountable/types/api/recipes/clear_recipe_outputs.py +42 -0
  176. uncountable/types/api/recipes/create_recipe.py +51 -0
  177. uncountable/types/api/recipes/create_recipes.py +25 -24
  178. uncountable/types/api/recipes/disassociate_recipe_as_input.py +42 -0
  179. uncountable/types/api/recipes/edit_recipe_inputs.py +283 -0
  180. uncountable/types/api/recipes/get_column_calculation_values.py +58 -0
  181. uncountable/types/api/recipes/get_curve.py +13 -27
  182. uncountable/types/api/recipes/get_recipe_calculations.py +21 -21
  183. uncountable/types/api/recipes/get_recipe_links.py +14 -6
  184. uncountable/types/api/recipes/get_recipe_names.py +18 -7
  185. uncountable/types/api/recipes/get_recipe_output_metadata.py +18 -19
  186. uncountable/types/api/recipes/get_recipes_data.py +83 -144
  187. uncountable/types/api/recipes/lock_recipes.py +63 -0
  188. uncountable/types/api/recipes/remove_recipe_from_project.py +42 -0
  189. uncountable/types/api/recipes/set_recipe_inputs.py +21 -11
  190. uncountable/types/api/recipes/set_recipe_metadata.py +43 -0
  191. uncountable/types/api/recipes/set_recipe_output_annotations.py +115 -0
  192. uncountable/types/api/recipes/set_recipe_output_file.py +56 -0
  193. uncountable/types/api/recipes/set_recipe_outputs.py +28 -15
  194. uncountable/types/api/recipes/set_recipe_tags.py +109 -0
  195. uncountable/types/api/recipes/unarchive_recipes.py +41 -0
  196. uncountable/types/api/recipes/unlock_recipes.py +50 -0
  197. uncountable/types/api/triggers/__init__.py +1 -0
  198. uncountable/types/api/triggers/run_trigger.py +43 -0
  199. uncountable/types/api/uploader/__init__.py +1 -0
  200. uncountable/types/api/uploader/invoke_uploader.py +47 -0
  201. uncountable/types/async_batch.py +13 -0
  202. uncountable/types/async_batch_processor.py +384 -0
  203. uncountable/types/async_batch_t.py +97 -0
  204. uncountable/types/async_jobs.py +9 -0
  205. uncountable/types/async_jobs_t.py +53 -0
  206. uncountable/types/auth_retrieval.py +12 -0
  207. uncountable/types/auth_retrieval_t.py +75 -0
  208. uncountable/types/base.py +5 -78
  209. uncountable/types/base_t.py +85 -0
  210. uncountable/types/calculations.py +8 -0
  211. uncountable/types/calculations_t.py +27 -0
  212. uncountable/types/chemical_structure.py +8 -0
  213. uncountable/types/chemical_structure_t.py +28 -0
  214. uncountable/types/client_base.py +1115 -76
  215. uncountable/types/client_config.py +8 -0
  216. uncountable/types/client_config_t.py +26 -0
  217. uncountable/types/curves.py +10 -0
  218. uncountable/types/curves_t.py +51 -0
  219. uncountable/types/entity.py +8 -266
  220. uncountable/types/entity_t.py +393 -0
  221. uncountable/types/experiment_groups.py +8 -0
  222. uncountable/types/experiment_groups_t.py +27 -0
  223. uncountable/types/field_values.py +17 -23
  224. uncountable/types/field_values_t.py +204 -0
  225. uncountable/types/fields.py +8 -0
  226. uncountable/types/fields_t.py +28 -0
  227. uncountable/types/generic_upload.py +15 -0
  228. uncountable/types/generic_upload_t.py +119 -0
  229. uncountable/types/id_source.py +12 -0
  230. uncountable/types/id_source_t.py +68 -0
  231. uncountable/types/identifier.py +11 -0
  232. uncountable/types/identifier_t.py +63 -0
  233. uncountable/types/input_attributes.py +8 -0
  234. uncountable/types/input_attributes_t.py +30 -0
  235. uncountable/types/inputs.py +11 -0
  236. uncountable/types/inputs_t.py +83 -0
  237. uncountable/types/integration_server.py +9 -0
  238. uncountable/types/integration_server_t.py +42 -0
  239. uncountable/types/job_definition.py +27 -0
  240. uncountable/types/job_definition_t.py +260 -0
  241. uncountable/types/outputs.py +8 -0
  242. uncountable/types/outputs_t.py +30 -0
  243. uncountable/types/overrides.py +10 -0
  244. uncountable/types/overrides_t.py +49 -0
  245. uncountable/types/permissions.py +8 -0
  246. uncountable/types/permissions_t.py +46 -0
  247. uncountable/types/phases.py +8 -0
  248. uncountable/types/phases_t.py +27 -0
  249. uncountable/types/post_base.py +8 -0
  250. uncountable/types/post_base_t.py +30 -0
  251. uncountable/types/queued_job.py +16 -0
  252. uncountable/types/queued_job_t.py +123 -0
  253. uncountable/types/recipe_identifiers.py +12 -0
  254. uncountable/types/recipe_identifiers_t.py +76 -0
  255. uncountable/types/recipe_inputs.py +9 -0
  256. uncountable/types/recipe_inputs_t.py +30 -0
  257. uncountable/types/recipe_links.py +4 -44
  258. uncountable/types/recipe_links_t.py +54 -0
  259. uncountable/types/recipe_metadata.py +10 -0
  260. uncountable/types/recipe_metadata_t.py +58 -0
  261. uncountable/types/recipe_output_metadata.py +8 -0
  262. uncountable/types/recipe_output_metadata_t.py +28 -0
  263. uncountable/types/recipe_tags.py +8 -0
  264. uncountable/types/recipe_tags_t.py +27 -0
  265. uncountable/types/recipe_workflow_steps.py +14 -0
  266. uncountable/types/recipe_workflow_steps_t.py +95 -0
  267. uncountable/types/recipes.py +8 -0
  268. uncountable/types/recipes_t.py +25 -0
  269. uncountable/types/response.py +8 -0
  270. uncountable/types/response_t.py +26 -0
  271. uncountable/types/secret_retrieval.py +12 -0
  272. uncountable/types/secret_retrieval_t.py +75 -0
  273. uncountable/types/units.py +8 -0
  274. uncountable/types/units_t.py +27 -0
  275. uncountable/types/users.py +8 -0
  276. uncountable/types/users_t.py +28 -0
  277. uncountable/types/webhook_job.py +9 -0
  278. uncountable/types/webhook_job_t.py +37 -0
  279. uncountable/types/workflows.py +9 -0
  280. uncountable/types/workflows_t.py +39 -0
  281. UncountablePythonSDK-0.0.7.dist-info/METADATA +0 -27
  282. UncountablePythonSDK-0.0.7.dist-info/RECORD +0 -119
  283. examples/recipe-import/importer.py +0 -39
  284. type_spec/external/api/batch/execute_batch.yaml +0 -56
  285. type_spec/external/api/entity/create_entities.yaml +0 -33
  286. type_spec/external/api/entity/create_entity.yaml +0 -39
  287. type_spec/external/api/entity/get_entities_data.yaml +0 -55
  288. type_spec/external/api/entity/list_entities.yaml +0 -62
  289. type_spec/external/api/entity/resolve_entity_ids.yaml +0 -29
  290. type_spec/external/api/entity/set_values.yaml +0 -45
  291. type_spec/external/api/input_groups/get_input_group_names.yaml +0 -29
  292. type_spec/external/api/inputs/create_inputs.yaml +0 -61
  293. type_spec/external/api/inputs/get_input_data.yaml +0 -108
  294. type_spec/external/api/inputs/get_input_names.yaml +0 -38
  295. type_spec/external/api/inputs/get_inputs_data.yaml +0 -95
  296. type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -37
  297. type_spec/external/api/outputs/get_output_data.yaml +0 -103
  298. type_spec/external/api/outputs/get_output_names.yaml +0 -35
  299. type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -50
  300. type_spec/external/api/project/get_projects.yaml +0 -52
  301. type_spec/external/api/project/get_projects_data.yaml +0 -86
  302. type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -41
  303. type_spec/external/api/recipes/create_recipes.yaml +0 -60
  304. type_spec/external/api/recipes/get_curve.yaml +0 -50
  305. type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -49
  306. type_spec/external/api/recipes/get_recipe_links.yaml +0 -26
  307. type_spec/external/api/recipes/get_recipe_names.yaml +0 -29
  308. type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -49
  309. type_spec/external/api/recipes/get_recipes_data.yaml +0 -372
  310. type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -36
  311. type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -56
@@ -1,15 +1,21 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
2
  # flake8: noqa: F821
3
- # ruff: noqa: E402
3
+ # ruff: noqa: E402 Q003
4
4
  # fmt: off
5
5
  # isort: skip_file
6
6
  from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
- from ... import base as base_t
12
+ from ... import base_t
13
+ from ... import experiment_groups_t
14
+ from ... import inputs_t
15
+ from ... import outputs_t
16
+ from ... import recipe_metadata_t
17
+ from ... import recipe_tags_t
18
+ from ... import workflows_t
13
19
 
14
20
  __all__: list[str] = [
15
21
  "Arguments",
@@ -19,242 +25,175 @@ __all__: list[str] = [
19
25
  "ENDPOINT_PATH",
20
26
  "Recipe",
21
27
  "RecipeInput",
22
- "RecipeMetadata",
23
28
  "RecipeOutput",
24
29
  "RecipeStep",
25
30
  "RecipeStepGroup",
26
31
  "RecipeStepRelationship",
27
32
  "RecipeWorkflowStep",
28
- "SimpleExperimentGroup",
29
- "SimpleInput",
30
- "SimpleOutput",
31
33
  "SimpleOutputCondition",
32
- "SimpleRecipeMetadataField",
33
- "SimpleRecipeTag",
34
- "SimpleUnit",
35
- "SimpleUser",
36
- "SimpleWorkflow",
37
- "SimpleWorkflowStep",
38
34
  ]
39
35
 
40
36
  ENDPOINT_METHOD = "GET"
41
37
  ENDPOINT_PATH = "api/external/recipes/external_get_recipes_data"
42
38
 
43
39
 
44
- # DO NOT MODIFY -- This file is generated by type_spec
45
- @dataclass(kw_only=True)
46
- class Arguments:
47
- recipe_ids: typing.Optional[list[int]]
48
- project_id: typing.Optional[int]
49
- offset: typing.Optional[int]
50
- limit: typing.Optional[int]
51
-
52
-
53
- # DO NOT MODIFY -- This file is generated by type_spec
54
- @dataclass(kw_only=True)
55
- class SimpleRecipeMetadataField:
56
- metadata_id: int
57
- name: str
58
- quantity_type: str
59
-
60
-
61
40
  # DO NOT MODIFY -- This file is generated by type_spec
62
41
  @serial_class(
63
- unconverted_values={"quantity_json"},
64
- to_string_values={"quantity_dec"},
42
+ named_type_path="sdk.api.recipes.get_recipes_data.Arguments",
65
43
  )
66
- @dataclass(kw_only=True)
67
- class RecipeMetadata:
68
- metadata_id: int
69
- quantity_dec: Decimal
70
- quantity_json: base_t.JsonValue
71
-
72
-
73
- # DO NOT MODIFY -- This file is generated by type_spec
74
- @dataclass(kw_only=True)
75
- class SimpleRecipeTag:
76
- recipe_tag_id: int
77
- name: str
78
-
79
-
80
- # DO NOT MODIFY -- This file is generated by type_spec
81
- @dataclass(kw_only=True)
82
- class SimpleExperimentGroup:
83
- experiment_group_id: int
84
- name: str
85
-
86
-
87
- # DO NOT MODIFY -- This file is generated by type_spec
88
- @dataclass(kw_only=True)
89
- class SimpleUnit:
90
- unit_id: int
91
- name: str
44
+ @dataclasses.dataclass(kw_only=True)
45
+ class Arguments:
46
+ recipe_ids: typing.Optional[list[base_t.ObjectId]] | None = None
47
+ project_id: typing.Optional[base_t.ObjectId] | None = None
48
+ offset: typing.Optional[int] | None = None
49
+ limit: typing.Optional[int] | None = None
92
50
 
93
51
 
94
52
  # DO NOT MODIFY -- This file is generated by type_spec
95
53
  @serial_class(
54
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeOutput",
96
55
  unconverted_values={"quantity_json"},
97
56
  to_string_values={"quantity_dec"},
98
57
  )
99
- @dataclass(kw_only=True)
58
+ @dataclasses.dataclass(kw_only=True)
100
59
  class RecipeOutput:
101
- id: int
102
- output_id: int
60
+ id: base_t.ObjectId
61
+ output_id: base_t.ObjectId
103
62
  replicate_num: int
104
- quantity_dec: Decimal
105
63
  quantity_json: base_t.JsonValue
106
- curve_id: int
107
- output_condition_id: int
108
-
109
-
110
- # DO NOT MODIFY -- This file is generated by type_spec
111
- @dataclass(kw_only=True)
112
- class SimpleOutput:
113
- output_id: int
114
- name: str
115
- unit: typing.Optional[SimpleUnit]
116
- quantity_type: str
64
+ curve_id: typing.Optional[base_t.ObjectId]
65
+ output_condition_id: typing.Optional[base_t.ObjectId]
66
+ quantity_dec: Decimal | None = None
117
67
 
118
68
 
119
69
  # DO NOT MODIFY -- This file is generated by type_spec
120
70
  @serial_class(
71
+ named_type_path="sdk.api.recipes.get_recipes_data.ConditionParameterValue",
121
72
  unconverted_values={"quantity_json"},
122
73
  to_string_values={"quantity_dec"},
123
74
  )
124
- @dataclass(kw_only=True)
75
+ @dataclasses.dataclass(kw_only=True)
125
76
  class ConditionParameterValue:
126
- condition_parameter_id: int
77
+ condition_parameter_id: base_t.ObjectId
127
78
  condition_parameter_name: str
128
- quantity_dec: Decimal
129
79
  quantity_json: base_t.JsonValue
80
+ quantity_dec: Decimal | None = None
130
81
 
131
82
 
132
83
  # DO NOT MODIFY -- This file is generated by type_spec
133
- @dataclass(kw_only=True)
84
+ @serial_class(
85
+ named_type_path="sdk.api.recipes.get_recipes_data.SimpleOutputCondition",
86
+ )
87
+ @dataclasses.dataclass(kw_only=True)
134
88
  class SimpleOutputCondition:
135
- output_condition_id: int
89
+ output_condition_id: base_t.ObjectId
136
90
  condition_parameter_values: list[ConditionParameterValue]
137
91
 
138
92
 
139
- # DO NOT MODIFY -- This file is generated by type_spec
140
- @dataclass(kw_only=True)
141
- class SimpleWorkflowStep:
142
- workflow_step_id: int
143
- name: str
144
-
145
-
146
- # DO NOT MODIFY -- This file is generated by type_spec
147
- @dataclass(kw_only=True)
148
- class SimpleWorkflow:
149
- workflow_id: int
150
- name: str
151
- workflow_steps: list[SimpleWorkflowStep]
152
-
153
-
154
93
  # DO NOT MODIFY -- This file is generated by type_spec
155
94
  @serial_class(
95
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeInput",
156
96
  unconverted_values={"actual_quantity_json", "quantity_json"},
157
97
  to_string_values={"actual_quantity_dec", "quantity_dec"},
158
98
  )
159
- @dataclass(kw_only=True)
99
+ @dataclasses.dataclass(kw_only=True)
160
100
  class RecipeInput:
161
- input_id: int
162
- input_lot_recipe_id: typing.Optional[int]
163
- recipe_step_id: int
164
- quantity_dec: Decimal
101
+ id: base_t.ObjectId
102
+ input_id: base_t.ObjectId
103
+ input_lot_recipe_id: typing.Optional[base_t.ObjectId]
104
+ recipe_step_id: base_t.ObjectId
165
105
  quantity_json: base_t.JsonValue
166
- actual_quantity_dec: Decimal
106
+ curve_id: typing.Optional[base_t.ObjectId]
167
107
  actual_quantity_json: base_t.JsonValue
168
- input_type: str
169
108
  behavior: str
109
+ ingredient_role_id: typing.Optional[base_t.ObjectId]
110
+ quantity_dec: Decimal | None = None
111
+ actual_quantity_dec: Decimal | None = None
170
112
 
171
113
 
172
114
  # DO NOT MODIFY -- This file is generated by type_spec
173
- @dataclass(kw_only=True)
174
- class SimpleInput:
175
- input_id: int
176
- quantity_type: str
177
- name: str
178
- is_parameter: bool
179
- intermediate_recipe_id: typing.Optional[int]
180
-
181
-
182
- # DO NOT MODIFY -- This file is generated by type_spec
183
- @dataclass(kw_only=True)
115
+ @serial_class(
116
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeStep",
117
+ )
118
+ @dataclasses.dataclass(kw_only=True)
184
119
  class RecipeStep:
185
120
  name: typing.Optional[str]
186
- recipe_step_id: int
121
+ recipe_step_id: base_t.ObjectId
187
122
  recipe_step_number: int
188
- instructions: typing.Optional[str] = None
123
+ instructions: str | None = None
189
124
 
190
125
 
191
126
  # DO NOT MODIFY -- This file is generated by type_spec
192
- @dataclass(kw_only=True)
127
+ @serial_class(
128
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeStepGroup",
129
+ )
130
+ @dataclasses.dataclass(kw_only=True)
193
131
  class RecipeStepGroup:
194
132
  name: typing.Optional[str]
195
133
  recipe_steps: list[RecipeStep]
196
134
 
197
135
 
198
136
  # DO NOT MODIFY -- This file is generated by type_spec
199
- @dataclass(kw_only=True)
137
+ @serial_class(
138
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeWorkflowStep",
139
+ )
140
+ @dataclasses.dataclass(kw_only=True)
200
141
  class RecipeWorkflowStep:
201
- recipe_workflow_step_id: int
202
- workflow_step_id: int
142
+ recipe_workflow_step_id: base_t.ObjectId
143
+ workflow_step_id: base_t.ObjectId
203
144
  recipe_step_groups: list[RecipeStepGroup]
204
145
 
205
146
 
206
- # DO NOT MODIFY -- This file is generated by type_spec
207
- @dataclass(kw_only=True)
208
- class SimpleUser:
209
- user_id: int
210
- display_name: str
211
- email: str
212
-
213
-
214
147
  # DO NOT MODIFY -- This file is generated by type_spec
215
148
  @serial_class(
149
+ named_type_path="sdk.api.recipes.get_recipes_data.RecipeStepRelationship",
216
150
  to_string_values={"actual_quantity_dec", "quantity_dec"},
217
151
  )
218
- @dataclass(kw_only=True)
152
+ @dataclasses.dataclass(kw_only=True)
219
153
  class RecipeStepRelationship:
220
154
  step_relationship_id: base_t.ObjectId
221
155
  name: typing.Optional[str]
222
156
  source_recipe_workflow_step_id: base_t.ObjectId
223
157
  target_recipe_step_id: base_t.ObjectId
224
- quantity_dec: typing.Optional[Decimal] = None
225
- actual_quantity_dec: typing.Optional[Decimal] = None
158
+ quantity_dec: Decimal | None = None
159
+ actual_quantity_dec: Decimal | None = None
226
160
 
227
161
 
228
162
  # DO NOT MODIFY -- This file is generated by type_spec
229
- @dataclass(kw_only=True)
163
+ @serial_class(
164
+ named_type_path="sdk.api.recipes.get_recipes_data.Recipe",
165
+ )
166
+ @dataclasses.dataclass(kw_only=True)
230
167
  class Recipe:
231
- recipe_id: int
168
+ recipe_id: base_t.ObjectId
232
169
  create_datetime: str
233
170
  last_modified_datetime: str
234
171
  name: str
235
172
  notes: typing.Optional[str]
236
- workflow_id: int
237
- metadata: list[RecipeMetadata]
173
+ workflow_id: base_t.ObjectId
174
+ metadata: list[recipe_metadata_t.RecipeMetadata]
238
175
  inputs: list[RecipeInput]
239
176
  outputs: list[RecipeOutput]
240
177
  workflow_steps: list[RecipeWorkflowStep]
241
- tag_ids: list[int]
242
- experiment_group_ids: list[int]
178
+ tag_ids: list[base_t.ObjectId]
179
+ experiment_group_ids: list[base_t.ObjectId]
243
180
  step_relationships: list[RecipeStepRelationship]
244
- creating_user_id: typing.Optional[int] = None
245
- barcode_value: typing.Optional[str] = None
181
+ creating_user_id: base_t.ObjectId | None = None
182
+ barcode_value: str | None = None
246
183
 
247
184
 
248
185
  # DO NOT MODIFY -- This file is generated by type_spec
249
- @dataclass(kw_only=True)
186
+ @serial_class(
187
+ named_type_path="sdk.api.recipes.get_recipes_data.Data",
188
+ )
189
+ @dataclasses.dataclass(kw_only=True)
250
190
  class Data:
251
191
  recipes: list[Recipe]
252
- workflows: list[SimpleWorkflow]
253
- metadata: list[SimpleRecipeMetadataField]
254
- inputs: list[SimpleInput]
255
- outputs: list[SimpleOutput]
192
+ workflows: list[workflows_t.SimpleWorkflow]
193
+ metadata: list[recipe_metadata_t.SimpleRecipeMetadataField]
194
+ inputs: list[inputs_t.SimpleInput]
195
+ outputs: list[outputs_t.SimpleOutput]
256
196
  output_conditions: list[SimpleOutputCondition]
257
- users: list[SimpleUser]
258
- recipe_tags: list[SimpleRecipeTag]
259
- experiment_groups: list[SimpleExperimentGroup]
197
+ recipe_tags: list[recipe_tags_t.SimpleRecipeTag]
198
+ experiment_groups: list[experiment_groups_t.SimpleExperimentGroup]
260
199
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,63 @@
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 ... import identifier_t
14
+
15
+ __all__: list[str] = [
16
+ "Arguments",
17
+ "Data",
18
+ "ENDPOINT_METHOD",
19
+ "ENDPOINT_PATH",
20
+ "RecipeLockBase",
21
+ "RecipeLockType",
22
+ ]
23
+
24
+ ENDPOINT_METHOD = "POST"
25
+ ENDPOINT_PATH = "api/external/recipes/lock_recipes"
26
+
27
+
28
+ # DO NOT MODIFY -- This file is generated by type_spec
29
+ class RecipeLockType(StrEnum):
30
+ ALL = "all"
31
+ INPUTS_ONLY = "inputs_only"
32
+
33
+
34
+ # DO NOT MODIFY -- This file is generated by type_spec
35
+ @serial_class(
36
+ named_type_path="sdk.api.recipes.lock_recipes.RecipeLockBase",
37
+ )
38
+ @dataclasses.dataclass(kw_only=True)
39
+ class RecipeLockBase:
40
+ recipe: identifier_t.IdentifierKey
41
+
42
+
43
+ # DO NOT MODIFY -- This file is generated by type_spec
44
+ @serial_class(
45
+ named_type_path="sdk.api.recipes.lock_recipes.Arguments",
46
+ )
47
+ @dataclasses.dataclass(kw_only=True)
48
+ class Arguments:
49
+ type: RecipeLockType = RecipeLockType.ALL
50
+ recipes: list[identifier_t.IdentifierKey]
51
+ globally_removable: bool
52
+ lock_samples: bool | None = None
53
+ comments: str | None = None
54
+
55
+
56
+ # DO NOT MODIFY -- This file is generated by type_spec
57
+ @serial_class(
58
+ named_type_path="sdk.api.recipes.lock_recipes.Data",
59
+ )
60
+ @dataclasses.dataclass(kw_only=True)
61
+ class Data:
62
+ pass
63
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,42 @@
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 identifier_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "Data",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ ]
20
+
21
+ ENDPOINT_METHOD = "POST"
22
+ ENDPOINT_PATH = "api/external/recipes/remove_recipe_from_project"
23
+
24
+
25
+ # DO NOT MODIFY -- This file is generated by type_spec
26
+ @serial_class(
27
+ named_type_path="sdk.api.recipes.remove_recipe_from_project.Arguments",
28
+ )
29
+ @dataclasses.dataclass(kw_only=True)
30
+ class Arguments:
31
+ recipe_key: identifier_t.IdentifierKey
32
+ project_key: identifier_t.IdentifierKey
33
+
34
+
35
+ # DO NOT MODIFY -- This file is generated by type_spec
36
+ @serial_class(
37
+ named_type_path="sdk.api.recipes.remove_recipe_from_project.Data",
38
+ )
39
+ @dataclasses.dataclass(kw_only=True)
40
+ class Data:
41
+ pass
42
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,14 +1,15 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
2
  # flake8: noqa: F821
3
- # ruff: noqa: E402
3
+ # ruff: noqa: E402 Q003
4
4
  # fmt: off
5
5
  # isort: skip_file
6
6
  from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
+ from ... import base_t
12
13
 
13
14
  __all__: list[str] = [
14
15
  "Arguments",
@@ -24,26 +25,35 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_inputs"
24
25
 
25
26
  # DO NOT MODIFY -- This file is generated by type_spec
26
27
  @serial_class(
28
+ named_type_path="sdk.api.recipes.set_recipe_inputs.RecipeInputValue",
27
29
  to_string_values={"value_numeric"},
28
30
  )
29
- @dataclass(kw_only=True)
31
+ @dataclasses.dataclass(kw_only=True)
30
32
  class RecipeInputValue:
31
- recipe_id: int
32
- input_id: int
33
- recipe_step_id: typing.Optional[typing.Optional[int]] = None
34
- value_numeric: typing.Optional[Decimal] = None
35
- value_str: typing.Optional[str] = None
36
- set_actual_value: typing.Optional[bool] = None
33
+ recipe_id: base_t.ObjectId
34
+ input_id: base_t.ObjectId
35
+ recipe_step_id: typing.Optional[base_t.ObjectId] | None = None
36
+ value_numeric: Decimal | None = None
37
+ value_str: str | None = None
38
+ set_actual_value: bool | None = None
39
+ lot_recipe_id: base_t.ObjectId | None = None
40
+ remove: bool | None = None
37
41
 
38
42
 
39
43
  # DO NOT MODIFY -- This file is generated by type_spec
40
- @dataclass(kw_only=True)
44
+ @serial_class(
45
+ named_type_path="sdk.api.recipes.set_recipe_inputs.Arguments",
46
+ )
47
+ @dataclasses.dataclass(kw_only=True)
41
48
  class Arguments:
42
49
  input_data: list[RecipeInputValue]
43
50
 
44
51
 
45
52
  # DO NOT MODIFY -- This file is generated by type_spec
46
- @dataclass(kw_only=True)
53
+ @serial_class(
54
+ named_type_path="sdk.api.recipes.set_recipe_inputs.Data",
55
+ )
56
+ @dataclasses.dataclass(kw_only=True)
47
57
  class Data:
48
58
  pass
49
59
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,43 @@
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 identifier_t
13
+ from ... import recipe_metadata_t
14
+
15
+ __all__: list[str] = [
16
+ "Arguments",
17
+ "Data",
18
+ "ENDPOINT_METHOD",
19
+ "ENDPOINT_PATH",
20
+ ]
21
+
22
+ ENDPOINT_METHOD = "POST"
23
+ ENDPOINT_PATH = "api/external/recipes/set_recipe_metadata"
24
+
25
+
26
+ # DO NOT MODIFY -- This file is generated by type_spec
27
+ @serial_class(
28
+ named_type_path="sdk.api.recipes.set_recipe_metadata.Arguments",
29
+ )
30
+ @dataclasses.dataclass(kw_only=True)
31
+ class Arguments:
32
+ recipe_key: identifier_t.IdentifierKey
33
+ recipe_metadata: list[recipe_metadata_t.MetadataValue]
34
+
35
+
36
+ # DO NOT MODIFY -- This file is generated by type_spec
37
+ @serial_class(
38
+ named_type_path="sdk.api.recipes.set_recipe_metadata.Data",
39
+ )
40
+ @dataclasses.dataclass(kw_only=True)
41
+ class Data:
42
+ pass
43
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,115 @@
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 identifier_t
16
+
17
+ __all__: list[str] = [
18
+ "AnnotationEdit",
19
+ "AnnotationUpdateType",
20
+ "Arguments",
21
+ "Data",
22
+ "ENDPOINT_METHOD",
23
+ "ENDPOINT_PATH",
24
+ "RecipeOutputEditBase",
25
+ "RecipeOutputMergeAnnotations",
26
+ "RecipeOutputReplaceAnnotations",
27
+ "RecipeOutputUpdateAnnotations",
28
+ ]
29
+
30
+ ENDPOINT_METHOD = "POST"
31
+ ENDPOINT_PATH = "api/external/recipes/set_recipe_output_annotations"
32
+
33
+
34
+ # DO NOT MODIFY -- This file is generated by type_spec
35
+ @serial_class(
36
+ named_type_path="sdk.api.recipes.set_recipe_output_annotations.AnnotationEdit",
37
+ to_string_values={"lower_value", "upper_value"},
38
+ )
39
+ @dataclasses.dataclass(kw_only=True)
40
+ class AnnotationEdit:
41
+ annotation_type_key: identifier_t.IdentifierKey
42
+ lower_value: Decimal | None = None
43
+ upper_value: Decimal | None = None
44
+
45
+
46
+ # DO NOT MODIFY -- This file is generated by type_spec
47
+ class AnnotationUpdateType(StrEnum):
48
+ MERGE = "merge"
49
+ REPLACE = "replace"
50
+
51
+
52
+ # DO NOT MODIFY -- This file is generated by type_spec
53
+ @serial_class(
54
+ named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputEditBase",
55
+ )
56
+ @dataclasses.dataclass(kw_only=True)
57
+ class RecipeOutputEditBase:
58
+ recipe_id: base_t.ObjectId
59
+ output_id: base_t.ObjectId
60
+ experiment_num: int
61
+ annotations: list[AnnotationEdit]
62
+ condition_id: base_t.ObjectId | None = None
63
+
64
+
65
+ # DO NOT MODIFY -- This file is generated by type_spec
66
+ @serial_class(
67
+ named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputMergeAnnotations",
68
+ parse_require={"type"},
69
+ )
70
+ @dataclasses.dataclass(kw_only=True)
71
+ class RecipeOutputMergeAnnotations(RecipeOutputEditBase):
72
+ type: typing.Literal[AnnotationUpdateType.MERGE] = AnnotationUpdateType.MERGE
73
+
74
+
75
+ # DO NOT MODIFY -- This file is generated by type_spec
76
+ @serial_class(
77
+ named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputReplaceAnnotations",
78
+ parse_require={"type"},
79
+ )
80
+ @dataclasses.dataclass(kw_only=True)
81
+ class RecipeOutputReplaceAnnotations(RecipeOutputEditBase):
82
+ type: typing.Literal[AnnotationUpdateType.REPLACE] = AnnotationUpdateType.REPLACE
83
+
84
+
85
+ # DO NOT MODIFY -- This file is generated by type_spec
86
+ RecipeOutputUpdateAnnotations = typing.Annotated[
87
+ typing.Union[RecipeOutputMergeAnnotations, RecipeOutputReplaceAnnotations],
88
+ serial_union_annotation(
89
+ named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputUpdateAnnotations",
90
+ discriminator="type",
91
+ discriminator_map={
92
+ "merge": RecipeOutputMergeAnnotations,
93
+ "replace": RecipeOutputReplaceAnnotations,
94
+ },
95
+ ),
96
+ ]
97
+
98
+
99
+ # DO NOT MODIFY -- This file is generated by type_spec
100
+ @serial_class(
101
+ named_type_path="sdk.api.recipes.set_recipe_output_annotations.Arguments",
102
+ )
103
+ @dataclasses.dataclass(kw_only=True)
104
+ class Arguments:
105
+ updates: list[RecipeOutputUpdateAnnotations]
106
+
107
+
108
+ # DO NOT MODIFY -- This file is generated by type_spec
109
+ @serial_class(
110
+ named_type_path="sdk.api.recipes.set_recipe_output_annotations.Data",
111
+ )
112
+ @dataclasses.dataclass(kw_only=True)
113
+ class Data:
114
+ pass
115
+ # DO NOT MODIFY -- This file is generated by type_spec