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,83 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ import dataclasses
12
+ from pkgs.serialization import serial_class
13
+ from pkgs.serialization import serial_string_enum
14
+ from . import base_t
15
+
16
+ __all__: list[str] = [
17
+ "IngredientBehavior",
18
+ "IngredientQuantityType",
19
+ "IngredientType",
20
+ "SimpleInput",
21
+ ]
22
+
23
+
24
+ # DO NOT MODIFY -- This file is generated by type_spec
25
+ @serial_string_enum(
26
+ labels={
27
+ "numeric": "Numeric",
28
+ "recipe": "Experiment Component",
29
+ "date": "Date",
30
+ "categorical": "Categorical",
31
+ "timestamp": "Timestamp",
32
+ "text": "Text",
33
+ "curve": "Curve",
34
+ "files": "Attachments",
35
+ },
36
+ )
37
+ class IngredientQuantityType(StrEnum):
38
+ NUMERIC = "numeric"
39
+ RECIPE = "recipe"
40
+ DATE = "date"
41
+ CATEGORICAL = "categorical"
42
+ TIMESTAMP = "timestamp"
43
+ TEXT = "text"
44
+ CURVE = "curve"
45
+ FILES = "files"
46
+
47
+
48
+ # DO NOT MODIFY -- This file is generated by type_spec
49
+ class IngredientType(StrEnum):
50
+ INGREDIENT = "ingredient"
51
+ PROCESS_PARAMETER = "process_parameter"
52
+ EQUIPMENT = "equipment"
53
+
54
+
55
+ # DO NOT MODIFY -- This file is generated by type_spec
56
+ @serial_string_enum(
57
+ labels={
58
+ "included": "Included",
59
+ "use_quantity": "Use Quantity",
60
+ "not_included": "Not Included",
61
+ "autofill": "Autofill",
62
+ },
63
+ )
64
+ class IngredientBehavior(StrEnum):
65
+ INCLUDED = "included"
66
+ USE_QUANTITY = "use_quantity"
67
+ NOT_INCLUDED = "not_included"
68
+ AUTOFILL = "autofill"
69
+
70
+
71
+ # DO NOT MODIFY -- This file is generated by type_spec
72
+ @serial_class(
73
+ named_type_path="sdk.inputs.SimpleInput",
74
+ )
75
+ @dataclasses.dataclass(kw_only=True)
76
+ class SimpleInput:
77
+ input_id: base_t.ObjectId
78
+ quantity_type: IngredientQuantityType
79
+ name: str
80
+ is_parameter: bool
81
+ intermediate_recipe_id: typing.Optional[base_t.ObjectId]
82
+ input_type: str
83
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,9 @@
1
+ # flake8: noqa: F821
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ # DO NOT MODIFY -- This file is generated by type_spec
6
+ # Kept only for SDK backwards compatibility
7
+ from .integration_server_t import IntegrationEnvironment as IntegrationEnvironment
8
+ from .integration_server_t import EnvironmentConfig as EnvironmentConfig
9
+ # 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
+ from pkgs.strenum_compat import StrEnum
11
+ import dataclasses
12
+ from pkgs.serialization import serial_class
13
+ from . import auth_retrieval_t
14
+ from . import client_config_t
15
+
16
+ __all__: list[str] = [
17
+ "EnvironmentConfig",
18
+ "INTEGRATION_SERVER_RUN_UUID_FIELD_REF_NAME",
19
+ "IntegrationEnvironment",
20
+ ]
21
+
22
+
23
+ # DO NOT MODIFY -- This file is generated by type_spec
24
+ class IntegrationEnvironment(StrEnum):
25
+ LOCAL = "local"
26
+ PROD = "prod"
27
+
28
+
29
+ # DO NOT MODIFY -- This file is generated by type_spec
30
+ @serial_class(
31
+ named_type_path="sdk.integration_server.EnvironmentConfig",
32
+ )
33
+ @dataclasses.dataclass(kw_only=True)
34
+ class EnvironmentConfig:
35
+ auth_retrieval: auth_retrieval_t.AuthRetrieval
36
+ base_url: str
37
+ client_options: client_config_t.ClientConfigOptions | None = None
38
+
39
+
40
+ # DO NOT MODIFY -- This file is generated by type_spec
41
+ INTEGRATION_SERVER_RUN_UUID_FIELD_REF_NAME = "unc_integration_server_run_uuid"
42
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,27 @@
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 .job_definition_t import JobDefinitionType as JobDefinitionType
8
+ from .job_definition_t import JobExecutorType as JobExecutorType
9
+ from .job_definition_t import GenericUploadDataSourceType as GenericUploadDataSourceType
10
+ from .job_definition_t import JobExecutorBase as JobExecutorBase
11
+ from .job_definition_t import JobExecutorScript as JobExecutorScript
12
+ from .job_definition_t import GenericUploadDataSourceBase as GenericUploadDataSourceBase
13
+ from .job_definition_t import GenericUploadDataSourceSFTP as GenericUploadDataSourceSFTP
14
+ from .job_definition_t import S3CloudProvider as S3CloudProvider
15
+ from .job_definition_t import GenericUploadDataSourceS3 as GenericUploadDataSourceS3
16
+ from .job_definition_t import GenericUploadDataSource as GenericUploadDataSource
17
+ from .job_definition_t import JobExecutorGenericUpload as JobExecutorGenericUpload
18
+ from .job_definition_t import JobExecutor as JobExecutor
19
+ from .job_definition_t import JobLoggingSettings as JobLoggingSettings
20
+ from .job_definition_t import JobDefinitionBase as JobDefinitionBase
21
+ from .job_definition_t import CronJobDefinition as CronJobDefinition
22
+ from .job_definition_t import WebhookJobDefinition as WebhookJobDefinition
23
+ from .job_definition_t import JobDefinition as JobDefinition
24
+ from .job_definition_t import ProfileDefinition as ProfileDefinition
25
+ from .job_definition_t import ProfileMetadata as ProfileMetadata
26
+ from .job_definition_t import JobResult as JobResult
27
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,260 @@
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 auth_retrieval_t
15
+ from . import client_config_t
16
+ from . import generic_upload_t
17
+ from . import identifier_t
18
+ from . import integration_server_t
19
+ from . import secret_retrieval_t
20
+
21
+ __all__: list[str] = [
22
+ "CronJobDefinition",
23
+ "GenericUploadDataSource",
24
+ "GenericUploadDataSourceBase",
25
+ "GenericUploadDataSourceS3",
26
+ "GenericUploadDataSourceSFTP",
27
+ "GenericUploadDataSourceType",
28
+ "JobDefinition",
29
+ "JobDefinitionBase",
30
+ "JobDefinitionType",
31
+ "JobExecutor",
32
+ "JobExecutorBase",
33
+ "JobExecutorGenericUpload",
34
+ "JobExecutorScript",
35
+ "JobExecutorType",
36
+ "JobLoggingSettings",
37
+ "JobResult",
38
+ "ProfileDefinition",
39
+ "ProfileMetadata",
40
+ "S3CloudProvider",
41
+ "WebhookJobDefinition",
42
+ ]
43
+
44
+
45
+ # DO NOT MODIFY -- This file is generated by type_spec
46
+ class JobDefinitionType(StrEnum):
47
+ CRON = "cron"
48
+ WEBHOOK = "webhook"
49
+
50
+
51
+ # DO NOT MODIFY -- This file is generated by type_spec
52
+ class JobExecutorType(StrEnum):
53
+ SCRIPT = "script"
54
+ GENERIC_UPLOAD = "generic_upload"
55
+
56
+
57
+ # DO NOT MODIFY -- This file is generated by type_spec
58
+ class GenericUploadDataSourceType(StrEnum):
59
+ SFTP = "sftp"
60
+ S3 = "s3"
61
+
62
+
63
+ # DO NOT MODIFY -- This file is generated by type_spec
64
+ @serial_class(
65
+ named_type_path="sdk.job_definition.JobExecutorBase",
66
+ )
67
+ @dataclasses.dataclass(kw_only=True)
68
+ class JobExecutorBase:
69
+ type: JobExecutorType
70
+
71
+
72
+ # DO NOT MODIFY -- This file is generated by type_spec
73
+ @serial_class(
74
+ named_type_path="sdk.job_definition.JobExecutorScript",
75
+ parse_require={"type"},
76
+ )
77
+ @dataclasses.dataclass(kw_only=True)
78
+ class JobExecutorScript(JobExecutorBase):
79
+ type: typing.Literal[JobExecutorType.SCRIPT] = JobExecutorType.SCRIPT
80
+ import_path: str
81
+
82
+
83
+ # DO NOT MODIFY -- This file is generated by type_spec
84
+ @serial_class(
85
+ named_type_path="sdk.job_definition.GenericUploadDataSourceBase",
86
+ )
87
+ @dataclasses.dataclass(kw_only=True)
88
+ class GenericUploadDataSourceBase:
89
+ type: GenericUploadDataSourceType
90
+
91
+
92
+ # DO NOT MODIFY -- This file is generated by type_spec
93
+ @serial_class(
94
+ named_type_path="sdk.job_definition.GenericUploadDataSourceSFTP",
95
+ parse_require={"type"},
96
+ )
97
+ @dataclasses.dataclass(kw_only=True)
98
+ class GenericUploadDataSourceSFTP(GenericUploadDataSourceBase):
99
+ type: typing.Literal[GenericUploadDataSourceType.SFTP] = GenericUploadDataSourceType.SFTP
100
+ host: str
101
+ username: str
102
+ pem_secret: secret_retrieval_t.SecretRetrieval
103
+
104
+
105
+ # DO NOT MODIFY -- This file is generated by type_spec
106
+ class S3CloudProvider(StrEnum):
107
+ OVH = "ovh"
108
+ AWS = "aws"
109
+
110
+
111
+ # DO NOT MODIFY -- This file is generated by type_spec
112
+ @serial_class(
113
+ named_type_path="sdk.job_definition.GenericUploadDataSourceS3",
114
+ parse_require={"type"},
115
+ )
116
+ @dataclasses.dataclass(kw_only=True)
117
+ class GenericUploadDataSourceS3(GenericUploadDataSourceBase):
118
+ type: typing.Literal[GenericUploadDataSourceType.S3] = GenericUploadDataSourceType.S3
119
+ bucket_name: str
120
+ cloud_provider: S3CloudProvider | None = None
121
+ endpoint_url: str | None = None
122
+ region_name: str | None = None
123
+ access_key_id: str | None = None
124
+ access_key_secret: secret_retrieval_t.SecretRetrieval | None = None
125
+
126
+
127
+ # DO NOT MODIFY -- This file is generated by type_spec
128
+ GenericUploadDataSource = typing.Annotated[
129
+ typing.Union[GenericUploadDataSourceSFTP, GenericUploadDataSourceS3],
130
+ serial_union_annotation(
131
+ named_type_path="sdk.job_definition.GenericUploadDataSource",
132
+ discriminator="type",
133
+ discriminator_map={
134
+ "sftp": GenericUploadDataSourceSFTP,
135
+ "s3": GenericUploadDataSourceS3,
136
+ },
137
+ ),
138
+ ]
139
+
140
+
141
+ # DO NOT MODIFY -- This file is generated by type_spec
142
+ @serial_class(
143
+ named_type_path="sdk.job_definition.JobExecutorGenericUpload",
144
+ parse_require={"type"},
145
+ )
146
+ @dataclasses.dataclass(kw_only=True)
147
+ class JobExecutorGenericUpload(JobExecutorBase):
148
+ type: typing.Literal[JobExecutorType.GENERIC_UPLOAD] = JobExecutorType.GENERIC_UPLOAD
149
+ data_source: GenericUploadDataSource
150
+ upload_strategy: generic_upload_t.GenericUploadStrategy
151
+ remote_directories: list[generic_upload_t.GenericRemoteDirectoryScope]
152
+
153
+
154
+ # DO NOT MODIFY -- This file is generated by type_spec
155
+ JobExecutor = typing.Annotated[
156
+ typing.Union[JobExecutorScript, JobExecutorGenericUpload],
157
+ serial_union_annotation(
158
+ named_type_path="sdk.job_definition.JobExecutor",
159
+ discriminator="type",
160
+ discriminator_map={
161
+ "script": JobExecutorScript,
162
+ "generic_upload": JobExecutorGenericUpload,
163
+ },
164
+ ),
165
+ ]
166
+
167
+
168
+ # DO NOT MODIFY -- This file is generated by type_spec
169
+ @serial_class(
170
+ named_type_path="sdk.job_definition.JobLoggingSettings",
171
+ )
172
+ @dataclasses.dataclass(kw_only=True)
173
+ class JobLoggingSettings:
174
+ enabled: bool = False
175
+ share_with_user_groups: list[identifier_t.IdentifierKey] | None = None
176
+
177
+
178
+ # DO NOT MODIFY -- This file is generated by type_spec
179
+ @serial_class(
180
+ named_type_path="sdk.job_definition.JobDefinitionBase",
181
+ )
182
+ @dataclasses.dataclass(kw_only=True)
183
+ class JobDefinitionBase:
184
+ id: str
185
+ name: str
186
+ executor: JobExecutor
187
+ enabled: bool = True
188
+ logging_settings: JobLoggingSettings | None = None
189
+
190
+
191
+ # DO NOT MODIFY -- This file is generated by type_spec
192
+ @serial_class(
193
+ named_type_path="sdk.job_definition.CronJobDefinition",
194
+ parse_require={"type"},
195
+ )
196
+ @dataclasses.dataclass(kw_only=True)
197
+ class CronJobDefinition(JobDefinitionBase):
198
+ type: typing.Literal[JobDefinitionType.CRON] = JobDefinitionType.CRON
199
+ cron_spec: str
200
+
201
+
202
+ # DO NOT MODIFY -- This file is generated by type_spec
203
+ @serial_class(
204
+ named_type_path="sdk.job_definition.WebhookJobDefinition",
205
+ parse_require={"type"},
206
+ )
207
+ @dataclasses.dataclass(kw_only=True)
208
+ class WebhookJobDefinition(JobDefinitionBase):
209
+ type: typing.Literal[JobDefinitionType.WEBHOOK] = JobDefinitionType.WEBHOOK
210
+ signature_key_secret: secret_retrieval_t.SecretRetrieval
211
+
212
+
213
+ # DO NOT MODIFY -- This file is generated by type_spec
214
+ JobDefinition = typing.Annotated[
215
+ typing.Union[CronJobDefinition, WebhookJobDefinition],
216
+ serial_union_annotation(
217
+ named_type_path="sdk.job_definition.JobDefinition",
218
+ discriminator="type",
219
+ discriminator_map={
220
+ "cron": CronJobDefinition,
221
+ "webhook": WebhookJobDefinition,
222
+ },
223
+ ),
224
+ ]
225
+
226
+
227
+ # DO NOT MODIFY -- This file is generated by type_spec
228
+ @serial_class(
229
+ named_type_path="sdk.job_definition.ProfileDefinition",
230
+ )
231
+ @dataclasses.dataclass(kw_only=True)
232
+ class ProfileDefinition:
233
+ jobs: list[JobDefinition]
234
+ auth_retrieval: auth_retrieval_t.AuthRetrieval | None = None
235
+ base_url: str | None = None
236
+ client_options: client_config_t.ClientConfigOptions | None = None
237
+ environments: dict[integration_server_t.IntegrationEnvironment, integration_server_t.EnvironmentConfig] | None = None
238
+
239
+
240
+ # DO NOT MODIFY -- This file is generated by type_spec
241
+ @serial_class(
242
+ named_type_path="sdk.job_definition.ProfileMetadata",
243
+ )
244
+ @dataclasses.dataclass(kw_only=True)
245
+ class ProfileMetadata:
246
+ name: str
247
+ base_url: str
248
+ auth_retrieval: auth_retrieval_t.AuthRetrieval
249
+ client_options: typing.Optional[client_config_t.ClientConfigOptions]
250
+ jobs: list[JobDefinition]
251
+
252
+
253
+ # DO NOT MODIFY -- This file is generated by type_spec
254
+ @serial_class(
255
+ named_type_path="sdk.job_definition.JobResult",
256
+ )
257
+ @dataclasses.dataclass(kw_only=True)
258
+ class JobResult:
259
+ success: bool
260
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,26 +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
- from . import units as units_t
13
-
14
- __all__: list[str] = [
15
- "SimpleOutput",
16
- ]
17
-
18
-
19
5
  # DO NOT MODIFY -- This file is generated by type_spec
