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
@@ -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
@@ -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 .outputs_t import SimpleOutput as SimpleOutput
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
@@ -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 .phases_t import Phase as Phase
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
@@ -0,0 +1,30 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ from pkgs.serialization import serial_string_enum
12
+
13
+ __all__: list[str] = [
14
+ "UpdateType",
15
+ ]
16
+
17
+
18
+ # DO NOT MODIFY -- This file is generated by type_spec
19
+ @serial_string_enum(
20
+ labels={
21
+ "append": "Append values",
22
+ "override": "Wipe existing and replace",
23
+ "remove": "Remove values",
24
+ },
25
+ )
26
+ class UpdateType(StrEnum):
27
+ APPEND = "append"
28
+ OVERRIDE = "override"
29
+ REMOVE = "remove"
30
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,16 @@
1
+ # flake8: noqa: F821
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ # DO NOT MODIFY -- This file is generated by type_spec
6
+ # Kept only for SDK backwards compatibility
7
+ from .queued_job_t import InvocationContextType as InvocationContextType
8
+ from .queued_job_t import InvocationContextBase as InvocationContextBase
9
+ from .queued_job_t import InvocationContextCron as InvocationContextCron
10
+ from .queued_job_t import InvocationContextManual as InvocationContextManual
11
+ from .queued_job_t import InvocationContextWebhook as InvocationContextWebhook
12
+ from .queued_job_t import InvocationContext as InvocationContext
13
+ from .queued_job_t import QueuedJobPayload as QueuedJobPayload
14
+ from .queued_job_t import QueuedJobResult as QueuedJobResult
15
+ from .queued_job_t import QueuedJob as QueuedJob
16
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,123 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ import dataclasses
12
+ from pkgs.serialization import serial_class
13
+ from pkgs.serialization import serial_union_annotation
14
+ from . import base_t
15
+ from . import job_definition_t
16
+
17
+ __all__: list[str] = [
18
+ "InvocationContext",
19
+ "InvocationContextBase",
20
+ "InvocationContextCron",
21
+ "InvocationContextManual",
22
+ "InvocationContextType",
23
+ "InvocationContextWebhook",
24
+ "QueuedJob",
25
+ "QueuedJobPayload",
26
+ "QueuedJobResult",
27
+ ]
28
+
29
+
30
+ # DO NOT MODIFY -- This file is generated by type_spec
31
+ class InvocationContextType(StrEnum):
32
+ CRON = "cron"
33
+ MANUAL = "manual"
34
+ WEBHOOK = "webhook"
35
+
36
+
37
+ # DO NOT MODIFY -- This file is generated by type_spec
38
+ @serial_class(
39
+ named_type_path="sdk.queued_job.InvocationContextBase",
40
+ )
41
+ @dataclasses.dataclass(kw_only=True)
42
+ class InvocationContextBase:
43
+ type: InvocationContextType
44
+
45
+
46
+ # DO NOT MODIFY -- This file is generated by type_spec
47
+ @serial_class(
48
+ named_type_path="sdk.queued_job.InvocationContextCron",
49
+ parse_require={"type"},
50
+ )
51
+ @dataclasses.dataclass(kw_only=True)
52
+ class InvocationContextCron(InvocationContextBase):
53
+ type: typing.Literal[InvocationContextType.CRON] = InvocationContextType.CRON
54
+
55
+
56
+ # DO NOT MODIFY -- This file is generated by type_spec
57
+ @serial_class(
58
+ named_type_path="sdk.queued_job.InvocationContextManual",
59
+ parse_require={"type"},
60
+ )
61
+ @dataclasses.dataclass(kw_only=True)
62
+ class InvocationContextManual(InvocationContextBase):
63
+ type: typing.Literal[InvocationContextType.MANUAL] = InvocationContextType.MANUAL
64
+
65
+
66
+ # DO NOT MODIFY -- This file is generated by type_spec
67
+ @serial_class(
68
+ named_type_path="sdk.queued_job.InvocationContextWebhook",
69
+ unconverted_values={"webhook_payload"},
70
+ parse_require={"type"},
71
+ )
72
+ @dataclasses.dataclass(kw_only=True)
73
+ class InvocationContextWebhook(InvocationContextBase):
74
+ type: typing.Literal[InvocationContextType.WEBHOOK] = InvocationContextType.WEBHOOK
75
+ webhook_payload: base_t.JsonValue
76
+
77
+
78
+ # DO NOT MODIFY -- This file is generated by type_spec
79
+ InvocationContext = typing.Annotated[
80
+ typing.Union[InvocationContextCron, InvocationContextManual, InvocationContextWebhook],
81
+ serial_union_annotation(
82
+ named_type_path="sdk.queued_job.InvocationContext",
83
+ discriminator="type",
84
+ discriminator_map={
85
+ "cron": InvocationContextCron,
86
+ "manual": InvocationContextManual,
87
+ "webhook": InvocationContextWebhook,
88
+ },
89
+ ),
90
+ ]
91
+
92
+
93
+ # DO NOT MODIFY -- This file is generated by type_spec
94
+ @serial_class(
95
+ named_type_path="sdk.queued_job.QueuedJobPayload",
96
+ )
97
+ @dataclasses.dataclass(kw_only=True)
98
+ class QueuedJobPayload:
99
+ invocation_context: InvocationContext
100
+
101
+
102
+ # DO NOT MODIFY -- This file is generated by type_spec
103
+ @serial_class(
104
+ named_type_path="sdk.queued_job.QueuedJobResult",
105
+ )
106
+ @dataclasses.dataclass(kw_only=True)
107
+ class QueuedJobResult:
108
+ queued_job_uuid: str
109
+ job_result: job_definition_t.JobResult
110
+
111
+
112
+ # DO NOT MODIFY -- This file is generated by type_spec
113
+ @serial_class(
114
+ named_type_path="sdk.queued_job.QueuedJob",
115
+ )
116
+ @dataclasses.dataclass(kw_only=True)
117
+ class QueuedJob:
118
+ queued_job_uuid: str
119
+ job_ref_name: str
120
+ num_attempts: int
121
+ submitted_at: datetime.datetime
122
+ payload: QueuedJobPayload
123
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,12 @@
1
+ # flake8: noqa: F821
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ # DO NOT MODIFY -- This file is generated by type_spec
6
+ # Kept only for SDK backwards compatibility
7
+ from .recipe_identifiers_t import RecipeIdentifierEditableName as RecipeIdentifierEditableName
8
+ from .recipe_identifiers_t import RecipeIdentifierMetadata as RecipeIdentifierMetadata
9
+ from .recipe_identifiers_t import RecipeIdentifierMaterialFamily as RecipeIdentifierMaterialFamily
10
+ from .recipe_identifiers_t import RecipeIdentifier as RecipeIdentifier
11
+ from .recipe_identifiers_t import RecipeIdentifiers as RecipeIdentifiers
12
+ # DO NOT MODIFY -- This file is generated by type_spec