UncountablePythonSDK 0.0.24__py3-none-any.whl → 0.0.131__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of UncountablePythonSDK might be problematic. Click here for more details.

Files changed (373) hide show
  1. docs/conf.py +60 -8
  2. docs/index.md +107 -4
  3. docs/integration_examples/create_ingredient.md +43 -0
  4. docs/integration_examples/create_output.md +56 -0
  5. docs/integration_examples/index.md +6 -0
  6. docs/justfile +2 -2
  7. docs/requirements.txt +7 -5
  8. examples/async_batch.py +5 -6
  9. examples/basic_auth.py +7 -0
  10. examples/create_entity.py +4 -6
  11. examples/create_ingredient_sdk.py +34 -0
  12. examples/download_files.py +26 -0
  13. examples/edit_recipe_inputs.py +50 -0
  14. examples/integration-server/jobs/materials_auto/concurrent_cron.py +11 -0
  15. examples/integration-server/jobs/materials_auto/example_cron.py +21 -0
  16. examples/integration-server/jobs/materials_auto/example_http.py +47 -0
  17. examples/integration-server/jobs/materials_auto/example_instrument.py +100 -0
  18. examples/integration-server/jobs/materials_auto/example_parse.py +140 -0
  19. examples/integration-server/jobs/materials_auto/example_predictions.py +61 -0
  20. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +39 -0
  21. examples/integration-server/jobs/materials_auto/example_wh.py +23 -0
  22. examples/integration-server/jobs/materials_auto/profile.yaml +104 -0
  23. examples/integration-server/pyproject.toml +224 -0
  24. examples/invoke_uploader.py +26 -0
  25. examples/oauth.py +7 -0
  26. examples/set_recipe_metadata_file.py +40 -0
  27. examples/set_recipe_output_file_sdk.py +26 -0
  28. examples/upload_files.py +2 -3
  29. pkgs/argument_parser/__init__.py +9 -0
  30. pkgs/argument_parser/_is_namedtuple.py +3 -0
  31. pkgs/argument_parser/argument_parser.py +295 -74
  32. pkgs/argument_parser/case_convert.py +4 -3
  33. pkgs/filesystem_utils/__init__.py +20 -0
  34. pkgs/filesystem_utils/_blob_session.py +144 -0
  35. pkgs/filesystem_utils/_gdrive_session.py +309 -0
  36. pkgs/filesystem_utils/_local_session.py +69 -0
  37. pkgs/filesystem_utils/_s3_session.py +118 -0
  38. pkgs/filesystem_utils/_sftp_session.py +151 -0
  39. pkgs/filesystem_utils/file_type_utils.py +91 -0
  40. pkgs/filesystem_utils/filesystem_session.py +39 -0
  41. pkgs/py.typed +0 -0
  42. pkgs/serialization/__init__.py +8 -1
  43. pkgs/serialization/annotation.py +64 -0
  44. pkgs/serialization/missing_sentry.py +1 -1
  45. pkgs/serialization/opaque_key.py +1 -1
  46. pkgs/serialization/serial_alias.py +47 -0
  47. pkgs/serialization/serial_class.py +69 -54
  48. pkgs/serialization/serial_generic.py +16 -0
  49. pkgs/serialization/serial_union.py +84 -0
  50. pkgs/serialization/yaml.py +57 -0
  51. pkgs/serialization_util/__init__.py +7 -7
  52. pkgs/serialization_util/convert_to_snakecase.py +27 -0
  53. pkgs/serialization_util/dataclasses.py +14 -0
  54. pkgs/serialization_util/serialization_helpers.py +117 -71
  55. pkgs/type_spec/actions_registry/__main__.py +0 -4
  56. pkgs/type_spec/actions_registry/emit_typescript.py +5 -5
  57. pkgs/type_spec/builder.py +438 -109
  58. pkgs/type_spec/builder_types.py +9 -0
  59. pkgs/type_spec/config.py +52 -24
  60. pkgs/type_spec/cross_output_links.py +99 -0
  61. pkgs/type_spec/emit_io_ts.py +1 -1
  62. pkgs/type_spec/emit_open_api.py +160 -41
  63. pkgs/type_spec/emit_open_api_util.py +13 -7
  64. pkgs/type_spec/emit_python.py +450 -136
  65. pkgs/type_spec/emit_typescript.py +117 -250
  66. pkgs/type_spec/emit_typescript_util.py +293 -4
  67. pkgs/type_spec/load_types.py +20 -5
  68. pkgs/type_spec/non_discriminated_union_exceptions.py +14 -0
  69. pkgs/type_spec/open_api_util.py +29 -4
  70. pkgs/type_spec/parts/base.py.prepart +13 -10
  71. pkgs/type_spec/parts/base.ts.prepart +4 -0
  72. pkgs/type_spec/type_info/__main__.py +3 -1
  73. pkgs/type_spec/type_info/emit_type_info.py +161 -32
  74. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  75. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +308 -0
  76. pkgs/type_spec/util.py +4 -4
  77. pkgs/type_spec/value_spec/__main__.py +27 -10
  78. pkgs/type_spec/value_spec/convert_type.py +21 -1
  79. pkgs/type_spec/value_spec/emit_python.py +25 -7
  80. pkgs/type_spec/value_spec/types.py +1 -1
  81. uncountable/__init__.py +1 -2
  82. uncountable/core/__init__.py +11 -3
  83. uncountable/core/async_batch.py +16 -1
  84. uncountable/core/client.py +247 -52
  85. uncountable/core/environment.py +41 -0
  86. uncountable/core/file_upload.py +67 -22
  87. uncountable/core/types.py +8 -13
  88. uncountable/integration/cli.py +142 -0
  89. uncountable/integration/construct_client.py +43 -27
  90. uncountable/integration/cron.py +12 -11
  91. uncountable/integration/db/connect.py +12 -2
  92. uncountable/integration/db/session.py +25 -0
  93. uncountable/integration/entrypoint.py +4 -34
  94. uncountable/integration/executors/executors.py +147 -0
  95. uncountable/integration/executors/generic_upload_executor.py +336 -0
  96. uncountable/integration/executors/script_executor.py +15 -9
  97. uncountable/integration/http_server/__init__.py +5 -0
  98. uncountable/integration/http_server/types.py +69 -0
  99. uncountable/integration/job.py +246 -19
  100. uncountable/integration/queue_runner/__init__.py +0 -0
  101. uncountable/integration/queue_runner/command_server/__init__.py +28 -0
  102. uncountable/integration/queue_runner/command_server/command_client.py +133 -0
  103. uncountable/integration/queue_runner/command_server/command_server.py +142 -0
  104. uncountable/integration/queue_runner/command_server/constants.py +4 -0
  105. uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  106. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +58 -0
  107. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +57 -0
  108. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +114 -0
  109. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +264 -0
  110. uncountable/integration/queue_runner/command_server/types.py +75 -0
  111. uncountable/integration/queue_runner/datastore/__init__.py +3 -0
  112. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +250 -0
  113. uncountable/integration/queue_runner/datastore/interface.py +29 -0
  114. uncountable/integration/queue_runner/datastore/model.py +24 -0
  115. uncountable/integration/queue_runner/job_scheduler.py +200 -0
  116. uncountable/integration/queue_runner/queue_runner.py +34 -0
  117. uncountable/integration/queue_runner/types.py +7 -0
  118. uncountable/integration/queue_runner/worker.py +116 -0
  119. uncountable/integration/scan_profiles.py +67 -0
  120. uncountable/integration/scheduler.py +199 -0
  121. uncountable/integration/secret_retrieval/__init__.py +3 -0
  122. uncountable/integration/secret_retrieval/retrieve_secret.py +93 -0
  123. uncountable/integration/server.py +103 -54
  124. uncountable/integration/telemetry.py +251 -0
  125. uncountable/integration/webhook_server/entrypoint.py +97 -0
  126. uncountable/types/__init__.py +149 -30
  127. uncountable/types/api/batch/execute_batch.py +16 -9
  128. uncountable/types/api/batch/execute_batch_load_async.py +13 -7
  129. uncountable/types/api/chemical/convert_chemical_formats.py +20 -8
  130. uncountable/types/api/condition_parameters/__init__.py +1 -0
  131. uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
  132. uncountable/types/api/entity/create_entities.py +24 -12
  133. uncountable/types/api/entity/create_entity.py +22 -13
  134. uncountable/types/api/entity/create_or_update_entity.py +48 -0
  135. uncountable/types/api/entity/export_entities.py +59 -0
  136. uncountable/types/api/entity/get_entities_data.py +18 -9
  137. uncountable/types/api/entity/grant_entity_permissions.py +48 -0
  138. uncountable/types/api/entity/list_aggregate.py +79 -0
  139. uncountable/types/api/entity/list_entities.py +53 -14
  140. uncountable/types/api/entity/lock_entity.py +45 -0
  141. uncountable/types/api/entity/lookup_entity.py +116 -0
  142. uncountable/types/api/entity/resolve_entity_ids.py +19 -10
  143. uncountable/types/api/entity/set_entity_field_values.py +44 -0
  144. uncountable/types/api/entity/set_values.py +15 -8
  145. uncountable/types/api/entity/transition_entity_phase.py +27 -12
  146. uncountable/types/api/entity/unlock_entity.py +44 -0
  147. uncountable/types/api/equipment/__init__.py +1 -0
  148. uncountable/types/api/equipment/associate_equipment_input.py +43 -0
  149. uncountable/types/api/field_options/__init__.py +1 -0
  150. uncountable/types/api/field_options/upsert_field_options.py +55 -0
  151. uncountable/types/api/files/__init__.py +1 -0
  152. uncountable/types/api/files/download_file.py +77 -0
  153. uncountable/types/api/id_source/list_id_source.py +20 -11
  154. uncountable/types/api/id_source/match_id_source.py +15 -10
  155. uncountable/types/api/input_groups/get_input_group_names.py +16 -7
  156. uncountable/types/api/inputs/create_inputs.py +28 -14
  157. uncountable/types/api/inputs/get_input_data.py +34 -16
  158. uncountable/types/api/inputs/get_input_names.py +19 -10
  159. uncountable/types/api/inputs/get_inputs_data.py +29 -11
  160. uncountable/types/api/inputs/set_input_attribute_values.py +16 -10
  161. uncountable/types/api/inputs/set_input_category.py +44 -0
  162. uncountable/types/api/inputs/set_input_subcategories.py +45 -0
  163. uncountable/types/api/inputs/set_intermediate_type.py +50 -0
  164. uncountable/types/api/integrations/__init__.py +1 -0
  165. uncountable/types/api/integrations/publish_realtime_data.py +41 -0
  166. uncountable/types/api/integrations/push_notification.py +49 -0
  167. uncountable/types/api/integrations/register_sockets_token.py +41 -0
  168. uncountable/types/api/listing/__init__.py +1 -0
  169. uncountable/types/api/listing/fetch_listing.py +58 -0
  170. uncountable/types/api/material_families/__init__.py +1 -0
  171. uncountable/types/api/material_families/update_entity_material_families.py +47 -0
  172. uncountable/types/api/notebooks/__init__.py +1 -0
  173. uncountable/types/api/notebooks/add_notebook_content.py +119 -0
  174. uncountable/types/api/outputs/get_output_data.py +32 -17
  175. uncountable/types/api/outputs/get_output_names.py +18 -9
  176. uncountable/types/api/outputs/get_output_organization.py +173 -0
  177. uncountable/types/api/outputs/resolve_output_conditions.py +23 -11
  178. uncountable/types/api/permissions/set_core_permissions.py +31 -15
  179. uncountable/types/api/project/get_projects.py +20 -11
  180. uncountable/types/api/project/get_projects_data.py +23 -14
  181. uncountable/types/api/recipe_links/create_recipe_link.py +17 -10
  182. uncountable/types/api/recipe_links/remove_recipe_link.py +45 -0
  183. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +19 -10
  184. uncountable/types/api/recipes/add_recipe_to_project.py +42 -0
  185. uncountable/types/api/recipes/add_time_series_data.py +64 -0
  186. uncountable/types/api/recipes/archive_recipes.py +14 -7
  187. uncountable/types/api/recipes/associate_recipe_as_input.py +16 -8
  188. uncountable/types/api/recipes/associate_recipe_as_lot.py +14 -7
  189. uncountable/types/api/recipes/clear_recipe_outputs.py +42 -0
  190. uncountable/types/api/recipes/create_mix_order.py +44 -0
  191. uncountable/types/api/recipes/create_recipe.py +21 -14
  192. uncountable/types/api/recipes/create_recipes.py +25 -13
  193. uncountable/types/api/recipes/disassociate_recipe_as_input.py +14 -7
  194. uncountable/types/api/recipes/edit_recipe_inputs.py +208 -19
  195. uncountable/types/api/recipes/get_column_calculation_values.py +57 -0
  196. uncountable/types/api/recipes/get_curve.py +15 -9
  197. uncountable/types/api/recipes/get_recipe_calculations.py +17 -11
  198. uncountable/types/api/recipes/get_recipe_links.py +14 -8
  199. uncountable/types/api/recipes/get_recipe_names.py +16 -7
  200. uncountable/types/api/recipes/get_recipe_output_metadata.py +16 -10
  201. uncountable/types/api/recipes/get_recipes_data.py +96 -45
  202. uncountable/types/api/recipes/lock_recipes.py +64 -0
  203. uncountable/types/api/recipes/remove_recipe_from_project.py +42 -0
  204. uncountable/types/api/recipes/set_recipe_inputs.py +19 -13
  205. uncountable/types/api/recipes/set_recipe_metadata.py +14 -7
  206. uncountable/types/api/recipes/set_recipe_output_annotations.py +114 -0
  207. uncountable/types/api/recipes/set_recipe_output_file.py +55 -0
  208. uncountable/types/api/recipes/set_recipe_outputs.py +40 -15
  209. uncountable/types/api/recipes/set_recipe_tags.py +30 -13
  210. uncountable/types/api/recipes/set_recipe_total.py +59 -0
  211. uncountable/types/api/recipes/unarchive_recipes.py +41 -0
  212. uncountable/types/api/recipes/unlock_recipes.py +51 -0
  213. uncountable/types/api/runsheet/__init__.py +1 -0
  214. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  215. uncountable/types/api/triggers/run_trigger.py +15 -8
  216. uncountable/types/api/uploader/__init__.py +1 -0
  217. uncountable/types/api/uploader/complete_async_parse.py +46 -0
  218. uncountable/types/api/uploader/invoke_uploader.py +46 -0
  219. uncountable/types/api/user/__init__.py +1 -0
  220. uncountable/types/api/user/get_current_user_info.py +40 -0
  221. uncountable/types/async_batch.py +8 -52
  222. uncountable/types/async_batch_processor.py +694 -18
  223. uncountable/types/async_batch_t.py +108 -0
  224. uncountable/types/async_jobs.py +8 -0
  225. uncountable/types/async_jobs_t.py +52 -0
  226. uncountable/types/auth_retrieval.py +11 -0
  227. uncountable/types/auth_retrieval_t.py +75 -0
  228. uncountable/types/base.py +5 -80
  229. uncountable/types/base_t.py +87 -0
  230. uncountable/types/calculations.py +3 -19
  231. uncountable/types/calculations_t.py +26 -0
  232. uncountable/types/chemical_structure.py +3 -23
  233. uncountable/types/chemical_structure_t.py +28 -0
  234. uncountable/types/client_base.py +1170 -88
  235. uncountable/types/client_config.py +8 -0
  236. uncountable/types/client_config_t.py +36 -0
  237. uncountable/types/curves.py +5 -43
  238. uncountable/types/curves_t.py +50 -0
  239. uncountable/types/data.py +12 -0
  240. uncountable/types/data_t.py +103 -0
  241. uncountable/types/entity.py +8 -270
  242. uncountable/types/entity_t.py +446 -0
  243. uncountable/types/experiment_groups.py +3 -19
  244. uncountable/types/experiment_groups_t.py +26 -0
  245. uncountable/types/exports.py +8 -0
  246. uncountable/types/exports_t.py +34 -0
  247. uncountable/types/field_values.py +25 -61
  248. uncountable/types/field_values_t.py +302 -0
  249. uncountable/types/fields.py +3 -20
  250. uncountable/types/fields_t.py +27 -0
  251. uncountable/types/generic_upload.py +14 -0
  252. uncountable/types/generic_upload_t.py +119 -0
  253. uncountable/types/id_source.py +7 -45
  254. uncountable/types/id_source_t.py +68 -0
  255. uncountable/types/identifier.py +6 -50
  256. uncountable/types/identifier_t.py +62 -0
  257. uncountable/types/input_attributes.py +3 -25
  258. uncountable/types/input_attributes_t.py +29 -0
  259. uncountable/types/inputs.py +6 -57
  260. uncountable/types/inputs_t.py +82 -0
  261. uncountable/types/integration_server.py +8 -0
  262. uncountable/types/integration_server_t.py +46 -0
  263. uncountable/types/integration_session.py +10 -0
  264. uncountable/types/integration_session_t.py +60 -0
  265. uncountable/types/integrations.py +10 -0
  266. uncountable/types/integrations_t.py +62 -0
  267. uncountable/types/job_definition.py +28 -0
  268. uncountable/types/job_definition_t.py +285 -0
  269. uncountable/types/listing.py +9 -0
  270. uncountable/types/listing_t.py +51 -0
  271. uncountable/types/notices.py +8 -0
  272. uncountable/types/notices_t.py +37 -0
  273. uncountable/types/notifications.py +11 -0
  274. uncountable/types/notifications_t.py +74 -0
  275. uncountable/types/outputs.py +3 -22
  276. uncountable/types/outputs_t.py +29 -0
  277. uncountable/types/overrides.py +9 -0
  278. uncountable/types/overrides_t.py +49 -0
  279. uncountable/types/permissions.py +3 -42
  280. uncountable/types/permissions_t.py +45 -0
  281. uncountable/types/phases.py +3 -19
  282. uncountable/types/phases_t.py +26 -0
  283. uncountable/types/post_base.py +3 -26
  284. uncountable/types/post_base_t.py +29 -0
  285. uncountable/types/queued_job.py +17 -0
  286. uncountable/types/queued_job_t.py +140 -0
  287. uncountable/types/recipe_identifiers.py +7 -58
  288. uncountable/types/recipe_identifiers_t.py +75 -0
  289. uncountable/types/recipe_inputs.py +4 -26
  290. uncountable/types/recipe_inputs_t.py +29 -0
  291. uncountable/types/recipe_links.py +4 -46
  292. uncountable/types/recipe_links_t.py +53 -0
  293. uncountable/types/recipe_metadata.py +5 -48
  294. uncountable/types/recipe_metadata_t.py +57 -0
  295. uncountable/types/recipe_output_metadata.py +3 -20
  296. uncountable/types/recipe_output_metadata_t.py +27 -0
  297. uncountable/types/recipe_tags.py +3 -19
  298. uncountable/types/recipe_tags_t.py +26 -0
  299. uncountable/types/recipe_workflow_steps.py +9 -73
  300. uncountable/types/recipe_workflow_steps_t.py +95 -0
  301. uncountable/types/recipes.py +7 -0
  302. uncountable/types/recipes_t.py +25 -0
  303. uncountable/types/response.py +3 -21
  304. uncountable/types/response_t.py +26 -0
  305. uncountable/types/secret_retrieval.py +11 -0
  306. uncountable/types/secret_retrieval_t.py +75 -0
  307. uncountable/types/sockets.py +20 -0
  308. uncountable/types/sockets_t.py +169 -0
  309. uncountable/types/structured_filters.py +25 -0
  310. uncountable/types/structured_filters_t.py +248 -0
  311. uncountable/types/units.py +3 -19
  312. uncountable/types/units_t.py +26 -0
  313. uncountable/types/uploader.py +24 -0
  314. uncountable/types/uploader_t.py +222 -0
  315. uncountable/types/users.py +3 -20
  316. uncountable/types/users_t.py +27 -0
  317. uncountable/types/webhook_job.py +9 -0
  318. uncountable/types/webhook_job_t.py +48 -0
  319. uncountable/types/workflows.py +4 -28
  320. uncountable/types/workflows_t.py +38 -0
  321. uncountablepythonsdk-0.0.131.dist-info/METADATA +64 -0
  322. uncountablepythonsdk-0.0.131.dist-info/RECORD +363 -0
  323. {UncountablePythonSDK-0.0.24.dist-info → uncountablepythonsdk-0.0.131.dist-info}/WHEEL +1 -1
  324. {UncountablePythonSDK-0.0.24.dist-info → uncountablepythonsdk-0.0.131.dist-info}/top_level.txt +0 -1
  325. UncountablePythonSDK-0.0.24.dist-info/METADATA +0 -47
  326. UncountablePythonSDK-0.0.24.dist-info/RECORD +0 -216
  327. docs/quickstart.md +0 -19
  328. examples/recipe-import/importer.py +0 -39
  329. type_spec/external/api/batch/execute_batch.yaml +0 -56
  330. type_spec/external/api/batch/execute_batch_load_async.yaml +0 -18
  331. type_spec/external/api/chemical/convert_chemical_formats.yaml +0 -33
  332. type_spec/external/api/entity/create_entities.yaml +0 -45
  333. type_spec/external/api/entity/create_entity.yaml +0 -51
  334. type_spec/external/api/entity/get_entities_data.yaml +0 -29
  335. type_spec/external/api/entity/list_entities.yaml +0 -52
  336. type_spec/external/api/entity/resolve_entity_ids.yaml +0 -29
  337. type_spec/external/api/entity/set_values.yaml +0 -18
  338. type_spec/external/api/entity/transition_entity_phase.yaml +0 -44
  339. type_spec/external/api/id_source/list_id_source.yaml +0 -35
  340. type_spec/external/api/id_source/match_id_source.yaml +0 -32
  341. type_spec/external/api/input_groups/get_input_group_names.yaml +0 -29
  342. type_spec/external/api/inputs/create_inputs.yaml +0 -48
  343. type_spec/external/api/inputs/get_input_data.yaml +0 -95
  344. type_spec/external/api/inputs/get_input_names.yaml +0 -38
  345. type_spec/external/api/inputs/get_inputs_data.yaml +0 -82
  346. type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -33
  347. type_spec/external/api/outputs/get_output_data.yaml +0 -92
  348. type_spec/external/api/outputs/get_output_names.yaml +0 -35
  349. type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -50
  350. type_spec/external/api/permissions/set_core_permissions.yaml +0 -69
  351. type_spec/external/api/project/get_projects.yaml +0 -42
  352. type_spec/external/api/project/get_projects_data.yaml +0 -50
  353. type_spec/external/api/recipe_links/create_recipe_link.yaml +0 -25
  354. type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -41
  355. type_spec/external/api/recipes/archive_recipes.yaml +0 -20
  356. type_spec/external/api/recipes/associate_recipe_as_input.yaml +0 -19
  357. type_spec/external/api/recipes/associate_recipe_as_lot.yaml +0 -19
  358. type_spec/external/api/recipes/create_recipe.yaml +0 -39
  359. type_spec/external/api/recipes/create_recipes.yaml +0 -47
  360. type_spec/external/api/recipes/disassociate_recipe_as_input.yaml +0 -16
  361. type_spec/external/api/recipes/edit_recipe_inputs.yaml +0 -85
  362. type_spec/external/api/recipes/get_curve.yaml +0 -21
  363. type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -39
  364. type_spec/external/api/recipes/get_recipe_links.yaml +0 -26
  365. type_spec/external/api/recipes/get_recipe_names.yaml +0 -29
  366. type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -36
  367. type_spec/external/api/recipes/get_recipes_data.yaml +0 -244
  368. type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -42
  369. type_spec/external/api/recipes/set_recipe_metadata.yaml +0 -20
  370. type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -52
  371. type_spec/external/api/recipes/set_recipe_tags.yaml +0 -62
  372. type_spec/external/api/triggers/run_trigger.yaml +0 -18
  373. uncountable/integration/types.py +0 -89