20
- @dataclass(kw_only=True)
21
- class SimpleOutput:
22
- output_id: base_t.ObjectId
23
- name: str
24
- unit: typing.Optional[units_t.SimpleUnit]
25
- quantity_type: str
6
+ # Kept only for SDK backwards compatibility
7
+ from .outputs_t import SimpleOutput as SimpleOutput
26
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
+ from . import units_t
14
+
15
+ __all__: list[str] = [
16
+ "SimpleOutput",
17
+ ]
18
+
19
+
20
+ # DO NOT MODIFY -- This file is generated by type_spec
21
+ @serial_class(
22
+ named_type_path="sdk.outputs.SimpleOutput",
23
+ )
24
+ @dataclasses.dataclass(kw_only=True)
25
+ class SimpleOutput:
26
+ output_id: base_t.ObjectId
27
+ name: str
28
+ unit: typing.Optional[units_t.SimpleUnit]
29
+ quantity_type: str
30
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,10 @@
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 .overrides_t import SecretRetrievalOverride as SecretRetrievalOverride
8
+ from .overrides_t import SecretRetrievalOverrides as SecretRetrievalOverrides
9
+ from .overrides_t import Overrides as Overrides
10
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,49 @@
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 secret_retrieval_t
14
+
15
+ __all__: list[str] = [
16
+ "Overrides",
17
+ "SecretRetrievalOverride",
18
+ "SecretRetrievalOverrides",
19
+ ]
20
+
21
+
22
+ # DO NOT MODIFY -- This file is generated by type_spec
23
+ @serial_class(
24
+ named_type_path="sdk.overrides.SecretRetrievalOverride",
25
+ )
26
+ @dataclasses.dataclass(kw_only=True)
27
+ class SecretRetrievalOverride:
28
+ profile_name: str
29
+ secret_retrieval: secret_retrieval_t.SecretRetrieval
30
+ value: str
31
+
32
+
33
+ # DO NOT MODIFY -- This file is generated by type_spec
34
+ SecretRetrievalOverrides = typing.Annotated[
35
+ list[SecretRetrievalOverride],
36
+ serial_alias_annotation(
37
+ named_type_path="sdk.overrides.SecretRetrievalOverrides",
38
+ ),
39
+ ]
40
+
41
+
42
+ # DO NOT MODIFY -- This file is generated by type_spec
43
+ @serial_class(
44
+ named_type_path="sdk.overrides.Overrides",
45
+ )
46
+ @dataclasses.dataclass(kw_only=True)
47
+ class Overrides:
48
+ secrets: SecretRetrievalOverrides
49
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,8 @@
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 .permissions_t import CorePermissionType as CorePermissionType
8
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,46 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ from pkgs.serialization import serial_string_enum
12
+
13
+ __all__: list[str] = [
14
+ "CorePermissionType",
15
+ ]
16
+
17
+
18
+ # DO NOT MODIFY -- This file is generated by type_spec
19
+ @serial_string_enum(
20
+ labels={
21
+ "admin_rights": "Admin Rights",
22
+ "read_ingredients": "View Ingredients",
23
+ "read_recipe_all": "View Entire Recipe",
24
+ "read_recipe_outputs": "View Recipe Outputs",
25
+ "view_material_family": "View Material Family",
26
+ "write_ingredients": "Modify Ingredients",
27
+ "write_outputs": "Modify Outputs",
28
+ "write_recipe_all": "Modify Entire Recipe",
29
+ "write_recipe_ingredients": "Modify Recipe Inputs",
30
+ "write_recipe_outputs": "Modify Recipe Outputs",
31
+ "add_recipe": "Create Experiments",
32
+ },
33
+ )
34
+ class CorePermissionType(StrEnum):
35
+ ADMIN_RIGHTS = "admin_rights"
36
+ READ_INGREDIENTS = "read_ingredients"
37
+ READ_RECIPE_ALL = "read_recipe_all"
38
+ READ_RECIPE_OUTPUTS = "read_recipe_outputs"
39
+ VIEW_MATERIAL_FAMILY = "view_material_family"
40
+ WRITE_INGREDIENTS = "write_ingredients"
41
+ WRITE_OUTPUTS = "write_outputs"
42
+ WRITE_RECIPE_ALL = "write_recipe_all"
43
+ WRITE_RECIPE_INGREDIENTS = "write_recipe_ingredients"
44
+ WRITE_RECIPE_OUTPUTS = "write_recipe_outputs"
45
+ ADD_RECIPE = "add_recipe"
46
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,23 +1,8 @@
1
- # DO NOT MODIFY -- This file is generated by type_spec
2
1
  # flake8: noqa: F821
3
- # ruff: noqa: E402
2
+ # ruff: noqa: E402 Q003
4
3
  # fmt: off
5
4
  # isort: skip_file
6
- from __future__ import annotations
7
- import typing # noqa: F401
8
- import datetime # noqa: F401
9
- from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
11
- from . import base as base_t
12
-
13
- __all__: list[str] = [
14
- "Phase",
15
- ]
16
-
17
-
18
5
  # 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
6
+ # Kept only for SDK backwards compatibility
7
+ from .phases_t import Phase as Phase
23
8
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,27 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from . import base_t
13
+
14
+ __all__: list[str] = [
15
+ "Phase",
16
+ ]
17
+
18
+
19
+ # DO NOT MODIFY -- This file is generated by type_spec
20
+ @serial_class(
21
+ named_type_path="sdk.phases.Phase",
22
+ )
23
+ @dataclasses.dataclass(kw_only=True)
24
+ class Phase:
25
+ id: base_t.ObjectId
26
+ name: str
27
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,8 @@
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 .post_base_t import UpdateType as UpdateType
8
+ # DO NOT MODIFY -- This file is generated by type_spec