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.
- docs/conf.py +60 -8
- docs/index.md +107 -4
- docs/integration_examples/create_ingredient.md +43 -0
- docs/integration_examples/create_output.md +56 -0
- docs/integration_examples/index.md +6 -0
- docs/justfile +2 -2
- docs/requirements.txt +7 -5
- examples/async_batch.py +5 -6
- examples/basic_auth.py +7 -0
- examples/create_entity.py +4 -6
- examples/create_ingredient_sdk.py +34 -0
- examples/download_files.py +26 -0
- examples/edit_recipe_inputs.py +50 -0
- examples/integration-server/jobs/materials_auto/concurrent_cron.py +11 -0
- examples/integration-server/jobs/materials_auto/example_cron.py +21 -0
- examples/integration-server/jobs/materials_auto/example_http.py +47 -0
- examples/integration-server/jobs/materials_auto/example_instrument.py +100 -0
- examples/integration-server/jobs/materials_auto/example_parse.py +140 -0
- examples/integration-server/jobs/materials_auto/example_predictions.py +61 -0
- examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +39 -0
- examples/integration-server/jobs/materials_auto/example_wh.py +23 -0
- examples/integration-server/jobs/materials_auto/profile.yaml +104 -0
- examples/integration-server/pyproject.toml +224 -0
- examples/invoke_uploader.py +26 -0
- examples/oauth.py +7 -0
- examples/set_recipe_metadata_file.py +40 -0
- examples/set_recipe_output_file_sdk.py +26 -0
- examples/upload_files.py +2 -3
- pkgs/argument_parser/__init__.py +9 -0
- pkgs/argument_parser/_is_namedtuple.py +3 -0
- pkgs/argument_parser/argument_parser.py +295 -74
- pkgs/argument_parser/case_convert.py +4 -3
- pkgs/filesystem_utils/__init__.py +20 -0
- pkgs/filesystem_utils/_blob_session.py +144 -0
- pkgs/filesystem_utils/_gdrive_session.py +309 -0
- pkgs/filesystem_utils/_local_session.py +69 -0
- pkgs/filesystem_utils/_s3_session.py +118 -0
- pkgs/filesystem_utils/_sftp_session.py +151 -0
- pkgs/filesystem_utils/file_type_utils.py +91 -0
- pkgs/filesystem_utils/filesystem_session.py +39 -0
- pkgs/py.typed +0 -0
- pkgs/serialization/__init__.py +8 -1
- pkgs/serialization/annotation.py +64 -0
- pkgs/serialization/missing_sentry.py +1 -1
- pkgs/serialization/opaque_key.py +1 -1
- pkgs/serialization/serial_alias.py +47 -0
- pkgs/serialization/serial_class.py +69 -54
- pkgs/serialization/serial_generic.py +16 -0
- pkgs/serialization/serial_union.py +84 -0
- pkgs/serialization/yaml.py +57 -0
- pkgs/serialization_util/__init__.py +7 -7
- pkgs/serialization_util/convert_to_snakecase.py +27 -0
- pkgs/serialization_util/dataclasses.py +14 -0
- pkgs/serialization_util/serialization_helpers.py +117 -71
- pkgs/type_spec/actions_registry/__main__.py +0 -4
- pkgs/type_spec/actions_registry/emit_typescript.py +5 -5
- pkgs/type_spec/builder.py +438 -109
- pkgs/type_spec/builder_types.py +9 -0
- pkgs/type_spec/config.py +52 -24
- pkgs/type_spec/cross_output_links.py +99 -0
- pkgs/type_spec/emit_io_ts.py +1 -1
- pkgs/type_spec/emit_open_api.py +160 -41
- pkgs/type_spec/emit_open_api_util.py +13 -7
- pkgs/type_spec/emit_python.py +450 -136
- pkgs/type_spec/emit_typescript.py +117 -250
- pkgs/type_spec/emit_typescript_util.py +293 -4
- pkgs/type_spec/load_types.py +20 -5
- pkgs/type_spec/non_discriminated_union_exceptions.py +14 -0
- pkgs/type_spec/open_api_util.py +29 -4
- pkgs/type_spec/parts/base.py.prepart +13 -10
- pkgs/type_spec/parts/base.ts.prepart +4 -0
- pkgs/type_spec/type_info/__main__.py +3 -1
- pkgs/type_spec/type_info/emit_type_info.py +161 -32
- pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
- pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +308 -0
- pkgs/type_spec/util.py +4 -4
- pkgs/type_spec/value_spec/__main__.py +27 -10
- pkgs/type_spec/value_spec/convert_type.py +21 -1
- pkgs/type_spec/value_spec/emit_python.py +25 -7
- pkgs/type_spec/value_spec/types.py +1 -1
- uncountable/__init__.py +1 -2
- uncountable/core/__init__.py +11 -3
- uncountable/core/async_batch.py +16 -1
- uncountable/core/client.py +247 -52
- uncountable/core/environment.py +41 -0
- uncountable/core/file_upload.py +67 -22
- uncountable/core/types.py +8 -13
- uncountable/integration/cli.py +142 -0
- uncountable/integration/construct_client.py +43 -27
- uncountable/integration/cron.py +12 -11
- uncountable/integration/db/connect.py +12 -2
- uncountable/integration/db/session.py +25 -0
- uncountable/integration/entrypoint.py +4 -34
- uncountable/integration/executors/executors.py +147 -0
- uncountable/integration/executors/generic_upload_executor.py +336 -0
- uncountable/integration/executors/script_executor.py +15 -9
- uncountable/integration/http_server/__init__.py +5 -0
- uncountable/integration/http_server/types.py +69 -0
- uncountable/integration/job.py +246 -19
- uncountable/integration/queue_runner/__init__.py +0 -0
- uncountable/integration/queue_runner/command_server/__init__.py +28 -0
- uncountable/integration/queue_runner/command_server/command_client.py +133 -0
- uncountable/integration/queue_runner/command_server/command_server.py +142 -0
- uncountable/integration/queue_runner/command_server/constants.py +4 -0
- uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
- uncountable/integration/queue_runner/command_server/protocol/command_server.proto +58 -0
- uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +57 -0
- uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +114 -0
- uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +264 -0
- uncountable/integration/queue_runner/command_server/types.py +75 -0
- uncountable/integration/queue_runner/datastore/__init__.py +3 -0
- uncountable/integration/queue_runner/datastore/datastore_sqlite.py +250 -0
- uncountable/integration/queue_runner/datastore/interface.py +29 -0
- uncountable/integration/queue_runner/datastore/model.py +24 -0
- uncountable/integration/queue_runner/job_scheduler.py +200 -0
- uncountable/integration/queue_runner/queue_runner.py +34 -0
- uncountable/integration/queue_runner/types.py +7 -0
- uncountable/integration/queue_runner/worker.py +116 -0
- uncountable/integration/scan_profiles.py +67 -0
- uncountable/integration/scheduler.py +199 -0
- uncountable/integration/secret_retrieval/__init__.py +3 -0
- uncountable/integration/secret_retrieval/retrieve_secret.py +93 -0
- uncountable/integration/server.py +103 -54
- uncountable/integration/telemetry.py +251 -0
- uncountable/integration/webhook_server/entrypoint.py +97 -0
- uncountable/types/__init__.py +149 -30
- uncountable/types/api/batch/execute_batch.py +16 -9
- uncountable/types/api/batch/execute_batch_load_async.py +13 -7
- uncountable/types/api/chemical/convert_chemical_formats.py +20 -8
- uncountable/types/api/condition_parameters/__init__.py +1 -0
- uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
- uncountable/types/api/entity/create_entities.py +24 -12
- uncountable/types/api/entity/create_entity.py +22 -13
- uncountable/types/api/entity/create_or_update_entity.py +48 -0
- uncountable/types/api/entity/export_entities.py +59 -0
- uncountable/types/api/entity/get_entities_data.py +18 -9
- uncountable/types/api/entity/grant_entity_permissions.py +48 -0
- uncountable/types/api/entity/list_aggregate.py +79 -0
- uncountable/types/api/entity/list_entities.py +53 -14
- uncountable/types/api/entity/lock_entity.py +45 -0
- uncountable/types/api/entity/lookup_entity.py +116 -0
- uncountable/types/api/entity/resolve_entity_ids.py +19 -10
- uncountable/types/api/entity/set_entity_field_values.py +44 -0
- uncountable/types/api/entity/set_values.py +15 -8
- uncountable/types/api/entity/transition_entity_phase.py +27 -12
- uncountable/types/api/entity/unlock_entity.py +44 -0
- uncountable/types/api/equipment/__init__.py +1 -0
- uncountable/types/api/equipment/associate_equipment_input.py +43 -0
- uncountable/types/api/field_options/__init__.py +1 -0
- uncountable/types/api/field_options/upsert_field_options.py +55 -0
- uncountable/types/api/files/__init__.py +1 -0
- uncountable/types/api/files/download_file.py +77 -0
- uncountable/types/api/id_source/list_id_source.py +20 -11
- uncountable/types/api/id_source/match_id_source.py +15 -10
- uncountable/types/api/input_groups/get_input_group_names.py +16 -7
- uncountable/types/api/inputs/create_inputs.py +28 -14
- uncountable/types/api/inputs/get_input_data.py +34 -16
- uncountable/types/api/inputs/get_input_names.py +19 -10
- uncountable/types/api/inputs/get_inputs_data.py +29 -11
- uncountable/types/api/inputs/set_input_attribute_values.py +16 -10
- uncountable/types/api/inputs/set_input_category.py +44 -0
- uncountable/types/api/inputs/set_input_subcategories.py +45 -0
- uncountable/types/api/inputs/set_intermediate_type.py +50 -0
- uncountable/types/api/integrations/__init__.py +1 -0
- uncountable/types/api/integrations/publish_realtime_data.py +41 -0
- uncountable/types/api/integrations/push_notification.py +49 -0
- uncountable/types/api/integrations/register_sockets_token.py +41 -0
- uncountable/types/api/listing/__init__.py +1 -0
- uncountable/types/api/listing/fetch_listing.py +58 -0
- uncountable/types/api/material_families/__init__.py +1 -0
- uncountable/types/api/material_families/update_entity_material_families.py +47 -0
- uncountable/types/api/notebooks/__init__.py +1 -0
- uncountable/types/api/notebooks/add_notebook_content.py +119 -0
- uncountable/types/api/outputs/get_output_data.py +32 -17
- uncountable/types/api/outputs/get_output_names.py +18 -9
- uncountable/types/api/outputs/get_output_organization.py +173 -0
- uncountable/types/api/outputs/resolve_output_conditions.py +23 -11
- uncountable/types/api/permissions/set_core_permissions.py +31 -15
- uncountable/types/api/project/get_projects.py +20 -11
- uncountable/types/api/project/get_projects_data.py +23 -14
- uncountable/types/api/recipe_links/create_recipe_link.py +17 -10
- uncountable/types/api/recipe_links/remove_recipe_link.py +45 -0
- uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +19 -10
- uncountable/types/api/recipes/add_recipe_to_project.py +42 -0
- uncountable/types/api/recipes/add_time_series_data.py +64 -0
- uncountable/types/api/recipes/archive_recipes.py +14 -7
- uncountable/types/api/recipes/associate_recipe_as_input.py +16 -8
- uncountable/types/api/recipes/associate_recipe_as_lot.py +14 -7
- uncountable/types/api/recipes/clear_recipe_outputs.py +42 -0
- uncountable/types/api/recipes/create_mix_order.py +44 -0
- uncountable/types/api/recipes/create_recipe.py +21 -14
- uncountable/types/api/recipes/create_recipes.py +25 -13
- uncountable/types/api/recipes/disassociate_recipe_as_input.py +14 -7
- uncountable/types/api/recipes/edit_recipe_inputs.py +208 -19
- uncountable/types/api/recipes/get_column_calculation_values.py +57 -0
- uncountable/types/api/recipes/get_curve.py +15 -9
- uncountable/types/api/recipes/get_recipe_calculations.py +17 -11
- uncountable/types/api/recipes/get_recipe_links.py +14 -8
- uncountable/types/api/recipes/get_recipe_names.py +16 -7
- uncountable/types/api/recipes/get_recipe_output_metadata.py +16 -10
- uncountable/types/api/recipes/get_recipes_data.py +96 -45
- uncountable/types/api/recipes/lock_recipes.py +64 -0
- uncountable/types/api/recipes/remove_recipe_from_project.py +42 -0
- uncountable/types/api/recipes/set_recipe_inputs.py +19 -13
- uncountable/types/api/recipes/set_recipe_metadata.py +14 -7
- uncountable/types/api/recipes/set_recipe_output_annotations.py +114 -0
- uncountable/types/api/recipes/set_recipe_output_file.py +55 -0
- uncountable/types/api/recipes/set_recipe_outputs.py +40 -15
- uncountable/types/api/recipes/set_recipe_tags.py +30 -13
- uncountable/types/api/recipes/set_recipe_total.py +59 -0
- uncountable/types/api/recipes/unarchive_recipes.py +41 -0
- uncountable/types/api/recipes/unlock_recipes.py +51 -0
- uncountable/types/api/runsheet/__init__.py +1 -0
- uncountable/types/api/runsheet/complete_async_upload.py +41 -0
- uncountable/types/api/triggers/run_trigger.py +15 -8
- uncountable/types/api/uploader/__init__.py +1 -0
- uncountable/types/api/uploader/complete_async_parse.py +46 -0
- uncountable/types/api/uploader/invoke_uploader.py +46 -0
- uncountable/types/api/user/__init__.py +1 -0
- uncountable/types/api/user/get_current_user_info.py +40 -0
- uncountable/types/async_batch.py +8 -52
- uncountable/types/async_batch_processor.py +694 -18
- uncountable/types/async_batch_t.py +108 -0
- uncountable/types/async_jobs.py +8 -0
- uncountable/types/async_jobs_t.py +52 -0
- uncountable/types/auth_retrieval.py +11 -0
- uncountable/types/auth_retrieval_t.py +75 -0
- uncountable/types/base.py +5 -80
- uncountable/types/base_t.py +87 -0
- uncountable/types/calculations.py +3 -19
- uncountable/types/calculations_t.py +26 -0
- uncountable/types/chemical_structure.py +3 -23
- uncountable/types/chemical_structure_t.py +28 -0
- uncountable/types/client_base.py +1170 -88
- uncountable/types/client_config.py +8 -0
- uncountable/types/client_config_t.py +36 -0
- uncountable/types/curves.py +5 -43
- uncountable/types/curves_t.py +50 -0
- uncountable/types/data.py +12 -0
- uncountable/types/data_t.py +103 -0
- uncountable/types/entity.py +8 -270
- uncountable/types/entity_t.py +446 -0
- uncountable/types/experiment_groups.py +3 -19
- uncountable/types/experiment_groups_t.py +26 -0
- uncountable/types/exports.py +8 -0
- uncountable/types/exports_t.py +34 -0
- uncountable/types/field_values.py +25 -61
- uncountable/types/field_values_t.py +302 -0
- uncountable/types/fields.py +3 -20
- uncountable/types/fields_t.py +27 -0
- uncountable/types/generic_upload.py +14 -0
- uncountable/types/generic_upload_t.py +119 -0
- uncountable/types/id_source.py +7 -45
- uncountable/types/id_source_t.py +68 -0
- uncountable/types/identifier.py +6 -50
- uncountable/types/identifier_t.py +62 -0
- uncountable/types/input_attributes.py +3 -25
- uncountable/types/input_attributes_t.py +29 -0
- uncountable/types/inputs.py +6 -57
- uncountable/types/inputs_t.py +82 -0
- uncountable/types/integration_server.py +8 -0
- uncountable/types/integration_server_t.py +46 -0
- uncountable/types/integration_session.py +10 -0
- uncountable/types/integration_session_t.py +60 -0
- uncountable/types/integrations.py +10 -0
- uncountable/types/integrations_t.py +62 -0
- uncountable/types/job_definition.py +28 -0
- uncountable/types/job_definition_t.py +285 -0
- uncountable/types/listing.py +9 -0
- uncountable/types/listing_t.py +51 -0
- uncountable/types/notices.py +8 -0
- uncountable/types/notices_t.py +37 -0
- uncountable/types/notifications.py +11 -0
- uncountable/types/notifications_t.py +74 -0
- uncountable/types/outputs.py +3 -22
- uncountable/types/outputs_t.py +29 -0
- uncountable/types/overrides.py +9 -0
- uncountable/types/overrides_t.py +49 -0
- uncountable/types/permissions.py +3 -42
- uncountable/types/permissions_t.py +45 -0
- uncountable/types/phases.py +3 -19
- uncountable/types/phases_t.py +26 -0
- uncountable/types/post_base.py +3 -26
- uncountable/types/post_base_t.py +29 -0
- uncountable/types/queued_job.py +17 -0
- uncountable/types/queued_job_t.py +140 -0
- uncountable/types/recipe_identifiers.py +7 -58
- uncountable/types/recipe_identifiers_t.py +75 -0
- uncountable/types/recipe_inputs.py +4 -26
- uncountable/types/recipe_inputs_t.py +29 -0
- uncountable/types/recipe_links.py +4 -46
- uncountable/types/recipe_links_t.py +53 -0
- uncountable/types/recipe_metadata.py +5 -48
- uncountable/types/recipe_metadata_t.py +57 -0
- uncountable/types/recipe_output_metadata.py +3 -20
- uncountable/types/recipe_output_metadata_t.py +27 -0
- uncountable/types/recipe_tags.py +3 -19
- uncountable/types/recipe_tags_t.py +26 -0
- uncountable/types/recipe_workflow_steps.py +9 -73
- uncountable/types/recipe_workflow_steps_t.py +95 -0
- uncountable/types/recipes.py +7 -0
- uncountable/types/recipes_t.py +25 -0
- uncountable/types/response.py +3 -21
- uncountable/types/response_t.py +26 -0
- uncountable/types/secret_retrieval.py +11 -0
- uncountable/types/secret_retrieval_t.py +75 -0
- uncountable/types/sockets.py +20 -0
- uncountable/types/sockets_t.py +169 -0
- uncountable/types/structured_filters.py +25 -0
- uncountable/types/structured_filters_t.py +248 -0
- uncountable/types/units.py +3 -19
- uncountable/types/units_t.py +26 -0
- uncountable/types/uploader.py +24 -0
- uncountable/types/uploader_t.py +222 -0
- uncountable/types/users.py +3 -20
- uncountable/types/users_t.py +27 -0
- uncountable/types/webhook_job.py +9 -0
- uncountable/types/webhook_job_t.py +48 -0
- uncountable/types/workflows.py +4 -28
- uncountable/types/workflows_t.py +38 -0
- uncountablepythonsdk-0.0.131.dist-info/METADATA +64 -0
- uncountablepythonsdk-0.0.131.dist-info/RECORD +363 -0
- {UncountablePythonSDK-0.0.24.dist-info → uncountablepythonsdk-0.0.131.dist-info}/WHEEL +1 -1
- {UncountablePythonSDK-0.0.24.dist-info → uncountablepythonsdk-0.0.131.dist-info}/top_level.txt +0 -1
- UncountablePythonSDK-0.0.24.dist-info/METADATA +0 -47
- UncountablePythonSDK-0.0.24.dist-info/RECORD +0 -216
- docs/quickstart.md +0 -19
- examples/recipe-import/importer.py +0 -39
- type_spec/external/api/batch/execute_batch.yaml +0 -56
- type_spec/external/api/batch/execute_batch_load_async.yaml +0 -18
- type_spec/external/api/chemical/convert_chemical_formats.yaml +0 -33
- type_spec/external/api/entity/create_entities.yaml +0 -45
- type_spec/external/api/entity/create_entity.yaml +0 -51
- type_spec/external/api/entity/get_entities_data.yaml +0 -29
- type_spec/external/api/entity/list_entities.yaml +0 -52
- type_spec/external/api/entity/resolve_entity_ids.yaml +0 -29
- type_spec/external/api/entity/set_values.yaml +0 -18
- type_spec/external/api/entity/transition_entity_phase.yaml +0 -44
- type_spec/external/api/id_source/list_id_source.yaml +0 -35
- type_spec/external/api/id_source/match_id_source.yaml +0 -32
- type_spec/external/api/input_groups/get_input_group_names.yaml +0 -29
- type_spec/external/api/inputs/create_inputs.yaml +0 -48
- type_spec/external/api/inputs/get_input_data.yaml +0 -95
- type_spec/external/api/inputs/get_input_names.yaml +0 -38
- type_spec/external/api/inputs/get_inputs_data.yaml +0 -82
- type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -33
- type_spec/external/api/outputs/get_output_data.yaml +0 -92
- type_spec/external/api/outputs/get_output_names.yaml +0 -35
- type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -50
- type_spec/external/api/permissions/set_core_permissions.yaml +0 -69
- type_spec/external/api/project/get_projects.yaml +0 -42
- type_spec/external/api/project/get_projects_data.yaml +0 -50
- type_spec/external/api/recipe_links/create_recipe_link.yaml +0 -25
- type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -41
- type_spec/external/api/recipes/archive_recipes.yaml +0 -20
- type_spec/external/api/recipes/associate_recipe_as_input.yaml +0 -19
- type_spec/external/api/recipes/associate_recipe_as_lot.yaml +0 -19
- type_spec/external/api/recipes/create_recipe.yaml +0 -39
- type_spec/external/api/recipes/create_recipes.yaml +0 -47
- type_spec/external/api/recipes/disassociate_recipe_as_input.yaml +0 -16
- type_spec/external/api/recipes/edit_recipe_inputs.yaml +0 -85
- type_spec/external/api/recipes/get_curve.yaml +0 -21
- type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -39
- type_spec/external/api/recipes/get_recipe_links.yaml +0 -26
- type_spec/external/api/recipes/get_recipe_names.yaml +0 -29
- type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -36
- type_spec/external/api/recipes/get_recipes_data.yaml +0 -244
- type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -42
- type_spec/external/api/recipes/set_recipe_metadata.yaml +0 -20
- type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -52
- type_spec/external/api/recipes/set_recipe_tags.yaml +0 -62
- type_spec/external/api/triggers/run_trigger.yaml +0 -18
- 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:
|
uncountable/integration/types.py
DELETED
|
@@ -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
|