@@ -1,244 +0,0 @@
1
- $endpoint:
2
- is_sdk: true
3
- method: get
4
- path: ${external}/recipes/external_get_recipes_data
5
- function: main.site.app.external.recipes.get_recipes_data.get_recipes_data
6
- desc: "Gets all data associated with a set of recipes. Because Uncountables recipe structure is complex, various data values are exploded out to increase efficiency in parsing, and this page is paginated to prevent too large of return values"
7
- Arguments:
8
- type: Object
9
- properties:
10
- recipe_ids?:
11
- type: Optional<List<ObjectId>>
12
- desc: "The recipes to get the data from. Either these or project_id must be filled in"
13
- project_id?:
14
- type: Optional<ObjectId>
15
- desc: "The projects to get the data from. Either these or recipe_ids must be filled in"
16
- offset?:
17
- type: Optional<Integer>
18
- desc: "Used for pagination. All pagination is done in order of Recipe ID"
19
- limit?:
20
- type: Optional<Integer>
21
- desc: "The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100"
22
-
23
- RecipeOutput:
24
- type: Object
25
- desc: "A representation of a single measurement associated with a recipe within Uncountable system"
26
- properties:
27
- id:
28
- type: ObjectId
29
- desc: "The global unique identifier for the recipe output. For cross-reference elsewhere."
30
- output_id:
31
- type: ObjectId
32
- desc: "The output specifically measured in this case"
33
- replicate_num:
34
- type: Integer
35
- desc: "The replicate number (1-indexed) of the output in question within the recipe. (Output, Output condition, Replicate_Num) form a unique index"
36
- quantity_dec:
37
- type: Decimal
38
- desc: "The quantity of the output, if numeric or ordinal"
39
- quantity_json:
40
- type: JsonValue
41
- desc: "The quantity of the output, if not numeric"
42
- curve_id:
43
- type: ObjectId
44
- desc: "The id of the curve associated with the output if the output is of curve type."
45
- output_condition_id:
46
- type: ObjectId
47
- desc: "A reference to the condition ID for the output (null if there are no conditions). Used to encode complicated test settings such as test standard, aging time, etc."
48
-
49
- ConditionParameterValue:
50
- type: Object
51
- desc: "A condition parameter value represents a single association of value with a parameter. For instance, Test Method: ISO 23"
52
- properties:
53
- condition_parameter_id:
54
- type: ObjectId
55
- desc: "The globally unique identifier for the condition parameter, i.e. Test Method or Aging Time"
56
- condition_parameter_name:
57
- type: String
58
- desc: "The name of the condition parameter"
59
- quantity_dec:
60
- type: Decimal
61
- desc: "The quantity associated with the parameter if the parameter is of numeric type. If this is filled in, quantity_json will be null"
62
- quantity_json:
63
- type: JsonValue
64
- desc: "The quantity associated with the parameter if the parameter is not of numeric type. If this is filled in, quantity_json will not be null"
65
-
66
- SimpleOutputCondition:
67
- type: Object
68
- desc: "Within Uncountable, Output conditions represent how an output is measured. Common use cases include the test temperature, test standard, aging time, etc. An outputcondition is the full description of these parameters"
69
- properties:
70
- output_condition_id:
71
- type: ObjectId
72
- desc: "The globally unique ID for the Output Condition, used for cross reference elsewhere"
73
- condition_parameter_values:
74
- type: List<ConditionParameterValue>
75
- desc: "The list of parameters and values that comprise this condition"
76
-
77
- RecipeInput:
78
- type: Object
79
- properties:
80
- id:
81
- type: ObjectId
82
- desc: "The globally unique id for the recipe input"
83
- input_id:
84
- type: ObjectId
85
- desc: "The globally unique ID for the input, allowing for cross reference elsewhere"
86
- input_lot_recipe_id:
87
- type: Optional<ObjectId>
88
- desc: "The recipe id of the lot associated with the input"
89
- recipe_step_id:
90
- type: ObjectId
91
- desc: "The unique Recipe Step ID for the input, allowing for placement within the workflow"
92
- quantity_dec:
93
- type: Decimal
94
- desc: "The quantity of the input if it is numeric or recipe type. If this is filled in, quantity_json will not be filled in"
95
- quantity_json:
96
- type: JsonValue
97
- desc: "The quantity of the input if it is not numeric or recipe type. If this is filled in, quantity_dec will not be filled in"
98
- curve_id:
99
- type: Optional<ObjectId>
100
- desc: "The id of the curve associated with the input if the input is of curve type."
101
- actual_quantity_dec:
102
- type: Decimal
103
- desc: "The actual quantity of the input if it is numeric or recipe type. If this is filled in, actual_quantity_json will not be filled in"
104
- actual_quantity_json:
105
- type: JsonValue
106
- desc: "The actual quantity of the input if it is not numeric or recipe type. If this is filled in, actual_quantity_dec will not be filled in"
107
- input_type:
108
- type: String
109
- desc: "The type of the input on the platform, for example process parameter, equipment or ingredient."
110
- behavior:
111
- type: String
112
- desc: "The behavior of the input relative to the experiment. For example 'inclusion' or 'use quantity'."
113
-
114
- RecipeStep:
115
- type: Object
116
- properties:
117
- name:
118
- type: Optional<String>
119
- desc: "An optional name for the recipe step"
120
- recipe_step_id:
121
- type: ObjectId
122
- desc: "An ID value for the recipe step, used elsewhere to reference the part of the recipe that the input was placed in"
123
- recipe_step_number:
124
- type: Integer
125
- desc: "An ordering for the recipe step, allowing the user to determine the ordering of the steps"
126
- instructions?:
127
- type: String
128
- desc: "Instructions associated with the recipe step"
129
-
130
- RecipeStepGroup:
131
- type: Object
132
- properties:
133
- name:
134
- type: Optional<String>
135
- desc: "An optional name for the recipe step group. These names are on a per recipe basis, allowing users to individually name sub-components of recipes"
136
- recipe_steps:
137
- type: List<RecipeStep>
138
- desc: "A listing of recipe steps. Recipe Steps are the base component in Uncountable's recipe structure, where inputs are directly placed"
139
-
140
- RecipeWorkflowStep:
141
- type: Object
142
- desc: "A workflow step associated with a recipe. Workflow steps are comprised of recipe step groups, in turn comprised of recipe steps, where inputs are located. These groupings exists to give customers the ability to flexibly place inputs into the correct process ordering"
143
- properties:
144
- recipe_workflow_step_id:
145
- type: ObjectId
146
- desc: "A unique reference for the workflow step within the recipe."
147
- workflow_step_id:
148
- type: ObjectId
149
- desc: "A reference to the workflow_step_id for the workflow. This will be shared across recipes, and can be used to do analysis about what part of a generic process inputs are located in."
150
- recipe_step_groups:
151
- type: List<RecipeStepGroup>
152
- desc: "A listing of recipe step groups within the recipe"
153
-
154
- RecipeStepRelationship:
155
- type: Object
156
- properties:
157
- step_relationship_id:
158
- type: ObjectId
159
- desc: "The unique ID for the relationship"
160
- name:
161
- type: Optional<String>
162
- desc: "The name of this relationship"
163
- quantity_dec?:
164
- type: Decimal
165
- desc: "The current quantity for the relationship"
166
- actual_quantity_dec?:
167
- type: Decimal
168
- desc: "The current actual quantity for the relationship"
169
- source_recipe_workflow_step_id:
170
- type: ObjectId
171
- desc: "The ID of the workflow step used as the source of this preceding step."
172
- target_recipe_step_id:
173
- type: ObjectId
174
- desc: "The ID of the recipe step used as the target of this preceding step."
175
-
176
- Recipe:
177
- type: Object
178
- properties:
179
- recipe_id:
180
- type: ObjectId
181
- desc: "A unique identifier for the recipe. Used for joining elsewhere"
182
- creating_user_id?:
183
- type: ObjectId
184
- desc: "The user ID who originally created the recipe. Null when created from automated scripts, such as data transfers, or from the Uncountable implementation team."
185
- create_datetime:
186
- type: String
187
- desc: "When the recipe was created"
188
- last_modified_datetime:
189
- type: String
190
- desc: "when the recipe was last modified"
191
- name:
192
- type: String
193
- desc: "The full name in the system of the recipe"
194
- notes:
195
- type: Optional<String>
196
- desc: "Any notes associated with the recipe. This may be null if there are no notes present"
197
- barcode_value?:
198
- type: String
199
- desc: "The value used in the barcoding system to lookup this experiment."
200
- workflow_id:
201
- type: ObjectId
202
- desc: "The workflow ID associated with the recipe. Workflows correspond to a set of experimental steps performed, and are referenced in the workflows return object"
203
- metadata:
204
- type: List<recipe_metadata.RecipeMetadata>
205
- desc: "Metadata associated with a recipe. Metadata includes values that are neither ingredients nor process parameters, such as a location of an experiment"
206
- inputs:
207
- type: List<RecipeInput>
208
- desc: "Inputs and quantities of those inputs associated with a recipe. Uncountable refers to inputs as either ingredients or process parameters."
209
- outputs:
210
- type: List<RecipeOutput>
211
- desc: "Outputs and quantities of those outputs associated with a recipe. These can be of any form referred to in the Uncountable system."
212
- workflow_steps:
213
- type: List<RecipeWorkflowStep>
214
- desc: "A reference of workflow steps in the recipe. This is used to reference input values to where they occurred in the experimental process."
215
- tag_ids:
216
- type: List<ObjectId>
217
- desc: A list of Tag IDs associated with the recipe
218
- experiment_group_ids:
219
- type: List<ObjectId>
220
- desc: A list of experiment group IDs associated with the recipe
221
- step_relationships:
222
- type: List<RecipeStepRelationship>
223
-
224
- Data:
225
- type: Object
226
- properties:
227
- recipes:
228
- type: List<Recipe>
229
- workflows:
230
- type: List<workflows.SimpleWorkflow>
231
- metadata:
232
- type: List<recipe_metadata.SimpleRecipeMetadataField>
233
- inputs:
234
- type: List<inputs.SimpleInput>
235
- outputs:
236
- type: List<outputs.SimpleOutput>
237
- output_conditions:
238
- type: List<SimpleOutputCondition>
239
- users:
240
- type: List<users.SimpleUser>
241
- recipe_tags:
242
- type: List<recipe_tags.SimpleRecipeTag>
243
- experiment_groups:
244
- type: List<experiment_groups.SimpleExperimentGroup>
@@ -1,42 +0,0 @@
1
- $endpoint:
2
- is_sdk: true
3
- method: post
4
- path: ${external}/recipes/external_set_recipe_inputs
5
- function: main.site.app.external.recipes.set_recipe_inputs.set_recipe_inputs
6
- desc: "Sets inputs values for an experiment. Values set can be numeric, text or categorical types in the Uncountable system"
7
-
8
- RecipeInputValue:
9
- type: Object
10
- properties:
11
- recipe_id:
12
- type: ObjectId
13
- desc: "A unique identifier for the recipe / experiment. Used for joining elsewhere"
14
- recipe_step_id?:
15
- type: Optional<ObjectId>
16
- desc: "Optionally the step id for the step of the recipe to be written to. If none is passed, the input will be written to first recipe workflow step"
17
- input_id:
18
- type: ObjectId
19
- desc: "A unique identifier for the input. Used for joining and identification"
20
- value_numeric?:
21
- type: Decimal
22
- desc: "The numeric value for the output. Should be none if output is not of type numeric."
23
- value_str?:
24
- type: String
25
- set_actual_value?:
26
- type: Boolean
27
- desc: "If True, modify the actual value for the input. If not provided or False, modify the set value for the input."
28
- lot_recipe_id?:
29
- type: ObjectId
30
- desc: The recipe id for a lot to be associated to this recipe input. If the recipe is not a lot, it will be created as a lot.
31
- remove?:
32
- type: Boolean
33
- desc: When true will remove the input from the recipe
34
-
35
- Arguments:
36
- type: Object
37
- properties:
38
- input_data:
39
- type: List<RecipeInputValue>
40
- desc: "The inputs to set. Must be at most 100 entries long"
41
- Data:
42
- type: Object
@@ -1,20 +0,0 @@
1
- $endpoint:
2
- is_sdk: true
3
- async_batch_path: set_recipe_metadata
4
- method: post
5
- path: ${external}/recipes/set_recipe_metadata
6
- function: main.site.app.external.recipes.set_recipe_metadata.set_recipe_metadata
7
- desc: "Set metadata values on a recipe"
8
-
9
- Arguments:
10
- type: Object
11
- properties:
12
- recipe_key:
13
- type: identifier.IdentifierKey
14
- desc: "Identifier for the recipe"
15
- recipe_metadata:
16
- type: List<recipe_metadata.MetadataValue>
17
- desc: "Metadata values to populate the recipe with"
18
-
19
- Data:
20
- type: Object
@@ -1,52 +0,0 @@
1
- $endpoint:
2
- is_sdk: true
3
- method: post
4
- path: ${external}/recipes/external_set_recipe_outputs
5
- function: main.site.app.external.recipes.set_recipe_outputs.set_recipe_outputs
6
- desc: "Sets output values for an experiment. Values set can be numeric, text or categorical types in the Uncountable system"
7
-
8
- CurveValues:
9
- type: Object
10
- properties:
11
- x_values:
12
- type: List<Optional<LossyDecimal>>
13
- desc: List of x values for the curve
14
- y_values:
15
- type: List<Optional<LossyDecimal>>
16
- desc: List of y or response values for the curve
17
-
18
- RecipeOutputValue:
19
- type: Object
20
- properties:
21
- recipe_id:
22
- type: ObjectId
23
- desc: "A unique identifier for the recipe / experiment. Used for joining elsewhere"
24
- output_id:
25
- type: ObjectId
26
- desc: "A unique identifier for the output. Used for joining and identification"
27
- condition_id?:
28
- type: ObjectId
29
- desc: "A unique identifier the set of condition parameters associated with the output."
30
- experiment_num:
31
- type: Integer
32
- desc: "The experiment number for the output in the experiment. 1 Indexed"
33
- value_numeric?:
34
- type: Decimal
35
- desc: "The numeric value for the output. Should be none if output is not of type numeric."
36
- value_str?:
37
- type: String
38
- desc: "A string value for the output. Should be none if output is not of type string or categorical."
39
- value_curve?:
40
- type: CurveValues
41
- desc: "The values for the curve in two lists"
42
-
43
- Arguments:
44
- type: Object
45
- properties:
46
- output_data:
47
- type: List<RecipeOutputValue>
48
- desc: "The outputs to set. Must be at most 100 entries long"
49
-
50
- Data:
51
- type: response.Response
52
- properties:
@@ -1,62 +0,0 @@
1
- $endpoint:
2
- is_sdk: true
3
- method: post
4
- path: ${external}/recipes/set_recipe_tags
5
- function: main.site.app.external.recipes.set_recipe_tags.set_recipe_tags
6
- desc: Modifies recipes tags for a recipe
7
-
8
- RecipeTagUpdateType:
9
- type: StringEnum
10
- values:
11
- - append
12
- - override
13
- - remove
14
-
15
- RecipeTagUpdateBase:
16
- type: Object
17
- properties:
18
- type:
19
- type: RecipeTagUpdateType
20
-
21
- RecipeTagAppend:
22
- type: RecipeTagUpdateBase
23
- properties:
24
- type:
25
- type: Literal<RecipeTagUpdateType.append>
26
- recipe_tag_ids:
27
- type: List<ObjectId>
28
-
29
- RecipeTagRemove:
30
- type: RecipeTagUpdateBase
31
- properties:
32
- type:
33
- type: Literal<RecipeTagUpdateType.remove>
34
- recipe_tag_ids:
35
- type: List<ObjectId>
36
-
37
- RecipeTagOverride:
38
- type: RecipeTagUpdateBase
39
- properties:
40
- type:
41
- type: Literal<RecipeTagUpdateType.override>
42
- recipe_tag_ids:
43
- type: List<ObjectId>
44
-
45
-
46
- RecipeTagUpdate:
47
- type: Alias
48
- alias: Union<RecipeTagAppend, RecipeTagRemove, RecipeTagOverride>
49
-
50
-
51
- Arguments:
52
- type: Object
53
- properties:
54
- recipe_key:
55
- type: identifier.IdentifierKey
56
- desc: Identifier for the recipe
57
- recipe_tag_update:
58
- type: RecipeTagUpdate
59
- desc: The update to perform on the recipe tags
60
-
61
- Data:
62
- type: Object
@@ -1,18 +0,0 @@
1
- $endpoint:
2
- is_sdk: true
3
- method: post
4
- path: ${external}/triggers/run_trigger
5
- function: main.site.app.external.triggers.run_trigger.run_trigger
6
- desc: "Runs a trigger. Requires admin access"
7
-
8
- Arguments:
9
- type: Object
10
- properties:
11
- entity?:
12
- type: entity.Entity
13
- trigger_ref_name:
14
- type: String
15
-
16
- Data:
17
- type: response.Response
18
- properties:
@@ -1,89 +0,0 @@
1
- # TODO: move to type spec
2
-
3
-
4
- from dataclasses import dataclass
5
- from enum import StrEnum
6
- from typing import Literal
7
-
8
-
9
- class JobDefinitionType(StrEnum):
10
- CRON = "cron"
11
- # also imagine other job types like webhook-triggered or sftp-triggered,
12
- # manual, etc
13
-
14
-
15
- class JobExecutorType(StrEnum):
16
- SCRIPT = "script"
17
- # also imagine builtin executors like 'sftp_sync'
18
-
19
-
20
- class AuthRetrievalType(StrEnum):
21
- ENV = "env"
22
- # also imagine secrets manager, keyvault, etc
23
-
24
-
25
- @dataclass
26
- class JobExecutorBase:
27
- type: JobExecutorType
28
-
29
-
30
- @dataclass
31
- class JobExecutorScript(JobExecutorBase):
32
- type: Literal[JobExecutorType.SCRIPT]
33
- import_path: str
34
-
35
-
36
- JobExecutor = JobExecutorScript
37
-
38
-
39
- @dataclass
40
- class JobDefinitionBase:
41
- id: str
42
- name: str
43
-
44
-
45
- @dataclass
46
- class CronJobDefinition(JobDefinitionBase):
47
- type: Literal[JobDefinitionType.CRON]
48
- cron_spec: str
49
- # Here we assert that the executor has to be a script, but we could add
50
- # other builtin executor types that cron jobs can support later
51
- executor: JobExecutorScript
52
-
53
-
54
- JobDefinition = CronJobDefinition
55
-
56
-
57
- @dataclass
58
- class AuthRetrievalBase:
59
- type: AuthRetrievalType
60
-
61
-
62
- @dataclass
63
- class AuthRetrievalEnv:
64
- # We don't really need any extra info here, we can enforce that the auth
65
- # keys are named like UNC_PROFILE_{profile name}_API_SECRET_KEY. For
66
- # supporting pulling secrets from secrets manager etc it will be nice to
67
- # use dataclass properties to get the secret name, region etc.
68
- type: Literal[AuthRetrievalType.ENV]
69
-
70
-
71
- AuthRetrieval = AuthRetrievalEnv
72
-
73
-
74
- @dataclass
75
- class ProfileDefinition:
76
- # profile name (expected to be something like customer_name) will be
77
- # obtained from the folder name instead of specified here. Forces jobs to
78
- # be organized nicely in folders that separate their identities.
79
- auth_retrieval: AuthRetrieval
80
- base_url: str
81
- jobs: list[JobDefinition]
82
-
83
-
84
- @dataclass
85
- class ProfileMetadata:
86
- # supplied by inspecting the folder name that the profile is in
87
- name: str
88
- base_url: str
89
- auth_retrieval: AuthRetrieval