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,204 @@
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 entity_t
16
+ from . import identifier_t
17
+
18
+ __all__: list[str] = [
19
+ "ArgumentValueId",
20
+ "ArgumentValueRefName",
21
+ "FieldArgumentValue",
22
+ "FieldRefIdNameValue",
23
+ "FieldRefNameValue",
24
+ "FieldValue",
25
+ "FieldValueBase",
26
+ "FieldValueBatchReference",
27
+ "FieldValueBoolean",
28
+ "FieldValueFiles",
29
+ "FieldValueId",
30
+ "FieldValueIds",
31
+ "FieldValueNumeric",
32
+ "FieldValueText",
33
+ "FieldValueType",
34
+ ]
35
+
36
+
37
+ # DO NOT MODIFY -- This file is generated by type_spec
38
+ @serial_class(
39
+ named_type_path="sdk.field_values.FieldRefNameValue",
40
+ unconverted_values={"value"},
41
+ )
42
+ @dataclasses.dataclass(kw_only=True)
43
+ class FieldRefNameValue:
44
+ field_ref_name: str
45
+ value: base_t.JsonValue
46
+ row_index: typing.Optional[int] | None = None
47
+
48
+
49
+ # DO NOT MODIFY -- This file is generated by type_spec
50
+ @serial_class(
51
+ named_type_path="sdk.field_values.FieldRefIdNameValue",
52
+ unconverted_values={"value"},
53
+ )
54
+ @dataclasses.dataclass(kw_only=True)
55
+ class FieldRefIdNameValue:
56
+ field_id: base_t.ObjectId
57
+ field_ref_name: str
58
+ value: base_t.JsonValue
59
+ row_index: typing.Optional[int] | None = None
60
+
61
+
62
+ # DO NOT MODIFY -- This file is generated by type_spec
63
+ @serial_class(
64
+ named_type_path="sdk.field_values.ArgumentValueRefName",
65
+ unconverted_values={"value"},
66
+ )
67
+ @dataclasses.dataclass(kw_only=True)
68
+ class ArgumentValueRefName:
69
+ field_ref_name: str
70
+ value: base_t.JsonValue
71
+ row_index: typing.Optional[int] | None = None
72
+
73
+
74
+ # DO NOT MODIFY -- This file is generated by type_spec
75
+ @serial_class(
76
+ named_type_path="sdk.field_values.ArgumentValueId",
77
+ unconverted_values={"value"},
78
+ )
79
+ @dataclasses.dataclass(kw_only=True)
80
+ class ArgumentValueId:
81
+ field_id: base_t.ObjectId
82
+ value: base_t.JsonValue
83
+ row_index: typing.Optional[int] | None = None
84
+
85
+
86
+ # DO NOT MODIFY -- This file is generated by type_spec
87
+ class FieldValueType(StrEnum):
88
+ FILES = "files"
89
+ TEXT = "text"
90
+ ID = "id"
91
+ IDS = "ids"
92
+ BOOLEAN = "boolean"
93
+ NUMERIC = "numeric"
94
+ BATCH_REFERENCE = "batch_reference"
95
+
96
+
97
+ # DO NOT MODIFY -- This file is generated by type_spec
98
+ @serial_class(
99
+ named_type_path="sdk.field_values.FieldValueBase",
100
+ )
101
+ @dataclasses.dataclass(kw_only=True)
102
+ class FieldValueBase:
103
+ type: FieldValueType
104
+
105
+
106
+ # DO NOT MODIFY -- This file is generated by type_spec
107
+ @serial_class(
108
+ named_type_path="sdk.field_values.FieldValueFiles",
109
+ parse_require={"type"},
110
+ )
111
+ @dataclasses.dataclass(kw_only=True)
112
+ class FieldValueFiles(FieldValueBase):
113
+ type: typing.Literal[FieldValueType.FILES] = FieldValueType.FILES
114
+ file_ids: list[base_t.ObjectId]
115
+
116
+
117
+ # DO NOT MODIFY -- This file is generated by type_spec
118
+ @serial_class(
119
+ named_type_path="sdk.field_values.FieldValueId",
120
+ parse_require={"type"},
121
+ )
122
+ @dataclasses.dataclass(kw_only=True)
123
+ class FieldValueId(FieldValueBase):
124
+ type: typing.Literal[FieldValueType.ID] = FieldValueType.ID
125
+ entity_type: entity_t.EntityType
126
+ identifier_key: identifier_t.IdentifierKey
127
+
128
+
129
+ # DO NOT MODIFY -- This file is generated by type_spec
130
+ @serial_class(
131
+ named_type_path="sdk.field_values.FieldValueIds",
132
+ parse_require={"type"},
133
+ )
134
+ @dataclasses.dataclass(kw_only=True)
135
+ class FieldValueIds(FieldValueBase):
136
+ type: typing.Literal[FieldValueType.IDS] = FieldValueType.IDS
137
+ entity_type: entity_t.EntityType
138
+ identifier_keys: list[identifier_t.IdentifierKey]
139
+
140
+
141
+ # DO NOT MODIFY -- This file is generated by type_spec
142
+ @serial_class(
143
+ named_type_path="sdk.field_values.FieldValueText",
144
+ parse_require={"type"},
145
+ )
146
+ @dataclasses.dataclass(kw_only=True)
147
+ class FieldValueText(FieldValueBase):
148
+ type: typing.Literal[FieldValueType.TEXT] = FieldValueType.TEXT
149
+ value: str
150
+
151
+
152
+ # DO NOT MODIFY -- This file is generated by type_spec
153
+ @serial_class(
154
+ named_type_path="sdk.field_values.FieldValueBoolean",
155
+ parse_require={"type"},
156
+ )
157
+ @dataclasses.dataclass(kw_only=True)
158
+ class FieldValueBoolean(FieldValueBase):
159
+ type: typing.Literal[FieldValueType.BOOLEAN] = FieldValueType.BOOLEAN
160
+ value: bool
161
+
162
+
163
+ # DO NOT MODIFY -- This file is generated by type_spec
164
+ @serial_class(
165
+ named_type_path="sdk.field_values.FieldValueNumeric",
166
+ to_string_values={"value"},
167
+ parse_require={"type"},
168
+ )
169
+ @dataclasses.dataclass(kw_only=True)
170
+ class FieldValueNumeric(FieldValueBase):
171
+ type: typing.Literal[FieldValueType.NUMERIC] = FieldValueType.NUMERIC
172
+ value: Decimal
173
+
174
+
175
+ # DO NOT MODIFY -- This file is generated by type_spec
176
+ @serial_class(
177
+ named_type_path="sdk.field_values.FieldValueBatchReference",
178
+ parse_require={"type"},
179
+ )
180
+ @dataclasses.dataclass(kw_only=True)
181
+ class FieldValueBatchReference(FieldValueBase):
182
+ type: typing.Literal[FieldValueType.BATCH_REFERENCE] = FieldValueType.BATCH_REFERENCE
183
+ reference_key: identifier_t.IdentifierKeyBatchReference
184
+ data_key: str
185
+
186
+
187
+ # DO NOT MODIFY -- This file is generated by type_spec
188
+ FieldValue = typing.Annotated[
189
+ typing.Union[FieldValueFiles, FieldValueId, FieldValueIds, FieldValueText, FieldValueBoolean, FieldValueNumeric, FieldValueBatchReference],
190
+ serial_union_annotation(
191
+ named_type_path="sdk.field_values.FieldValue",
192
+ ),
193
+ ]
194
+
195
+
196
+ # DO NOT MODIFY -- This file is generated by type_spec
197
+ @serial_class(
198
+ named_type_path="sdk.field_values.FieldArgumentValue",
199
+ )
200
+ @dataclasses.dataclass(kw_only=True)
201
+ class FieldArgumentValue:
202
+ field_key: identifier_t.IdentifierKey
203
+ value: FieldValue
204
+ # 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
- "Field",
15
- ]
16
-
17
-
18
5
  # DO NOT MODIFY -- This file is generated by type_spec
