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,6 +1,5 @@
|
|
|
1
1
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
-
#
|
|
3
|
-
# ruff: noqa: E402
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
4
3
|
# fmt: off
|
|
5
4
|
# isort: skip_file
|
|
6
5
|
# ruff: noqa: PLR0904
|
|
@@ -8,19 +7,42 @@ from __future__ import annotations
|
|
|
8
7
|
import typing # noqa: F401
|
|
9
8
|
import datetime # noqa: F401
|
|
10
9
|
from decimal import Decimal # noqa: F401
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
import uncountable.types.api.equipment.associate_equipment_input as associate_equipment_input_t
|
|
11
|
+
import uncountable.types.api.recipes.associate_recipe_as_input as associate_recipe_as_input_t
|
|
12
|
+
import uncountable.types.api.recipes.associate_recipe_as_lot as associate_recipe_as_lot_t
|
|
13
|
+
from uncountable.types import async_batch_t
|
|
14
|
+
from uncountable.types import base_t
|
|
15
|
+
import uncountable.types.api.recipes.clear_recipe_outputs as clear_recipe_outputs_t
|
|
16
|
+
from uncountable.types import client_config_t
|
|
17
|
+
import uncountable.types.api.uploader.complete_async_parse as complete_async_parse_t
|
|
18
|
+
import uncountable.types.api.runsheet.complete_async_upload as complete_async_upload_t
|
|
19
|
+
import uncountable.types.api.recipes.create_mix_order as create_mix_order_t
|
|
20
|
+
import uncountable.types.api.entity.create_or_update_entity as create_or_update_entity_t
|
|
13
21
|
import uncountable.types.api.recipes.create_recipe as create_recipe_t
|
|
14
22
|
import uncountable.types.api.recipes.edit_recipe_inputs as edit_recipe_inputs_t
|
|
15
|
-
from uncountable.types import
|
|
16
|
-
from uncountable.types import
|
|
17
|
-
from uncountable.types import
|
|
18
|
-
|
|
23
|
+
from uncountable.types import entity_t
|
|
24
|
+
from uncountable.types import field_values_t
|
|
25
|
+
from uncountable.types import generic_upload_t
|
|
26
|
+
import uncountable.types.api.entity.grant_entity_permissions as grant_entity_permissions_t
|
|
27
|
+
from uncountable.types import identifier_t
|
|
28
|
+
import uncountable.types.api.uploader.invoke_uploader as invoke_uploader_t
|
|
29
|
+
import uncountable.types.api.recipes.lock_recipes as lock_recipes_t
|
|
30
|
+
import uncountable.types.api.entity.lookup_entity as lookup_entity_t
|
|
31
|
+
from uncountable.types import notices_t
|
|
32
|
+
from uncountable.types import notifications_t
|
|
33
|
+
import uncountable.types.api.integrations.push_notification as push_notification_t
|
|
34
|
+
from uncountable.types import recipe_identifiers_t
|
|
35
|
+
from uncountable.types import recipe_metadata_t
|
|
36
|
+
from uncountable.types import recipe_workflow_steps_t
|
|
37
|
+
import uncountable.types.api.entity.set_entity_field_values as set_entity_field_values_t
|
|
19
38
|
import uncountable.types.api.recipes.set_recipe_metadata as set_recipe_metadata_t
|
|
39
|
+
import uncountable.types.api.entity.transition_entity_phase as transition_entity_phase_t
|
|
40
|
+
import uncountable.types.api.recipes.unlock_recipes as unlock_recipes_t
|
|
41
|
+
from uncountable.types import uploader_t
|
|
42
|
+
import uncountable.types.api.condition_parameters.upsert_condition_match as upsert_condition_match_t
|
|
20
43
|
import uuid
|
|
21
44
|
from abc import ABC, abstractmethod
|
|
22
|
-
from
|
|
23
|
-
from pkgs.serialization_util.serialization_helpers import serialize_for_api
|
|
45
|
+
from pkgs.serialization_util import serialize_for_api
|
|
24
46
|
|
|
25
47
|
|
|
26
48
|
class AsyncBatchProcessorBase(ABC):
|
|
@@ -32,22 +54,314 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
32
54
|
def send(self) -> base_t.ObjectId:
|
|
33
55
|
...
|
|
34
56
|
|
|
57
|
+
def associate_equipment_input(
|
|
58
|
+
self,
|
|
59
|
+
*,
|
|
60
|
+
equipment_key: identifier_t.IdentifierKey,
|
|
61
|
+
material_family_ids: list[base_t.ObjectId],
|
|
62
|
+
depends_on: list[str] | None = None,
|
|
63
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
64
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
65
|
+
"""Create or return the input association for equipment
|
|
66
|
+
|
|
67
|
+
:param equipment_key: Identifier of the equipment to associate
|
|
68
|
+
:param material_family_ids: The list of material families to add the input to. This must be non-empty
|
|
69
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
70
|
+
"""
|
|
71
|
+
args = associate_equipment_input_t.Arguments(
|
|
72
|
+
equipment_key=equipment_key,
|
|
73
|
+
material_family_ids=material_family_ids,
|
|
74
|
+
)
|
|
75
|
+
json_data = serialize_for_api(args)
|
|
76
|
+
|
|
77
|
+
batch_reference = str(uuid.uuid4())
|
|
78
|
+
|
|
79
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
80
|
+
path=async_batch_t.AsyncBatchRequestPath.ASSOCIATE_EQUIPMENT_INPUT,
|
|
81
|
+
data=json_data,
|
|
82
|
+
depends_on=depends_on,
|
|
83
|
+
batch_reference=batch_reference,
|
|
84
|
+
)
|
|
85
|
+
|
|
86
|
+
self._enqueue(req)
|
|
87
|
+
|
|
88
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
89
|
+
path=req.path,
|
|
90
|
+
batch_reference=req.batch_reference,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
def associate_recipe_as_input(
|
|
94
|
+
self,
|
|
95
|
+
*,
|
|
96
|
+
recipe_key: identifier_t.IdentifierKey,
|
|
97
|
+
input_key: identifier_t.IdentifierKey | None = None,
|
|
98
|
+
show_in_listings: bool | None = None,
|
|
99
|
+
depends_on: list[str] | None = None,
|
|
100
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
101
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
102
|
+
"""Create or return the input association for a recipe
|
|
103
|
+
|
|
104
|
+
:param recipe_key: Identifier for the recipe
|
|
105
|
+
:param input_key: Identifier for an input to use for the association. Optionally supplied. If not supplied, one is created
|
|
106
|
+
:param show_in_listings: After associating the input should it be present in listings
|
|
107
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
108
|
+
"""
|
|
109
|
+
args = associate_recipe_as_input_t.Arguments(
|
|
110
|
+
recipe_key=recipe_key,
|
|
111
|
+
input_key=input_key,
|
|
112
|
+
show_in_listings=show_in_listings,
|
|
113
|
+
)
|
|
114
|
+
json_data = serialize_for_api(args)
|
|
115
|
+
|
|
116
|
+
batch_reference = str(uuid.uuid4())
|
|
117
|
+
|
|
118
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
119
|
+
path=async_batch_t.AsyncBatchRequestPath.ASSOCIATE_RECIPE_AS_INPUT,
|
|
120
|
+
data=json_data,
|
|
121
|
+
depends_on=depends_on,
|
|
122
|
+
batch_reference=batch_reference,
|
|
123
|
+
)
|
|
124
|
+
|
|
125
|
+
self._enqueue(req)
|
|
126
|
+
|
|
127
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
128
|
+
path=req.path,
|
|
129
|
+
batch_reference=req.batch_reference,
|
|
130
|
+
)
|
|
131
|
+
|
|
132
|
+
def associate_recipe_as_lot(
|
|
133
|
+
self,
|
|
134
|
+
*,
|
|
135
|
+
recipe_key: identifier_t.IdentifierKey,
|
|
136
|
+
ingredient_key: identifier_t.IdentifierKey,
|
|
137
|
+
depends_on: list[str] | None = None,
|
|
138
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
139
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
140
|
+
"""Create a new lot association for the provided recipe with the provided ingredient
|
|
141
|
+
|
|
142
|
+
:param recipe_key: Identifier for the recipe
|
|
143
|
+
:param ingredient_key: Identifier for the ingredient
|
|
144
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
145
|
+
"""
|
|
146
|
+
args = associate_recipe_as_lot_t.Arguments(
|
|
147
|
+
recipe_key=recipe_key,
|
|
148
|
+
ingredient_key=ingredient_key,
|
|
149
|
+
)
|
|
150
|
+
json_data = serialize_for_api(args)
|
|
151
|
+
|
|
152
|
+
batch_reference = str(uuid.uuid4())
|
|
153
|
+
|
|
154
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
155
|
+
path=async_batch_t.AsyncBatchRequestPath.ASSOCIATE_RECIPE_AS_LOT,
|
|
156
|
+
data=json_data,
|
|
157
|
+
depends_on=depends_on,
|
|
158
|
+
batch_reference=batch_reference,
|
|
159
|
+
)
|
|
160
|
+
|
|
161
|
+
self._enqueue(req)
|
|
162
|
+
|
|
163
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
164
|
+
path=req.path,
|
|
165
|
+
batch_reference=req.batch_reference,
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
def clear_recipe_outputs(
|
|
169
|
+
self,
|
|
170
|
+
*,
|
|
171
|
+
recipe_key: identifier_t.IdentifierKey,
|
|
172
|
+
depends_on: list[str] | None = None,
|
|
173
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
174
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
175
|
+
"""Clears all output values & output metadata for a given recipe
|
|
176
|
+
|
|
177
|
+
:param recipe_key: The identifier of the recipe
|
|
178
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
179
|
+
"""
|
|
180
|
+
args = clear_recipe_outputs_t.Arguments(
|
|
181
|
+
recipe_key=recipe_key,
|
|
182
|
+
)
|
|
183
|
+
json_data = serialize_for_api(args)
|
|
184
|
+
|
|
185
|
+
batch_reference = str(uuid.uuid4())
|
|
186
|
+
|
|
187
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
188
|
+
path=async_batch_t.AsyncBatchRequestPath.CLEAR_RECIPE_OUTPUTS,
|
|
189
|
+
data=json_data,
|
|
190
|
+
depends_on=depends_on,
|
|
191
|
+
batch_reference=batch_reference,
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
self._enqueue(req)
|
|
195
|
+
|
|
196
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
197
|
+
path=req.path,
|
|
198
|
+
batch_reference=req.batch_reference,
|
|
199
|
+
)
|
|
200
|
+
|
|
201
|
+
def complete_async_parse(
|
|
202
|
+
self,
|
|
203
|
+
*,
|
|
204
|
+
parsed_file_data: list[uploader_t.ParsedFileData],
|
|
205
|
+
async_job_key: identifier_t.IdentifierKey,
|
|
206
|
+
upload_destination: generic_upload_t.UploadDestinationRecipe,
|
|
207
|
+
depends_on: list[str] | None = None,
|
|
208
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
209
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
210
|
+
"""Parses uploaded files asynchronously
|
|
211
|
+
|
|
212
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
213
|
+
"""
|
|
214
|
+
args = complete_async_parse_t.Arguments(
|
|
215
|
+
parsed_file_data=parsed_file_data,
|
|
216
|
+
async_job_key=async_job_key,
|
|
217
|
+
upload_destination=upload_destination,
|
|
218
|
+
)
|
|
219
|
+
json_data = serialize_for_api(args)
|
|
220
|
+
|
|
221
|
+
batch_reference = str(uuid.uuid4())
|
|
222
|
+
|
|
223
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
224
|
+
path=async_batch_t.AsyncBatchRequestPath.COMPLETE_ASYNC_PARSE,
|
|
225
|
+
data=json_data,
|
|
226
|
+
depends_on=depends_on,
|
|
227
|
+
batch_reference=batch_reference,
|
|
228
|
+
)
|
|
229
|
+
|
|
230
|
+
self._enqueue(req)
|
|
231
|
+
|
|
232
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
233
|
+
path=req.path,
|
|
234
|
+
batch_reference=req.batch_reference,
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
def complete_async_upload(
|
|
238
|
+
self,
|
|
239
|
+
*,
|
|
240
|
+
async_job_id: base_t.ObjectId,
|
|
241
|
+
file_id: base_t.ObjectId,
|
|
242
|
+
depends_on: list[str] | None = None,
|
|
243
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
244
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
245
|
+
"""Processes an file id with a given async job id to be uploaded asynchronously
|
|
246
|
+
|
|
247
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
248
|
+
"""
|
|
249
|
+
args = complete_async_upload_t.Arguments(
|
|
250
|
+
async_job_id=async_job_id,
|
|
251
|
+
file_id=file_id,
|
|
252
|
+
)
|
|
253
|
+
json_data = serialize_for_api(args)
|
|
254
|
+
|
|
255
|
+
batch_reference = str(uuid.uuid4())
|
|
256
|
+
|
|
257
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
258
|
+
path=async_batch_t.AsyncBatchRequestPath.COMPLETE_ASYNC_UPLOAD,
|
|
259
|
+
data=json_data,
|
|
260
|
+
depends_on=depends_on,
|
|
261
|
+
batch_reference=batch_reference,
|
|
262
|
+
)
|
|
263
|
+
|
|
264
|
+
self._enqueue(req)
|
|
265
|
+
|
|
266
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
267
|
+
path=req.path,
|
|
268
|
+
batch_reference=req.batch_reference,
|
|
269
|
+
)
|
|
270
|
+
|
|
271
|
+
def create_mix_order(
|
|
272
|
+
self,
|
|
273
|
+
*,
|
|
274
|
+
recipe_key: identifier_t.IdentifierKey,
|
|
275
|
+
recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier,
|
|
276
|
+
depends_on: list[str] | None = None,
|
|
277
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
278
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
279
|
+
"""Creates mix order on a recipe workflow step
|
|
280
|
+
|
|
281
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
282
|
+
"""
|
|
283
|
+
args = create_mix_order_t.Arguments(
|
|
284
|
+
recipe_key=recipe_key,
|
|
285
|
+
recipe_workflow_step_identifier=recipe_workflow_step_identifier,
|
|
286
|
+
)
|
|
287
|
+
json_data = serialize_for_api(args)
|
|
288
|
+
|
|
289
|
+
batch_reference = str(uuid.uuid4())
|
|
290
|
+
|
|
291
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
292
|
+
path=async_batch_t.AsyncBatchRequestPath.CREATE_MIX_ORDER,
|
|
293
|
+
data=json_data,
|
|
294
|
+
depends_on=depends_on,
|
|
295
|
+
batch_reference=batch_reference,
|
|
296
|
+
)
|
|
297
|
+
|
|
298
|
+
self._enqueue(req)
|
|
299
|
+
|
|
300
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
301
|
+
path=req.path,
|
|
302
|
+
batch_reference=req.batch_reference,
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
def create_or_update_entity(
|
|
306
|
+
self,
|
|
307
|
+
*,
|
|
308
|
+
entity_type: entity_t.EntityType,
|
|
309
|
+
definition_key: identifier_t.IdentifierKey,
|
|
310
|
+
field_values: list[field_values_t.FieldArgumentValue],
|
|
311
|
+
entity_key: identifier_t.IdentifierKey | None = None,
|
|
312
|
+
on_create_init_field_values: list[field_values_t.FieldArgumentValue] | None = None,
|
|
313
|
+
depends_on: list[str] | None = None,
|
|
314
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
315
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
316
|
+
"""Creates or updates field values for an entity
|
|
317
|
+
|
|
318
|
+
:param on_create_init_field_values: Field values set only when the entity is created (will be ignored if entity already exists)
|
|
319
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
320
|
+
"""
|
|
321
|
+
args = create_or_update_entity_t.Arguments(
|
|
322
|
+
entity_key=entity_key,
|
|
323
|
+
entity_type=entity_type,
|
|
324
|
+
definition_key=definition_key,
|
|
325
|
+
field_values=field_values,
|
|
326
|
+
on_create_init_field_values=on_create_init_field_values,
|
|
327
|
+
)
|
|
328
|
+
json_data = serialize_for_api(args)
|
|
329
|
+
|
|
330
|
+
batch_reference = str(uuid.uuid4())
|
|
331
|
+
|
|
332
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
333
|
+
path=async_batch_t.AsyncBatchRequestPath.CREATE_OR_UPDATE_ENTITY,
|
|
334
|
+
data=json_data,
|
|
335
|
+
depends_on=depends_on,
|
|
336
|
+
batch_reference=batch_reference,
|
|
337
|
+
)
|
|
338
|
+
|
|
339
|
+
self._enqueue(req)
|
|
340
|
+
|
|
341
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
342
|
+
path=req.path,
|
|
343
|
+
batch_reference=req.batch_reference,
|
|
344
|
+
)
|
|
345
|
+
|
|
35
346
|
def create_recipe(
|
|
36
347
|
self,
|
|
37
348
|
*,
|
|
38
349
|
material_family_id: base_t.ObjectId,
|
|
39
350
|
workflow_id: base_t.ObjectId,
|
|
40
|
-
name:
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
351
|
+
name: str | None = None,
|
|
352
|
+
project_id: base_t.ObjectId | None = None,
|
|
353
|
+
workflow_variant_id: base_t.ObjectId | None = None,
|
|
354
|
+
recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None,
|
|
355
|
+
identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None,
|
|
356
|
+
definition_key: identifier_t.IdentifierKey | None = None,
|
|
357
|
+
depends_on: list[str] | None = None,
|
|
358
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
46
359
|
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
47
360
|
"""Returns the id of the recipe being created.
|
|
48
361
|
|
|
49
362
|
:param name: The name for the recipe
|
|
50
363
|
:param material_family_id: The material family for the recipe
|
|
364
|
+
:param project_id: The identifier of the project to create the recipe in
|
|
51
365
|
:param workflow_id: The identifier of the workflow to create the recipe with
|
|
52
366
|
:param workflow_variant_id: The identifier of the workflow variant to create the recipe with
|
|
53
367
|
:param recipe_metadata: Metadata values to populate the recipe with
|
|
@@ -58,6 +372,7 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
58
372
|
args = create_recipe_t.Arguments(
|
|
59
373
|
name=name,
|
|
60
374
|
material_family_id=material_family_id,
|
|
375
|
+
project_id=project_id,
|
|
61
376
|
workflow_id=workflow_id,
|
|
62
377
|
workflow_variant_id=workflow_variant_id,
|
|
63
378
|
recipe_metadata=recipe_metadata,
|
|
@@ -88,7 +403,8 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
88
403
|
recipe_key: identifier_t.IdentifierKey,
|
|
89
404
|
recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier,
|
|
90
405
|
edits: list[edit_recipe_inputs_t.RecipeInputEdit],
|
|
91
|
-
depends_on:
|
|
406
|
+
depends_on: list[str] | None = None,
|
|
407
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
92
408
|
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
93
409
|
"""Clear, update, or add inputs on a recipe
|
|
94
410
|
|
|
@@ -118,12 +434,254 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
118
434
|
batch_reference=req.batch_reference,
|
|
119
435
|
)
|
|
120
436
|
|
|
437
|
+
def grant_entity_permissions(
|
|
438
|
+
self,
|
|
439
|
+
*,
|
|
440
|
+
entity_type: entity_t.LimitedEntityType,
|
|
441
|
+
entity_key: identifier_t.IdentifierKey,
|
|
442
|
+
permission_types: list[entity_t.GrantableEntityPermissionType],
|
|
443
|
+
user_keys: list[identifier_t.IdentifierKey] | None = None,
|
|
444
|
+
user_group_keys: list[identifier_t.IdentifierKey] | None = None,
|
|
445
|
+
all_users: bool | None = None,
|
|
446
|
+
depends_on: list[str] | None = None,
|
|
447
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
448
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
449
|
+
"""Grant entity permissions to a list of users or user groups or to all users.
|
|
450
|
+
|
|
451
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
452
|
+
"""
|
|
453
|
+
args = grant_entity_permissions_t.Arguments(
|
|
454
|
+
entity_type=entity_type,
|
|
455
|
+
entity_key=entity_key,
|
|
456
|
+
permission_types=permission_types,
|
|
457
|
+
user_keys=user_keys,
|
|
458
|
+
user_group_keys=user_group_keys,
|
|
459
|
+
all_users=all_users,
|
|
460
|
+
)
|
|
461
|
+
json_data = serialize_for_api(args)
|
|
462
|
+
|
|
463
|
+
batch_reference = str(uuid.uuid4())
|
|
464
|
+
|
|
465
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
466
|
+
path=async_batch_t.AsyncBatchRequestPath.GRANT_ENTITY_PERMISSIONS,
|
|
467
|
+
data=json_data,
|
|
468
|
+
depends_on=depends_on,
|
|
469
|
+
batch_reference=batch_reference,
|
|
470
|
+
)
|
|
471
|
+
|
|
472
|
+
self._enqueue(req)
|
|
473
|
+
|
|
474
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
475
|
+
path=req.path,
|
|
476
|
+
batch_reference=req.batch_reference,
|
|
477
|
+
)
|
|
478
|
+
|
|
479
|
+
def invoke_uploader(
|
|
480
|
+
self,
|
|
481
|
+
*,
|
|
482
|
+
uploader_key: identifier_t.IdentifierKey,
|
|
483
|
+
destination: generic_upload_t.UploadDestination,
|
|
484
|
+
file_id: base_t.ObjectId | None = None,
|
|
485
|
+
file_ids: list[base_t.ObjectId] | None = None,
|
|
486
|
+
depends_on: list[str] | None = None,
|
|
487
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
488
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
489
|
+
"""Runs a file through an uploader.
|
|
490
|
+
|
|
491
|
+
:param file_id: DEPRECATED: use file_ids
|
|
492
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
493
|
+
"""
|
|
494
|
+
args = invoke_uploader_t.Arguments(
|
|
495
|
+
file_id=file_id,
|
|
496
|
+
file_ids=file_ids,
|
|
497
|
+
uploader_key=uploader_key,
|
|
498
|
+
destination=destination,
|
|
499
|
+
)
|
|
500
|
+
json_data = serialize_for_api(args)
|
|
501
|
+
|
|
502
|
+
batch_reference = str(uuid.uuid4())
|
|
503
|
+
|
|
504
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
505
|
+
path=async_batch_t.AsyncBatchRequestPath.INVOKE_UPLOADER,
|
|
506
|
+
data=json_data,
|
|
507
|
+
depends_on=depends_on,
|
|
508
|
+
batch_reference=batch_reference,
|
|
509
|
+
)
|
|
510
|
+
|
|
511
|
+
self._enqueue(req)
|
|
512
|
+
|
|
513
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
514
|
+
path=req.path,
|
|
515
|
+
batch_reference=req.batch_reference,
|
|
516
|
+
)
|
|
517
|
+
|
|
518
|
+
def lock_recipes(
|
|
519
|
+
self,
|
|
520
|
+
*,
|
|
521
|
+
type: lock_recipes_t.RecipeLockType = lock_recipes_t.RecipeLockType.ALL,
|
|
522
|
+
recipes: list[identifier_t.IdentifierKey],
|
|
523
|
+
globally_removable: bool,
|
|
524
|
+
lock_samples: bool | None = None,
|
|
525
|
+
comments: str | None = None,
|
|
526
|
+
depends_on: list[str] | None = None,
|
|
527
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
528
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
529
|
+
"""Lock experiments. Experiments will require unlocking to be editable. Edits to the experiments are blocked while they are locked.
|
|
530
|
+
|
|
531
|
+
:param type: The type of lock to set.
|
|
532
|
+
All = both inputs and measurements are locked.
|
|
533
|
+
Inputs Only = only inputs are locked from editing.
|
|
534
|
+
|
|
535
|
+
:param recipes: The recipes to lock, a maximum of 100 can be sent
|
|
536
|
+
:param globally_removable: If true any user can unlock the experiment. If false the locking user is the only user that can unlock.
|
|
537
|
+
:param lock_samples: Should associated experiment test samples also be locked.
|
|
538
|
+
:param comments: Optional comment describing the purpose of locking
|
|
539
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
540
|
+
"""
|
|
541
|
+
args = lock_recipes_t.Arguments(
|
|
542
|
+
type=type,
|
|
543
|
+
recipes=recipes,
|
|
544
|
+
globally_removable=globally_removable,
|
|
545
|
+
lock_samples=lock_samples,
|
|
546
|
+
comments=comments,
|
|
547
|
+
)
|
|
548
|
+
json_data = serialize_for_api(args)
|
|
549
|
+
|
|
550
|
+
batch_reference = str(uuid.uuid4())
|
|
551
|
+
|
|
552
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
553
|
+
path=async_batch_t.AsyncBatchRequestPath.LOCK_RECIPES,
|
|
554
|
+
data=json_data,
|
|
555
|
+
depends_on=depends_on,
|
|
556
|
+
batch_reference=batch_reference,
|
|
557
|
+
)
|
|
558
|
+
|
|
559
|
+
self._enqueue(req)
|
|
560
|
+
|
|
561
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
562
|
+
path=req.path,
|
|
563
|
+
batch_reference=req.batch_reference,
|
|
564
|
+
)
|
|
565
|
+
|
|
566
|
+
def lookup_entity(
|
|
567
|
+
self,
|
|
568
|
+
*,
|
|
569
|
+
entity_type: entity_t.EntityType,
|
|
570
|
+
query: lookup_entity_t.LookupEntityQuery,
|
|
571
|
+
depends_on: list[str] | None = None,
|
|
572
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
573
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
574
|
+
"""Look up an entity based on an identifier or field values
|
|
575
|
+
|
|
576
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
577
|
+
"""
|
|
578
|
+
args = lookup_entity_t.Arguments(
|
|
579
|
+
entity_type=entity_type,
|
|
580
|
+
query=query,
|
|
581
|
+
)
|
|
582
|
+
json_data = serialize_for_api(args)
|
|
583
|
+
|
|
584
|
+
batch_reference = str(uuid.uuid4())
|
|
585
|
+
|
|
586
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
587
|
+
path=async_batch_t.AsyncBatchRequestPath.LOOKUP_ENTITY,
|
|
588
|
+
data=json_data,
|
|
589
|
+
depends_on=depends_on,
|
|
590
|
+
batch_reference=batch_reference,
|
|
591
|
+
)
|
|
592
|
+
|
|
593
|
+
self._enqueue(req)
|
|
594
|
+
|
|
595
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
596
|
+
path=req.path,
|
|
597
|
+
batch_reference=req.batch_reference,
|
|
598
|
+
)
|
|
599
|
+
|
|
600
|
+
def push_notification(
|
|
601
|
+
self,
|
|
602
|
+
*,
|
|
603
|
+
notification_targets: list[notifications_t.NotificationTarget],
|
|
604
|
+
subject: str,
|
|
605
|
+
message: str,
|
|
606
|
+
display_notice: bool = False,
|
|
607
|
+
entity: entity_t.EntityIdentifier | None = None,
|
|
608
|
+
notice_configuration: notices_t.NotificationNoticeConfiguration | None = None,
|
|
609
|
+
depends_on: list[str] | None = None,
|
|
610
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
611
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
612
|
+
"""Push a notification to a user or user group
|
|
613
|
+
|
|
614
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
615
|
+
"""
|
|
616
|
+
args = push_notification_t.Arguments(
|
|
617
|
+
notification_targets=notification_targets,
|
|
618
|
+
subject=subject,
|
|
619
|
+
message=message,
|
|
620
|
+
entity=entity,
|
|
621
|
+
display_notice=display_notice,
|
|
622
|
+
notice_configuration=notice_configuration,
|
|
623
|
+
)
|
|
624
|
+
json_data = serialize_for_api(args)
|
|
625
|
+
|
|
626
|
+
batch_reference = str(uuid.uuid4())
|
|
627
|
+
|
|
628
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
629
|
+
path=async_batch_t.AsyncBatchRequestPath.PUSH_NOTIFICATION,
|
|
630
|
+
data=json_data,
|
|
631
|
+
depends_on=depends_on,
|
|
632
|
+
batch_reference=batch_reference,
|
|
633
|
+
)
|
|
634
|
+
|
|
635
|
+
self._enqueue(req)
|
|
636
|
+
|
|
637
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
638
|
+
path=req.path,
|
|
639
|
+
batch_reference=req.batch_reference,
|
|
640
|
+
)
|
|
641
|
+
|
|
642
|
+
def set_entity_field_values(
|
|
643
|
+
self,
|
|
644
|
+
*,
|
|
645
|
+
entity_identifier: entity_t.EntityIdentifier,
|
|
646
|
+
field_values: list[field_values_t.FieldArgumentValue],
|
|
647
|
+
depends_on: list[str] | None = None,
|
|
648
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
649
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
650
|
+
"""Sets field values for an entity
|
|
651
|
+
|
|
652
|
+
:param entity_identifier: Entity to update
|
|
653
|
+
:param field_values: Field values to set
|
|
654
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
655
|
+
"""
|
|
656
|
+
args = set_entity_field_values_t.Arguments(
|
|
657
|
+
entity_identifier=entity_identifier,
|
|
658
|
+
field_values=field_values,
|
|
659
|
+
)
|
|
660
|
+
json_data = serialize_for_api(args)
|
|
661
|
+
|
|
662
|
+
batch_reference = str(uuid.uuid4())
|
|
663
|
+
|
|
664
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
665
|
+
path=async_batch_t.AsyncBatchRequestPath.SET_ENTITY_FIELD_VALUES,
|
|
666
|
+
data=json_data,
|
|
667
|
+
depends_on=depends_on,
|
|
668
|
+
batch_reference=batch_reference,
|
|
669
|
+
)
|
|
670
|
+
|
|
671
|
+
self._enqueue(req)
|
|
672
|
+
|
|
673
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
674
|
+
path=req.path,
|
|
675
|
+
batch_reference=req.batch_reference,
|
|
676
|
+
)
|
|
677
|
+
|
|
121
678
|
def set_recipe_metadata(
|
|
122
679
|
self,
|
|
123
680
|
*,
|
|
124
681
|
recipe_key: identifier_t.IdentifierKey,
|
|
125
682
|
recipe_metadata: list[recipe_metadata_t.MetadataValue],
|
|
126
|
-
depends_on:
|
|
683
|
+
depends_on: list[str] | None = None,
|
|
684
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
127
685
|
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
128
686
|
"""Set metadata values on a recipe
|
|
129
687
|
|
|
@@ -152,3 +710,121 @@ class AsyncBatchProcessorBase(ABC):
|
|
|
152
710
|
path=req.path,
|
|
153
711
|
batch_reference=req.batch_reference,
|
|
154
712
|
)
|
|
713
|
+
|
|
714
|
+
def transition_entity_phase(
|
|
715
|
+
self,
|
|
716
|
+
*,
|
|
717
|
+
transition: transition_entity_phase_t.TransitionIdentifier,
|
|
718
|
+
entity: entity_t.Entity | None = None,
|
|
719
|
+
entity_identifier: entity_t.EntityIdentifier | None = None,
|
|
720
|
+
depends_on: list[str] | None = None,
|
|
721
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
722
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
723
|
+
"""Transitions an entity from one phase to another
|
|
724
|
+
|
|
725
|
+
:param entity: Entity to transition. If entity_identifier is provided, this should be omitted.
|
|
726
|
+
:param entity_identifier: Identifier of the entity to transition. If entity is provided, this should be omitted.
|
|
727
|
+
:param transition: Identifier of the transition to perform
|
|
728
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
729
|
+
"""
|
|
730
|
+
args = transition_entity_phase_t.Arguments(
|
|
731
|
+
entity=entity,
|
|
732
|
+
entity_identifier=entity_identifier,
|
|
733
|
+
transition=transition,
|
|
734
|
+
)
|
|
735
|
+
json_data = serialize_for_api(args)
|
|
736
|
+
|
|
737
|
+
batch_reference = str(uuid.uuid4())
|
|
738
|
+
|
|
739
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
740
|
+
path=async_batch_t.AsyncBatchRequestPath.TRANSITION_ENTITY_PHASE,
|
|
741
|
+
data=json_data,
|
|
742
|
+
depends_on=depends_on,
|
|
743
|
+
batch_reference=batch_reference,
|
|
744
|
+
)
|
|
745
|
+
|
|
746
|
+
self._enqueue(req)
|
|
747
|
+
|
|
748
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
749
|
+
path=req.path,
|
|
750
|
+
batch_reference=req.batch_reference,
|
|
751
|
+
)
|
|
752
|
+
|
|
753
|
+
def unlock_recipes(
|
|
754
|
+
self,
|
|
755
|
+
*,
|
|
756
|
+
type: unlock_recipes_t.RecipeUnlockType = unlock_recipes_t.RecipeUnlockType.STANDARD,
|
|
757
|
+
recipes: list[identifier_t.IdentifierKey],
|
|
758
|
+
unlock_samples: bool | None = None,
|
|
759
|
+
depends_on: list[str] | None = None,
|
|
760
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
761
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
762
|
+
"""Unlock experiments. Experiments will edtiable after unlocking if they are currently locked.
|
|
763
|
+
|
|
764
|
+
:param type: The method to unlock recipes. Default is standard.
|
|
765
|
+
:param recipes: The recipes to unlock, a maximum of 100 can be sent
|
|
766
|
+
:param unlock_samples: Should associated experiment test samples also be unlocked.
|
|
767
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
768
|
+
"""
|
|
769
|
+
args = unlock_recipes_t.Arguments(
|
|
770
|
+
type=type,
|
|
771
|
+
recipes=recipes,
|
|
772
|
+
unlock_samples=unlock_samples,
|
|
773
|
+
)
|
|
774
|
+
json_data = serialize_for_api(args)
|
|
775
|
+
|
|
776
|
+
batch_reference = str(uuid.uuid4())
|
|
777
|
+
|
|
778
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
779
|
+
path=async_batch_t.AsyncBatchRequestPath.UNLOCK_RECIPES,
|
|
780
|
+
data=json_data,
|
|
781
|
+
depends_on=depends_on,
|
|
782
|
+
batch_reference=batch_reference,
|
|
783
|
+
)
|
|
784
|
+
|
|
785
|
+
self._enqueue(req)
|
|
786
|
+
|
|
787
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
788
|
+
path=req.path,
|
|
789
|
+
batch_reference=req.batch_reference,
|
|
790
|
+
)
|
|
791
|
+
|
|
792
|
+
def upsert_condition_match(
|
|
793
|
+
self,
|
|
794
|
+
*,
|
|
795
|
+
explicit_name: bool = False,
|
|
796
|
+
name: str | None = None,
|
|
797
|
+
condition_parameters: list[upsert_condition_match_t.ConditionParameter] | None = None,
|
|
798
|
+
output_conditions: list[identifier_t.IdentifierKey] | None = None,
|
|
799
|
+
existing_condition_match: identifier_t.IdentifierKey | None = None,
|
|
800
|
+
depends_on: list[str] | None = None,
|
|
801
|
+
_request_options: client_config_t.RequestOptions | None = None,
|
|
802
|
+
) -> async_batch_t.QueuedAsyncBatchRequest:
|
|
803
|
+
"""Creates or updates condition match
|
|
804
|
+
|
|
805
|
+
:param depends_on: A list of batch reference keys to process before processing this request
|
|
806
|
+
"""
|
|
807
|
+
args = upsert_condition_match_t.Arguments(
|
|
808
|
+
name=name,
|
|
809
|
+
condition_parameters=condition_parameters,
|
|
810
|
+
output_conditions=output_conditions,
|
|
811
|
+
explicit_name=explicit_name,
|
|
812
|
+
existing_condition_match=existing_condition_match,
|
|
813
|
+
)
|
|
814
|
+
json_data = serialize_for_api(args)
|
|
815
|
+
|
|
816
|
+
batch_reference = str(uuid.uuid4())
|
|
817
|
+
|
|
818
|
+
req = async_batch_t.AsyncBatchRequest(
|
|
819
|
+
path=async_batch_t.AsyncBatchRequestPath.UPSERT_CONDITION_MATCH,
|
|
820
|
+
data=json_data,
|
|
821
|
+
depends_on=depends_on,
|
|
822
|
+
batch_reference=batch_reference,
|
|
823
|
+
)
|
|
824
|
+
|
|
825
|
+
self._enqueue(req)
|
|
826
|
+
|
|
827
|
+
return async_batch_t.QueuedAsyncBatchRequest(
|
|
828
|
+
path=req.path,
|
|
829
|
+
batch_reference=req.batch_reference,
|
|
830
|
+
)
|