19
- @dataclass(kw_only=True)
20
- class Field:
21
- id: base_t.ObjectId
22
- name: str
23
- value_type: str
6
+ # Kept only for SDK backwards compatibility
7
+ from .fields_t import Field as Field
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
+ "Field",
16
+ ]
17
+
18
+
19
+ # DO NOT MODIFY -- This file is generated by type_spec
20
+ @serial_class(
21
+ named_type_path="sdk.fields.Field",
22
+ )
23
+ @dataclasses.dataclass(kw_only=True)
24
+ class Field:
25
+ id: base_t.ObjectId
26
+ name: str
27
+ value_type: str
28
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,15 @@
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 .generic_upload_t import GenericRemoteDirectoryScope as GenericRemoteDirectoryScope
8
+ from .generic_upload_t import UploadDestinationType as UploadDestinationType
9
+ from .generic_upload_t import UploadDestinationBase as UploadDestinationBase
10
+ from .generic_upload_t import UploadDestinationProject as UploadDestinationProject
11
+ from .generic_upload_t import UploadDestinationMaterialFamily as UploadDestinationMaterialFamily
12
+ from .generic_upload_t import UploadDestinationRecipe as UploadDestinationRecipe
13
+ from .generic_upload_t import UploadDestination as UploadDestination
14
+ from .generic_upload_t import GenericUploadStrategy as GenericUploadStrategy
15
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,119 @@
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 identifier_t
15
+
16
+ __all__: list[str] = [
17
+ "GenericRemoteDirectoryScope",
18
+ "GenericUploadStrategy",
19
+ "UploadDestination",
20
+ "UploadDestinationBase",
21
+ "UploadDestinationMaterialFamily",
22
+ "UploadDestinationProject",
23
+ "UploadDestinationRecipe",
24
+ "UploadDestinationType",
25
+ ]
26
+
27
+
28
+ # DO NOT MODIFY -- This file is generated by type_spec
29
+ @serial_class(
30
+ named_type_path="sdk.generic_upload.GenericRemoteDirectoryScope",
31
+ )
32
+ @dataclasses.dataclass(kw_only=True)
33
+ class GenericRemoteDirectoryScope:
34
+ src_path: str
35
+ success_archive_path: str
36
+ failure_archive_path: str
37
+ recursive: bool
38
+ prepend_date_on_archive: bool
39
+ valid_file_extensions: list[str] | None = None
40
+ filename_regex: str | None = None
41
+ max_files: int | None = None
42
+ detection_keyword: str | None = None
43
+ delimiter: str | None = None
44
+
45
+
46
+ # DO NOT MODIFY -- This file is generated by type_spec
47
+ class UploadDestinationType(StrEnum):
48
+ PROJECT = "project"
49
+ MATERIAL_FAMILY = "material_family"
50
+ RECIPE = "recipe"
51
+
52
+
53
+ # DO NOT MODIFY -- This file is generated by type_spec
54
+ @serial_class(
55
+ named_type_path="sdk.generic_upload.UploadDestinationBase",
56
+ )
57
+ @dataclasses.dataclass(kw_only=True)
58
+ class UploadDestinationBase:
59
+ type: UploadDestinationType
60
+
61
+
62
+ # DO NOT MODIFY -- This file is generated by type_spec
63
+ @serial_class(
64
+ named_type_path="sdk.generic_upload.UploadDestinationProject",
65
+ parse_require={"type"},
66
+ )
67
+ @dataclasses.dataclass(kw_only=True)
68
+ class UploadDestinationProject(UploadDestinationBase):
69
+ type: typing.Literal[UploadDestinationType.PROJECT] = UploadDestinationType.PROJECT
70
+ project_key: identifier_t.IdentifierKey
71
+
72
+
73
+ # DO NOT MODIFY -- This file is generated by type_spec
74
+ @serial_class(
75
+ named_type_path="sdk.generic_upload.UploadDestinationMaterialFamily",
76
+ parse_require={"type"},
77
+ )
78
+ @dataclasses.dataclass(kw_only=True)
79
+ class UploadDestinationMaterialFamily(UploadDestinationBase):
80
+ type: typing.Literal[UploadDestinationType.MATERIAL_FAMILY] = UploadDestinationType.MATERIAL_FAMILY
81
+ material_family_key: identifier_t.IdentifierKey
82
+
83
+
84
+ # DO NOT MODIFY -- This file is generated by type_spec
85
+ @serial_class(
86
+ named_type_path="sdk.generic_upload.UploadDestinationRecipe",
87
+ parse_require={"type"},
88
+ )
89
+ @dataclasses.dataclass(kw_only=True)
90
+ class UploadDestinationRecipe(UploadDestinationBase):
91
+ type: typing.Literal[UploadDestinationType.RECIPE] = UploadDestinationType.RECIPE
92
+ recipe_key: identifier_t.IdentifierKey
93
+
94
+
95
+ # DO NOT MODIFY -- This file is generated by type_spec
96
+ UploadDestination = typing.Annotated[
97
+ typing.Union[UploadDestinationProject, UploadDestinationMaterialFamily, UploadDestinationRecipe],
98
+ serial_union_annotation(
99
+ named_type_path="sdk.generic_upload.UploadDestination",
100
+ discriminator="type",
101
+ discriminator_map={
102
+ "project": UploadDestinationProject,
103
+ "material_family": UploadDestinationMaterialFamily,
104
+ "recipe": UploadDestinationRecipe,
105
+ },
106
+ ),
107
+ ]
108
+
109
+
110
+ # DO NOT MODIFY -- This file is generated by type_spec
111
+ @serial_class(
112
+ named_type_path="sdk.generic_upload.GenericUploadStrategy",
113
+ )
114
+ @dataclasses.dataclass(kw_only=True)
115
+ class GenericUploadStrategy:
116
+ uploader_key: identifier_t.IdentifierKey
117
+ destinations: list[UploadDestination]
118
+ skip_moving_files: bool = False
119
+ # 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 .id_source_t import IdSourceSpecBase as IdSourceSpecBase
8
+ from .id_source_t import IdSourceSpecEntity as IdSourceSpecEntity
9
+ from .id_source_t import IdSourceSpecCustomEntity as IdSourceSpecCustomEntity
10
+ from .id_source_t import IdSourceSpecFieldOptions as IdSourceSpecFieldOptions
11
+ from .id_source_t import IdSourceSpec as IdSourceSpec
12
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,68 @@
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 entity_t
14
+
15
+ __all__: list[str] = [
16
+ "IdSourceSpec",
17
+ "IdSourceSpecBase",
18
+ "IdSourceSpecCustomEntity",
19
+ "IdSourceSpecEntity",
20
+ "IdSourceSpecFieldOptions",
21
+ ]
22
+
23
+
24
+ # DO NOT MODIFY -- This file is generated by type_spec
25
+ @serial_class(
26
+ named_type_path="sdk.id_source.IdSourceSpecBase",
27
+ )
28
+ @dataclasses.dataclass(kw_only=True)
29
+ class IdSourceSpecBase:
30
+ pass
31
+
32
+
33
+ # DO NOT MODIFY -- This file is generated by type_spec
34
+ @serial_class(
35
+ named_type_path="sdk.id_source.IdSourceSpecEntity",
36
+ )
37
+ @dataclasses.dataclass(kw_only=True)
38
+ class IdSourceSpecEntity(IdSourceSpecBase):
39
+ entity_type: entity_t.EntityType
40
+
41
+
42
+ # DO NOT MODIFY -- This file is generated by type_spec
43
+ @serial_class(
44
+ named_type_path="sdk.id_source.IdSourceSpecCustomEntity",
45
+ )
46
+ @dataclasses.dataclass(kw_only=True)
47
+ class IdSourceSpecCustomEntity(IdSourceSpecBase):
48
+ definition_ref_name: str
49
+
50
+
51
+ # DO NOT MODIFY -- This file is generated by type_spec
52
+ @serial_class(
53
+ named_type_path="sdk.id_source.IdSourceSpecFieldOptions",
54
+ )
55
+ @dataclasses.dataclass(kw_only=True)
56
+ class IdSourceSpecFieldOptions(IdSourceSpecBase):
57
+ set_ref_name: str
58
+ subset_ref_name: str | None = None
59
+
60
+
61
+ # DO NOT MODIFY -- This file is generated by type_spec
62
+ IdSourceSpec = typing.Annotated[
63
+ typing.Union[IdSourceSpecEntity, IdSourceSpecCustomEntity, IdSourceSpecFieldOptions],
64
+ serial_alias_annotation(
65
+ named_type_path="sdk.id_source.IdSourceSpec",
66
+ ),
67
+ ]
68
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,11 @@
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 .identifier_t import IdentifierKeyId as IdentifierKeyId
8
+ from .identifier_t import IdentifierKeyRefName as IdentifierKeyRefName
9
+ from .identifier_t import IdentifierKeyBatchReference as IdentifierKeyBatchReference
10
+ from .identifier_t import IdentifierKey as IdentifierKey
11
+ # 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
+ 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
+ "IdentifierKey",
17
+ "IdentifierKeyBatchReference",
18
+ "IdentifierKeyId",
19
+ "IdentifierKeyRefName",
20
+ ]
21
+
22
+
23
+ # DO NOT MODIFY -- This file is generated by type_spec
24
+ @serial_class(
25
+ named_type_path="sdk.identifier.IdentifierKeyId",
26
+ parse_require={"type"},
27
+ )
28
+ @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
29
+ class IdentifierKeyId:
30
+ type: typing.Literal["id"] = "id"
31
+ id: base_t.ObjectId
32
+
33
+
34
+ # DO NOT MODIFY -- This file is generated by type_spec
35
+ @serial_class(
36
+ named_type_path="sdk.identifier.IdentifierKeyRefName",
37
+ parse_require={"type"},
38
+ )
39
+ @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
40
+ class IdentifierKeyRefName:
41
+ type: typing.Literal["ref_name"] = "ref_name"
42
+ ref_name: str
43
+
44
+
45
+ # DO NOT MODIFY -- This file is generated by type_spec
46
+ @serial_class(
47
+ named_type_path="sdk.identifier.IdentifierKeyBatchReference",
48
+ parse_require={"type"},
49
+ )
50
+ @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
51
+ class IdentifierKeyBatchReference:
52
+ type: typing.Literal["batch_reference"] = "batch_reference"
53
+ reference: str
54
+
55
+
56
+ # DO NOT MODIFY -- This file is generated by type_spec
57
+ IdentifierKey = typing.Annotated[
58
+ typing.Union[IdentifierKeyId, IdentifierKeyBatchReference, IdentifierKeyRefName],
59
+ serial_alias_annotation(
60
+ named_type_path="sdk.identifier.IdentifierKey",
61
+ ),
62
+ ]
63
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,29 +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 pkgs.serialization import serial_class
12
- from . import base as base_t
13
-
14
- __all__: list[str] = [
15
- "InputAttributeValue",
16
- ]
17
-
18
-
19
5
  # DO NOT MODIFY -- This file is generated by type_spec
20
- @serial_class(
21
- unconverted_values={"quantity_json"},
22
- to_string_values={"quantity_dec"},
23
- )
24
- @dataclass(kw_only=True)
25
- class InputAttributeValue:
26
- attribute_id: base_t.ObjectId
27
- quantity_dec: typing.Optional[Decimal] = None
28
- quantity_json: typing.Optional[base_t.JsonValue] = None
6
+ # Kept only for SDK backwards compatibility
7
+ from .input_attributes_t import InputAttributeValue as InputAttributeValue
29
8
  # 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
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from . import base_t
13
+
14
+ __all__: list[str] = [
15
+ "InputAttributeValue",
16
+ ]
17
+
18
+
19
+ # DO NOT MODIFY -- This file is generated by type_spec
20
+ @serial_class(
21
+ named_type_path="sdk.input_attributes.InputAttributeValue",
22
+ unconverted_values={"quantity_json"},
23
+ to_string_values={"quantity_dec"},
24
+ )
25
+ @dataclasses.dataclass(kw_only=True)
26
+ class InputAttributeValue:
27
+ attribute_id: base_t.ObjectId
28
+ quantity_dec: Decimal | None = None
29
+ quantity_json: base_t.JsonValue | None = None
30
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,61 +1,11 @@
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
- "IngredientQuantityType",
17
- "IngredientType",
18
- "SimpleInput",
19
- ]
20
-
21
-
22
- # DO NOT MODIFY -- This file is generated by type_spec
23
- @serial_string_enum(
24
- labels={
25
- "numeric": "Numeric",
26
- "recipe": "Experiment Component",
27
- "date": "Date",
28
- "categorical": "Categorical",
29
- "timestamp": "Timestamp",
30
- "text": "Text",
31
- "curve": "Curve",
32
- "files": "Attachments",
33
- },
34
- )
35
- class IngredientQuantityType(StrEnum):
36
- NUMERIC = "numeric"
37
- RECIPE = "recipe"
38
- DATE = "date"
39
- CATEGORICAL = "categorical"
40
- TIMESTAMP = "timestamp"
41
- TEXT = "text"
42
- CURVE = "curve"
43
- FILES = "files"
44
-
45
-
46
- # DO NOT MODIFY -- This file is generated by type_spec
47
- class IngredientType(StrEnum):
48
- INGREDIENT = "ingredient"
49
- PROCESS_PARAMETER = "process_parameter"
50
- EQUIPMENT = "equipment"
51
-
52
-
53
5
  # DO NOT MODIFY -- This file is generated by type_spec
54
- @dataclass(kw_only=True)
55
- class SimpleInput:
56
- input_id: base_t.ObjectId
57
- quantity_type: IngredientQuantityType
58
- name: str
59
- is_parameter: bool
60
- intermediate_recipe_id: typing.Optional[base_t.ObjectId]
6
+ # Kept only for SDK backwards compatibility
7
+ from .inputs_t import IngredientQuantityType as IngredientQuantityType
8
+ from .inputs_t import IngredientType as IngredientType
9
+ from .inputs_t import IngredientBehavior as IngredientBehavior
10
+ from .inputs_t import SimpleInput as SimpleInput
61
11
  # DO NOT MODIFY -- This file is generated by type_spec