UncountablePythonSDK 0.0.52__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 +54 -7
- 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 +6 -4
- examples/async_batch.py +3 -3
- examples/basic_auth.py +7 -0
- examples/create_entity.py +3 -1
- examples/create_ingredient_sdk.py +34 -0
- examples/download_files.py +26 -0
- examples/edit_recipe_inputs.py +4 -2
- 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 +4 -1
- 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 +1 -2
- pkgs/argument_parser/__init__.py +9 -0
- pkgs/argument_parser/_is_namedtuple.py +3 -0
- pkgs/argument_parser/argument_parser.py +217 -70
- pkgs/filesystem_utils/__init__.py +1 -0
- pkgs/filesystem_utils/_blob_session.py +144 -0
- pkgs/filesystem_utils/_gdrive_session.py +10 -7
- pkgs/filesystem_utils/_s3_session.py +15 -13
- pkgs/filesystem_utils/_sftp_session.py +11 -7
- pkgs/filesystem_utils/file_type_utils.py +30 -10
- pkgs/py.typed +0 -0
- pkgs/serialization/__init__.py +7 -2
- 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 +47 -26
- pkgs/serialization/serial_generic.py +16 -0
- pkgs/serialization/serial_union.py +17 -14
- pkgs/serialization/yaml.py +4 -1
- pkgs/serialization_util/__init__.py +6 -0
- pkgs/serialization_util/dataclasses.py +14 -0
- pkgs/serialization_util/serialization_helpers.py +15 -5
- pkgs/type_spec/actions_registry/__main__.py +0 -4
- pkgs/type_spec/actions_registry/emit_typescript.py +5 -5
- pkgs/type_spec/builder.py +354 -119
- pkgs/type_spec/builder_types.py +9 -0
- pkgs/type_spec/config.py +51 -11
- 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 +127 -36
- pkgs/type_spec/emit_open_api_util.py +5 -6
- pkgs/type_spec/emit_python.py +329 -121
- pkgs/type_spec/emit_typescript.py +117 -256
- pkgs/type_spec/emit_typescript_util.py +291 -2
- pkgs/type_spec/load_types.py +18 -4
- 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 +124 -29
- 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 +26 -9
- 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/core/async_batch.py +1 -1
- uncountable/core/client.py +142 -39
- uncountable/core/environment.py +41 -0
- uncountable/core/file_upload.py +52 -18
- uncountable/integration/cli.py +142 -0
- uncountable/integration/construct_client.py +8 -8
- uncountable/integration/cron.py +11 -37
- uncountable/integration/db/connect.py +12 -2
- uncountable/integration/db/session.py +25 -0
- uncountable/integration/entrypoint.py +8 -37
- uncountable/integration/executors/executors.py +125 -2
- uncountable/integration/executors/generic_upload_executor.py +87 -29
- uncountable/integration/executors/script_executor.py +3 -3
- uncountable/integration/http_server/__init__.py +5 -0
- uncountable/integration/http_server/types.py +69 -0
- uncountable/integration/job.py +242 -12
- 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/retrieve_secret.py +26 -4
- uncountable/integration/server.py +94 -69
- uncountable/integration/telemetry.py +150 -34
- uncountable/integration/webhook_server/entrypoint.py +97 -0
- uncountable/types/__init__.py +78 -1
- uncountable/types/api/batch/execute_batch.py +13 -6
- uncountable/types/api/batch/execute_batch_load_async.py +9 -3
- uncountable/types/api/chemical/convert_chemical_formats.py +17 -5
- 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 +19 -7
- uncountable/types/api/entity/create_entity.py +17 -8
- 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 +13 -4
- 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 +42 -10
- uncountable/types/api/entity/lock_entity.py +11 -4
- uncountable/types/api/entity/lookup_entity.py +116 -0
- uncountable/types/api/entity/resolve_entity_ids.py +15 -6
- uncountable/types/api/entity/set_entity_field_values.py +44 -0
- uncountable/types/api/entity/set_values.py +10 -3
- uncountable/types/api/entity/transition_entity_phase.py +22 -7
- uncountable/types/api/entity/unlock_entity.py +10 -3
- uncountable/types/api/equipment/associate_equipment_input.py +9 -3
- uncountable/types/api/field_options/upsert_field_options.py +17 -7
- 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 +16 -7
- uncountable/types/api/id_source/match_id_source.py +14 -5
- uncountable/types/api/input_groups/get_input_group_names.py +13 -4
- uncountable/types/api/inputs/create_inputs.py +23 -9
- uncountable/types/api/inputs/get_input_data.py +30 -12
- uncountable/types/api/inputs/get_input_names.py +16 -7
- uncountable/types/api/inputs/get_inputs_data.py +25 -7
- uncountable/types/api/inputs/set_input_attribute_values.py +12 -6
- uncountable/types/api/inputs/set_input_category.py +12 -5
- uncountable/types/api/inputs/set_input_subcategories.py +10 -3
- uncountable/types/api/inputs/set_intermediate_type.py +11 -4
- 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/update_entity_material_families.py +10 -4
- 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 +28 -13
- uncountable/types/api/outputs/get_output_names.py +15 -6
- uncountable/types/api/outputs/get_output_organization.py +173 -0
- uncountable/types/api/outputs/resolve_output_conditions.py +20 -8
- uncountable/types/api/permissions/set_core_permissions.py +26 -10
- uncountable/types/api/project/get_projects.py +16 -7
- uncountable/types/api/project/get_projects_data.py +17 -8
- uncountable/types/api/recipe_links/create_recipe_link.py +12 -5
- uncountable/types/api/recipe_links/remove_recipe_link.py +11 -4
- uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +16 -7
- uncountable/types/api/recipes/add_recipe_to_project.py +10 -3
- uncountable/types/api/recipes/add_time_series_data.py +64 -0
- uncountable/types/api/recipes/archive_recipes.py +11 -4
- uncountable/types/api/recipes/associate_recipe_as_input.py +12 -5
- uncountable/types/api/recipes/associate_recipe_as_lot.py +10 -3
- 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 +15 -9
- uncountable/types/api/recipes/create_recipes.py +21 -9
- uncountable/types/api/recipes/disassociate_recipe_as_input.py +10 -3
- uncountable/types/api/recipes/edit_recipe_inputs.py +134 -22
- uncountable/types/api/recipes/get_column_calculation_values.py +57 -0
- uncountable/types/api/recipes/get_curve.py +11 -5
- uncountable/types/api/recipes/get_recipe_calculations.py +13 -7
- uncountable/types/api/recipes/get_recipe_links.py +10 -4
- uncountable/types/api/recipes/get_recipe_names.py +13 -4
- uncountable/types/api/recipes/get_recipe_output_metadata.py +12 -6
- uncountable/types/api/recipes/get_recipes_data.py +87 -33
- uncountable/types/api/recipes/lock_recipes.py +19 -8
- uncountable/types/api/recipes/remove_recipe_from_project.py +10 -3
- uncountable/types/api/recipes/set_recipe_inputs.py +16 -10
- uncountable/types/api/recipes/set_recipe_metadata.py +10 -3
- uncountable/types/api/recipes/set_recipe_output_annotations.py +24 -12
- uncountable/types/api/recipes/set_recipe_output_file.py +55 -0
- uncountable/types/api/recipes/set_recipe_outputs.py +35 -12
- uncountable/types/api/recipes/set_recipe_tags.py +26 -9
- uncountable/types/api/recipes/set_recipe_total.py +59 -0
- uncountable/types/api/recipes/unarchive_recipes.py +10 -3
- uncountable/types/api/recipes/unlock_recipes.py +14 -6
- 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 +11 -4
- uncountable/types/api/uploader/complete_async_parse.py +46 -0
- uncountable/types/api/uploader/invoke_uploader.py +13 -6
- uncountable/types/api/user/__init__.py +1 -0
- uncountable/types/api/user/get_current_user_info.py +40 -0
- uncountable/types/async_batch.py +2 -1
- uncountable/types/async_batch_processor.py +618 -18
- uncountable/types/async_batch_t.py +54 -7
- 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 +0 -1
- uncountable/types/base_t.py +13 -11
- uncountable/types/calculations.py +0 -1
- uncountable/types/calculations_t.py +5 -2
- uncountable/types/chemical_structure.py +0 -1
- uncountable/types/chemical_structure_t.py +6 -5
- uncountable/types/client_base.py +751 -70
- uncountable/types/client_config.py +1 -1
- uncountable/types/client_config_t.py +17 -3
- uncountable/types/curves.py +0 -1
- uncountable/types/curves_t.py +10 -7
- uncountable/types/data.py +12 -0
- uncountable/types/data_t.py +103 -0
- uncountable/types/entity.py +4 -1
- uncountable/types/entity_t.py +125 -7
- uncountable/types/experiment_groups.py +0 -1
- uncountable/types/experiment_groups_t.py +5 -2
- uncountable/types/exports.py +8 -0
- uncountable/types/exports_t.py +34 -0
- uncountable/types/field_values.py +19 -1
- uncountable/types/field_values_t.py +246 -9
- uncountable/types/fields.py +0 -1
- uncountable/types/fields_t.py +5 -2
- uncountable/types/generic_upload.py +6 -1
- uncountable/types/generic_upload_t.py +88 -9
- uncountable/types/id_source.py +0 -1
- uncountable/types/id_source_t.py +26 -7
- uncountable/types/identifier.py +0 -1
- uncountable/types/identifier_t.py +13 -5
- uncountable/types/input_attributes.py +0 -1
- uncountable/types/input_attributes_t.py +4 -4
- uncountable/types/inputs.py +1 -1
- uncountable/types/inputs_t.py +24 -4
- 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 +4 -6
- uncountable/types/job_definition_t.py +96 -65
- 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 +0 -1
- uncountable/types/outputs_t.py +6 -3
- uncountable/types/overrides.py +9 -0
- uncountable/types/overrides_t.py +49 -0
- uncountable/types/permissions.py +0 -1
- uncountable/types/permissions_t.py +1 -2
- uncountable/types/phases.py +0 -1
- uncountable/types/phases_t.py +5 -2
- uncountable/types/post_base.py +0 -1
- uncountable/types/post_base_t.py +1 -2
- uncountable/types/queued_job.py +17 -0
- uncountable/types/queued_job_t.py +140 -0
- uncountable/types/recipe_identifiers.py +0 -1
- uncountable/types/recipe_identifiers_t.py +21 -8
- uncountable/types/recipe_inputs.py +0 -1
- uncountable/types/recipe_inputs_t.py +1 -2
- uncountable/types/recipe_links.py +0 -1
- uncountable/types/recipe_links_t.py +7 -4
- uncountable/types/recipe_metadata.py +0 -1
- uncountable/types/recipe_metadata_t.py +14 -9
- uncountable/types/recipe_output_metadata.py +0 -1
- uncountable/types/recipe_output_metadata_t.py +5 -2
- uncountable/types/recipe_tags.py +0 -1
- uncountable/types/recipe_tags_t.py +5 -2
- uncountable/types/recipe_workflow_steps.py +0 -1
- uncountable/types/recipe_workflow_steps_t.py +14 -7
- uncountable/types/recipes.py +0 -1
- uncountable/types/recipes_t.py +6 -2
- uncountable/types/response.py +0 -1
- uncountable/types/response_t.py +3 -2
- uncountable/types/secret_retrieval.py +0 -1
- uncountable/types/secret_retrieval_t.py +13 -7
- 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 +0 -1
- uncountable/types/units_t.py +5 -2
- uncountable/types/uploader.py +24 -0
- uncountable/types/uploader_t.py +222 -0
- uncountable/types/users.py +0 -1
- uncountable/types/users_t.py +5 -2
- uncountable/types/webhook_job.py +9 -0
- uncountable/types/webhook_job_t.py +48 -0
- uncountable/types/workflows.py +0 -1
- uncountable/types/workflows_t.py +10 -4
- uncountablepythonsdk-0.0.131.dist-info/METADATA +64 -0
- uncountablepythonsdk-0.0.131.dist-info/RECORD +363 -0
- {UncountablePythonSDK-0.0.52.dist-info → uncountablepythonsdk-0.0.131.dist-info}/WHEEL +1 -1
- UncountablePythonSDK-0.0.52.dist-info/METADATA +0 -56
- UncountablePythonSDK-0.0.52.dist-info/RECORD +0 -246
- docs/quickstart.md +0 -19
- uncountable/core/version.py +0 -11
- {UncountablePythonSDK-0.0.52.dist-info → uncountablepythonsdk-0.0.131.dist-info}/top_level.txt +0 -0
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
-
# flake8: noqa: F821
|
|
3
2
|
# ruff: noqa: E402 Q003
|
|
4
3
|
# fmt: off
|
|
5
4
|
# isort: skip_file
|
|
@@ -8,6 +7,8 @@ import typing # noqa: F401
|
|
|
8
7
|
import datetime # noqa: F401
|
|
9
8
|
from decimal import Decimal # noqa: F401
|
|
10
9
|
import dataclasses
|
|
10
|
+
from pkgs.serialization import serial_class
|
|
11
|
+
from ... import base_t
|
|
11
12
|
from ... import identifier_t
|
|
12
13
|
|
|
13
14
|
__all__: list[str] = [
|
|
@@ -22,14 +23,20 @@ ENDPOINT_PATH = "api/external/recipes/archive"
|
|
|
22
23
|
|
|
23
24
|
|
|
24
25
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
25
|
-
@
|
|
26
|
+
@serial_class(
|
|
27
|
+
named_type_path="sdk.api.recipes.archive_recipes.Arguments",
|
|
28
|
+
)
|
|
29
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
26
30
|
class Arguments:
|
|
27
31
|
recipes: list[identifier_t.IdentifierKey]
|
|
28
|
-
reason:
|
|
32
|
+
reason: str | None = None
|
|
29
33
|
|
|
30
34
|
|
|
31
35
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
32
|
-
@
|
|
36
|
+
@serial_class(
|
|
37
|
+
named_type_path="sdk.api.recipes.archive_recipes.Data",
|
|
38
|
+
)
|
|
39
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
33
40
|
class Data:
|
|
34
41
|
pass
|
|
35
42
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
-
# flake8: noqa: F821
|
|
3
2
|
# ruff: noqa: E402 Q003
|
|
4
3
|
# fmt: off
|
|
5
4
|
# isort: skip_file
|
|
@@ -8,7 +7,9 @@ import typing # noqa: F401
|
|
|
8
7
|
import datetime # noqa: F401
|
|
9
8
|
from decimal import Decimal # noqa: F401
|
|
10
9
|
import dataclasses
|
|
10
|
+
from pkgs.serialization import serial_class
|
|
11
11
|
from ... import async_batch_t
|
|
12
|
+
from ... import base_t
|
|
12
13
|
from ... import identifier_t
|
|
13
14
|
|
|
14
15
|
__all__: list[str] = [
|
|
@@ -23,15 +24,21 @@ ENDPOINT_PATH = "api/external/recipes/associate_recipe_as_input"
|
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
26
|
-
@
|
|
27
|
+
@serial_class(
|
|
28
|
+
named_type_path="sdk.api.recipes.associate_recipe_as_input.Arguments",
|
|
29
|
+
)
|
|
30
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
27
31
|
class Arguments:
|
|
28
32
|
recipe_key: identifier_t.IdentifierKey
|
|
29
|
-
input_key:
|
|
30
|
-
show_in_listings:
|
|
33
|
+
input_key: identifier_t.IdentifierKey | None = None
|
|
34
|
+
show_in_listings: bool | None = None
|
|
31
35
|
|
|
32
36
|
|
|
33
37
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
34
|
-
@
|
|
38
|
+
@serial_class(
|
|
39
|
+
named_type_path="sdk.api.recipes.associate_recipe_as_input.Data",
|
|
40
|
+
)
|
|
41
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
35
42
|
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
36
43
|
pass
|
|
37
44
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
-
# flake8: noqa: F821
|
|
3
2
|
# ruff: noqa: E402 Q003
|
|
4
3
|
# fmt: off
|
|
5
4
|
# isort: skip_file
|
|
@@ -8,7 +7,9 @@ import typing # noqa: F401
|
|
|
8
7
|
import datetime # noqa: F401
|
|
9
8
|
from decimal import Decimal # noqa: F401
|
|
10
9
|
import dataclasses
|
|
10
|
+
from pkgs.serialization import serial_class
|
|
11
11
|
from ... import async_batch_t
|
|
12
|
+
from ... import base_t
|
|
12
13
|
from ... import identifier_t
|
|
13
14
|
|
|
14
15
|
__all__: list[str] = [
|
|
@@ -23,14 +24,20 @@ ENDPOINT_PATH = "api/external/recipes/associate_recipe_as_lot"
|
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
26
|
-
@
|
|
27
|
+
@serial_class(
|
|
28
|
+
named_type_path="sdk.api.recipes.associate_recipe_as_lot.Arguments",
|
|
29
|
+
)
|
|
30
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
27
31
|
class Arguments:
|
|
28
32
|
recipe_key: identifier_t.IdentifierKey
|
|
29
33
|
ingredient_key: identifier_t.IdentifierKey
|
|
30
34
|
|
|
31
35
|
|
|
32
36
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
33
|
-
@
|
|
37
|
+
@serial_class(
|
|
38
|
+
named_type_path="sdk.api.recipes.associate_recipe_as_lot.Data",
|
|
39
|
+
)
|
|
40
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
34
41
|
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
35
42
|
pass
|
|
36
43
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
3
|
+
# fmt: off
|
|
4
|
+
# isort: skip_file
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import typing # noqa: F401
|
|
7
|
+
import datetime # noqa: F401
|
|
8
|
+
from decimal import Decimal # noqa: F401
|
|
9
|
+
import dataclasses
|
|
10
|
+
from pkgs.serialization import serial_class
|
|
11
|
+
from ... import async_batch_t
|
|
12
|
+
from ... import base_t
|
|
13
|
+
from ... import identifier_t
|
|
14
|
+
|
|
15
|
+
__all__: list[str] = [
|
|
16
|
+
"Arguments",
|
|
17
|
+
"Data",
|
|
18
|
+
"ENDPOINT_METHOD",
|
|
19
|
+
"ENDPOINT_PATH",
|
|
20
|
+
]
|
|
21
|
+
|
|
22
|
+
ENDPOINT_METHOD = "POST"
|
|
23
|
+
ENDPOINT_PATH = "api/external/recipes/clear_recipe_outputs"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
27
|
+
@serial_class(
|
|
28
|
+
named_type_path="sdk.api.recipes.clear_recipe_outputs.Arguments",
|
|
29
|
+
)
|
|
30
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
31
|
+
class Arguments:
|
|
32
|
+
recipe_key: identifier_t.IdentifierKey
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
36
|
+
@serial_class(
|
|
37
|
+
named_type_path="sdk.api.recipes.clear_recipe_outputs.Data",
|
|
38
|
+
)
|
|
39
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
40
|
+
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
41
|
+
pass
|
|
42
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
+
# ruff: noqa: E402 Q003
|
|
3
|
+
# fmt: off
|
|
4
|
+
# isort: skip_file
|
|
5
|
+
from __future__ import annotations
|
|
6
|
+
import typing # noqa: F401
|
|
7
|
+
import datetime # noqa: F401
|
|
8
|
+
from decimal import Decimal # noqa: F401
|
|
9
|
+
import dataclasses
|
|
10
|
+
from pkgs.serialization import serial_class
|
|
11
|
+
from ... import async_batch_t
|
|
12
|
+
from ... import base_t
|
|
13
|
+
from ... import identifier_t
|
|
14
|
+
from ... import recipe_workflow_steps_t
|
|
15
|
+
|
|
16
|
+
__all__: list[str] = [
|
|
17
|
+
"Arguments",
|
|
18
|
+
"Data",
|
|
19
|
+
"ENDPOINT_METHOD",
|
|
20
|
+
"ENDPOINT_PATH",
|
|
21
|
+
]
|
|
22
|
+
|
|
23
|
+
ENDPOINT_METHOD = "POST"
|
|
24
|
+
ENDPOINT_PATH = "api/external/recipes/create_mix_order"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
28
|
+
@serial_class(
|
|
29
|
+
named_type_path="sdk.api.recipes.create_mix_order.Arguments",
|
|
30
|
+
)
|
|
31
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
32
|
+
class Arguments:
|
|
33
|
+
recipe_key: identifier_t.IdentifierKey
|
|
34
|
+
recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
38
|
+
@serial_class(
|
|
39
|
+
named_type_path="sdk.api.recipes.create_mix_order.Data",
|
|
40
|
+
)
|
|
41
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
42
|
+
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
43
|
+
pass
|
|
44
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
-
# flake8: noqa: F821
|
|
3
2
|
# ruff: noqa: E402 Q003
|
|
4
3
|
# fmt: off
|
|
5
4
|
# isort: skip_file
|
|
@@ -8,6 +7,7 @@ import typing # noqa: F401
|
|
|
8
7
|
import datetime # noqa: F401
|
|
9
8
|
from decimal import Decimal # noqa: F401
|
|
10
9
|
import dataclasses
|
|
10
|
+
from pkgs.serialization import serial_class
|
|
11
11
|
from ... import base_t
|
|
12
12
|
from ... import identifier_t
|
|
13
13
|
from ... import recipe_identifiers_t
|
|
@@ -25,20 +25,26 @@ ENDPOINT_PATH = "api/external/recipes/create_recipe"
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
28
|
-
@
|
|
28
|
+
@serial_class(
|
|
29
|
+
named_type_path="sdk.api.recipes.create_recipe.Arguments",
|
|
30
|
+
)
|
|
31
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
29
32
|
class Arguments:
|
|
30
33
|
material_family_id: base_t.ObjectId
|
|
31
34
|
workflow_id: base_t.ObjectId
|
|
32
|
-
name:
|
|
33
|
-
project_id:
|
|
34
|
-
workflow_variant_id:
|
|
35
|
-
recipe_metadata:
|
|
36
|
-
identifiers:
|
|
37
|
-
definition_key:
|
|
35
|
+
name: str | None = None
|
|
36
|
+
project_id: base_t.ObjectId | None = None
|
|
37
|
+
workflow_variant_id: base_t.ObjectId | None = None
|
|
38
|
+
recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None
|
|
39
|
+
identifiers: recipe_identifiers_t.RecipeIdentifiers | None = None
|
|
40
|
+
definition_key: identifier_t.IdentifierKey | None = None
|
|
38
41
|
|
|
39
42
|
|
|
40
43
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
41
|
-
@
|
|
44
|
+
@serial_class(
|
|
45
|
+
named_type_path="sdk.api.recipes.create_recipe.Data",
|
|
46
|
+
)
|
|
47
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
42
48
|
class Data:
|
|
43
49
|
result_id: base_t.ObjectId
|
|
44
50
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
-
# flake8: noqa: F821
|
|
3
2
|
# ruff: noqa: E402 Q003
|
|
4
3
|
# fmt: off
|
|
5
4
|
# isort: skip_file
|
|
@@ -8,6 +7,7 @@ import typing # noqa: F401
|
|
|
8
7
|
import datetime # noqa: F401
|
|
9
8
|
from decimal import Decimal # noqa: F401
|
|
10
9
|
import dataclasses
|
|
10
|
+
from pkgs.serialization import serial_class
|
|
11
11
|
from ... import base_t
|
|
12
12
|
from ... import recipe_metadata_t
|
|
13
13
|
|
|
@@ -25,30 +25,42 @@ ENDPOINT_PATH = "api/external/recipes/external_create_recipes"
|
|
|
25
25
|
|
|
26
26
|
|
|
27
27
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
28
|
-
@
|
|
28
|
+
@serial_class(
|
|
29
|
+
named_type_path="sdk.api.recipes.create_recipes.CreateRecipeDefinition",
|
|
30
|
+
)
|
|
31
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
29
32
|
class CreateRecipeDefinition:
|
|
30
33
|
workflow_id: base_t.ObjectId
|
|
31
|
-
name:
|
|
32
|
-
workflow_variant_id:
|
|
33
|
-
recipe_metadata:
|
|
34
|
+
name: str | None = None
|
|
35
|
+
workflow_variant_id: base_t.ObjectId | None = None
|
|
36
|
+
recipe_metadata: list[recipe_metadata_t.MetadataValue] | None = None
|
|
34
37
|
|
|
35
38
|
|
|
36
39
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
37
|
-
@
|
|
40
|
+
@serial_class(
|
|
41
|
+
named_type_path="sdk.api.recipes.create_recipes.Arguments",
|
|
42
|
+
)
|
|
43
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
38
44
|
class Arguments:
|
|
39
45
|
material_family_id: base_t.ObjectId
|
|
40
46
|
recipe_definitions: list[CreateRecipeDefinition]
|
|
41
|
-
project_id:
|
|
47
|
+
project_id: base_t.ObjectId | None = None
|
|
42
48
|
|
|
43
49
|
|
|
44
50
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
45
|
-
@
|
|
51
|
+
@serial_class(
|
|
52
|
+
named_type_path="sdk.api.recipes.create_recipes.CreateRecipeResult",
|
|
53
|
+
)
|
|
54
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
46
55
|
class CreateRecipeResult:
|
|
47
56
|
recipe_id: base_t.ObjectId
|
|
48
57
|
|
|
49
58
|
|
|
50
59
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
51
|
-
@
|
|
60
|
+
@serial_class(
|
|
61
|
+
named_type_path="sdk.api.recipes.create_recipes.Data",
|
|
62
|
+
)
|
|
63
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
52
64
|
class Data:
|
|
53
65
|
recipes: list[CreateRecipeResult]
|
|
54
66
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
-
# flake8: noqa: F821
|
|
3
2
|
# ruff: noqa: E402 Q003
|
|
4
3
|
# fmt: off
|
|
5
4
|
# isort: skip_file
|
|
@@ -8,7 +7,9 @@ import typing # noqa: F401
|
|
|
8
7
|
import datetime # noqa: F401
|
|
9
8
|
from decimal import Decimal # noqa: F401
|
|
10
9
|
import dataclasses
|
|
10
|
+
from pkgs.serialization import serial_class
|
|
11
11
|
from ... import async_batch_t
|
|
12
|
+
from ... import base_t
|
|
12
13
|
from ... import identifier_t
|
|
13
14
|
|
|
14
15
|
__all__: list[str] = [
|
|
@@ -23,13 +24,19 @@ ENDPOINT_PATH = "api/external/recipes/disassociate_recipe_as_input"
|
|
|
23
24
|
|
|
24
25
|
|
|
25
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
26
|
-
@
|
|
27
|
+
@serial_class(
|
|
28
|
+
named_type_path="sdk.api.recipes.disassociate_recipe_as_input.Arguments",
|
|
29
|
+
)
|
|
30
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
27
31
|
class Arguments:
|
|
28
32
|
recipe_key: identifier_t.IdentifierKey
|
|
29
33
|
|
|
30
34
|
|
|
31
35
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
32
|
-
@
|
|
36
|
+
@serial_class(
|
|
37
|
+
named_type_path="sdk.api.recipes.disassociate_recipe_as_input.Data",
|
|
38
|
+
)
|
|
39
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
33
40
|
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
34
41
|
pass
|
|
35
42
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
2
|
-
# flake8: noqa: F821
|
|
3
2
|
# ruff: noqa: E402 Q003
|
|
4
3
|
# fmt: off
|
|
5
4
|
# isort: skip_file
|
|
@@ -7,11 +6,13 @@ from __future__ import annotations
|
|
|
7
6
|
import typing # noqa: F401
|
|
8
7
|
import datetime # noqa: F401
|
|
9
8
|
from decimal import Decimal # noqa: F401
|
|
10
|
-
from
|
|
9
|
+
from enum import StrEnum
|
|
11
10
|
import dataclasses
|
|
12
11
|
from pkgs.serialization import serial_class
|
|
13
12
|
from pkgs.serialization import serial_union_annotation
|
|
13
|
+
from ... import base_t
|
|
14
14
|
from ... import identifier_t
|
|
15
|
+
from ... import inputs_t
|
|
15
16
|
from ... import recipe_inputs_t
|
|
16
17
|
from ... import recipe_workflow_steps_t
|
|
17
18
|
|
|
@@ -21,6 +22,10 @@ __all__: list[str] = [
|
|
|
21
22
|
"Data",
|
|
22
23
|
"ENDPOINT_METHOD",
|
|
23
24
|
"ENDPOINT_PATH",
|
|
25
|
+
"MixStepMatchStrategy",
|
|
26
|
+
"PlaceholderBase",
|
|
27
|
+
"PlaceholderDisplayMode",
|
|
28
|
+
"PlaceholderType",
|
|
24
29
|
"RecipeInputEdit",
|
|
25
30
|
"RecipeInputEditAddInput",
|
|
26
31
|
"RecipeInputEditAddInstructions",
|
|
@@ -28,10 +33,14 @@ __all__: list[str] = [
|
|
|
28
33
|
"RecipeInputEditChangeBasisViewed",
|
|
29
34
|
"RecipeInputEditClearInputs",
|
|
30
35
|
"RecipeInputEditInputBase",
|
|
36
|
+
"RecipeInputEditPlaceholder",
|
|
31
37
|
"RecipeInputEditSetLot",
|
|
38
|
+
"RecipeInputEditSetRole",
|
|
32
39
|
"RecipeInputEditType",
|
|
33
40
|
"RecipeInputEditUpdateAnnotations",
|
|
34
41
|
"RecipeInputEditUpsertInput",
|
|
42
|
+
"RecipeInputPlaceholder",
|
|
43
|
+
"SubcategoryPlaceholder",
|
|
35
44
|
]
|
|
36
45
|
|
|
37
46
|
ENDPOINT_METHOD = "POST"
|
|
@@ -47,81 +56,103 @@ class RecipeInputEditType(StrEnum):
|
|
|
47
56
|
SET_LOT = "set_lot"
|
|
48
57
|
CHANGE_BASIS = "change_basis"
|
|
49
58
|
ADD_INSTRUCTIONS = "add_instructions"
|
|
59
|
+
SET_ROLE = "set_role"
|
|
60
|
+
SET_PLACEHOLDER = "set_placeholder"
|
|
50
61
|
|
|
51
62
|
|
|
52
63
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
53
|
-
|
|
64
|
+
class MixStepMatchStrategy(StrEnum):
|
|
65
|
+
FIRST = "first"
|
|
66
|
+
LAST = "last"
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
70
|
+
@serial_class(
|
|
71
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditBase",
|
|
72
|
+
)
|
|
73
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
54
74
|
class RecipeInputEditBase:
|
|
55
75
|
type: RecipeInputEditType
|
|
56
76
|
|
|
57
77
|
|
|
58
78
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
59
79
|
@serial_class(
|
|
80
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditClearInputs",
|
|
60
81
|
parse_require={"type"},
|
|
61
82
|
)
|
|
62
|
-
@dataclasses.dataclass(kw_only=True)
|
|
83
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
63
84
|
class RecipeInputEditClearInputs(RecipeInputEditBase):
|
|
64
85
|
type: typing.Literal[RecipeInputEditType.CLEAR_INPUTS] = RecipeInputEditType.CLEAR_INPUTS
|
|
65
86
|
|
|
66
87
|
|
|
67
88
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
68
89
|
@serial_class(
|
|
90
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditInputBase",
|
|
69
91
|
to_string_values={"value_numeric"},
|
|
70
92
|
)
|
|
71
|
-
@dataclasses.dataclass(kw_only=True)
|
|
93
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
72
94
|
class RecipeInputEditInputBase(RecipeInputEditBase):
|
|
73
95
|
ingredient_key: identifier_t.IdentifierKey
|
|
74
|
-
quantity_basis: recipe_inputs_t.QuantityBasis = recipe_inputs_t.QuantityBasis.MASS
|
|
96
|
+
quantity_basis: recipe_inputs_t.QuantityBasis | None = recipe_inputs_t.QuantityBasis.MASS
|
|
75
97
|
input_value_type: recipe_inputs_t.InputValueType = recipe_inputs_t.InputValueType.VALUE
|
|
76
|
-
value_numeric:
|
|
77
|
-
value_str:
|
|
78
|
-
|
|
98
|
+
value_numeric: Decimal | None = None
|
|
99
|
+
value_str: str | None = None
|
|
100
|
+
behavior: inputs_t.IngredientBehavior | None = None
|
|
101
|
+
calculation_key: identifier_t.IdentifierKey | None = None
|
|
79
102
|
|
|
80
103
|
|
|
81
104
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
82
105
|
@serial_class(
|
|
106
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditChangeBasisViewed",
|
|
83
107
|
parse_require={"type"},
|
|
84
108
|
)
|
|
85
|
-
@dataclasses.dataclass(kw_only=True)
|
|
109
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
86
110
|
class RecipeInputEditChangeBasisViewed(RecipeInputEditInputBase):
|
|
87
111
|
type: typing.Literal[RecipeInputEditType.CHANGE_BASIS] = RecipeInputEditType.CHANGE_BASIS
|
|
112
|
+
mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
|
|
88
113
|
|
|
89
114
|
|
|
90
115
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
91
116
|
@serial_class(
|
|
117
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditUpsertInput",
|
|
92
118
|
parse_require={"type"},
|
|
93
119
|
)
|
|
94
|
-
@dataclasses.dataclass(kw_only=True)
|
|
120
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
95
121
|
class RecipeInputEditUpsertInput(RecipeInputEditInputBase):
|
|
96
122
|
type: typing.Literal[RecipeInputEditType.UPSERT_INPUT] = RecipeInputEditType.UPSERT_INPUT
|
|
97
123
|
clear_first: bool
|
|
124
|
+
mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
|
|
98
125
|
|
|
99
126
|
|
|
100
127
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
101
128
|
@serial_class(
|
|
129
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditAddInput",
|
|
102
130
|
parse_require={"type"},
|
|
103
131
|
)
|
|
104
|
-
@dataclasses.dataclass(kw_only=True)
|
|
132
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
105
133
|
class RecipeInputEditAddInput(RecipeInputEditInputBase):
|
|
106
134
|
type: typing.Literal[RecipeInputEditType.ADD_INPUT] = RecipeInputEditType.ADD_INPUT
|
|
107
135
|
|
|
108
136
|
|
|
109
137
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
110
138
|
@serial_class(
|
|
139
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditSetLot",
|
|
111
140
|
parse_require={"type"},
|
|
112
141
|
)
|
|
113
|
-
@dataclasses.dataclass(kw_only=True)
|
|
142
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
114
143
|
class RecipeInputEditSetLot(RecipeInputEditBase):
|
|
115
144
|
type: typing.Literal[RecipeInputEditType.SET_LOT] = RecipeInputEditType.SET_LOT
|
|
116
145
|
ingredient_key: identifier_t.IdentifierKey
|
|
117
146
|
ingredient_lot_recipe_key: identifier_t.IdentifierKey
|
|
147
|
+
mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
|
|
118
148
|
|
|
119
149
|
|
|
120
150
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
121
151
|
@serial_class(
|
|
152
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditAddInstructions",
|
|
122
153
|
parse_require={"type"},
|
|
123
154
|
)
|
|
124
|
-
@dataclasses.dataclass(kw_only=True)
|
|
155
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
125
156
|
class RecipeInputEditAddInstructions(RecipeInputEditBase):
|
|
126
157
|
type: typing.Literal[RecipeInputEditType.ADD_INSTRUCTIONS] = RecipeInputEditType.ADD_INSTRUCTIONS
|
|
127
158
|
instructions: str
|
|
@@ -129,31 +160,104 @@ class RecipeInputEditAddInstructions(RecipeInputEditBase):
|
|
|
129
160
|
|
|
130
161
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
131
162
|
@serial_class(
|
|
163
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.AnnotationEdit",
|
|
132
164
|
to_string_values={"lower_value", "upper_value"},
|
|
133
165
|
)
|
|
134
|
-
@dataclasses.dataclass(kw_only=True)
|
|
166
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
135
167
|
class AnnotationEdit:
|
|
136
168
|
annotation_type_key: identifier_t.IdentifierKey
|
|
137
|
-
lower_value:
|
|
138
|
-
upper_value:
|
|
169
|
+
lower_value: Decimal | None = None
|
|
170
|
+
upper_value: Decimal | None = None
|
|
139
171
|
|
|
140
172
|
|
|
141
173
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
142
174
|
@serial_class(
|
|
175
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditUpdateAnnotations",
|
|
143
176
|
parse_require={"type"},
|
|
144
177
|
)
|
|
145
|
-
@dataclasses.dataclass(kw_only=True)
|
|
178
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
146
179
|
class RecipeInputEditUpdateAnnotations(RecipeInputEditInputBase):
|
|
147
180
|
type: typing.Literal[RecipeInputEditType.UPDATE_ANNOTATIONS] = RecipeInputEditType.UPDATE_ANNOTATIONS
|
|
148
|
-
ingredient_key: identifier_t.IdentifierKey
|
|
149
181
|
clear_first: bool
|
|
150
182
|
annotations: list[AnnotationEdit]
|
|
183
|
+
mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
|
|
184
|
+
|
|
185
|
+
|
|
186
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
187
|
+
@serial_class(
|
|
188
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditSetRole",
|
|
189
|
+
parse_require={"type"},
|
|
190
|
+
)
|
|
191
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
192
|
+
class RecipeInputEditSetRole(RecipeInputEditBase):
|
|
193
|
+
type: typing.Literal[RecipeInputEditType.SET_ROLE] = RecipeInputEditType.SET_ROLE
|
|
194
|
+
ingredient_key: identifier_t.IdentifierKey
|
|
195
|
+
ingredient_role_key: identifier_t.IdentifierKey | None
|
|
196
|
+
|
|
197
|
+
|
|
198
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
199
|
+
class PlaceholderType(StrEnum):
|
|
200
|
+
SUBCATEGORY = "subcategory"
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
204
|
+
class PlaceholderDisplayMode(StrEnum):
|
|
205
|
+
INLINE = "inline"
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
209
|
+
@serial_class(
|
|
210
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.PlaceholderBase",
|
|
211
|
+
)
|
|
212
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
213
|
+
class PlaceholderBase:
|
|
214
|
+
type: PlaceholderType
|
|
215
|
+
require_for_creation: bool = True
|
|
216
|
+
display_mode: PlaceholderDisplayMode = PlaceholderDisplayMode.INLINE
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
220
|
+
@serial_class(
|
|
221
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.SubcategoryPlaceholder",
|
|
222
|
+
parse_require={"type"},
|
|
223
|
+
)
|
|
224
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
225
|
+
class SubcategoryPlaceholder(PlaceholderBase):
|
|
226
|
+
type: typing.Literal[PlaceholderType.SUBCATEGORY] = PlaceholderType.SUBCATEGORY
|
|
227
|
+
subcategory_identifier: identifier_t.IdentifierKey
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
231
|
+
RecipeInputPlaceholder = typing.Annotated[
|
|
232
|
+
typing.Union[SubcategoryPlaceholder],
|
|
233
|
+
serial_union_annotation(
|
|
234
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputPlaceholder",
|
|
235
|
+
discriminator="type",
|
|
236
|
+
discriminator_map={
|
|
237
|
+
"subcategory": SubcategoryPlaceholder,
|
|
238
|
+
},
|
|
239
|
+
),
|
|
240
|
+
]
|
|
241
|
+
|
|
242
|
+
|
|
243
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
244
|
+
@serial_class(
|
|
245
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEditPlaceholder",
|
|
246
|
+
parse_require={"type"},
|
|
247
|
+
)
|
|
248
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
249
|
+
class RecipeInputEditPlaceholder(RecipeInputEditBase):
|
|
250
|
+
type: typing.Literal[RecipeInputEditType.SET_PLACEHOLDER] = RecipeInputEditType.SET_PLACEHOLDER
|
|
251
|
+
ingredient_key: identifier_t.IdentifierKey
|
|
252
|
+
placeholder: RecipeInputPlaceholder
|
|
253
|
+
mix_step_match_strategy: MixStepMatchStrategy = MixStepMatchStrategy.FIRST
|
|
151
254
|
|
|
152
255
|
|
|
153
256
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
154
257
|
RecipeInputEdit = typing.Annotated[
|
|
155
|
-
|
|
258
|
+
RecipeInputEditClearInputs | RecipeInputEditUpsertInput | RecipeInputEditAddInput | RecipeInputEditUpdateAnnotations | RecipeInputEditSetLot | RecipeInputEditChangeBasisViewed | RecipeInputEditAddInstructions | RecipeInputEditSetRole | RecipeInputEditPlaceholder,
|
|
156
259
|
serial_union_annotation(
|
|
260
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.RecipeInputEdit",
|
|
157
261
|
discriminator="type",
|
|
158
262
|
discriminator_map={
|
|
159
263
|
"clear_inputs": RecipeInputEditClearInputs,
|
|
@@ -163,13 +267,18 @@ RecipeInputEdit = typing.Annotated[
|
|
|
163
267
|
"set_lot": RecipeInputEditSetLot,
|
|
164
268
|
"change_basis": RecipeInputEditChangeBasisViewed,
|
|
165
269
|
"add_instructions": RecipeInputEditAddInstructions,
|
|
270
|
+
"set_role": RecipeInputEditSetRole,
|
|
271
|
+
"set_placeholder": RecipeInputEditPlaceholder,
|
|
166
272
|
},
|
|
167
273
|
),
|
|
168
274
|
]
|
|
169
275
|
|
|
170
276
|
|
|
171
277
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
172
|
-
@
|
|
278
|
+
@serial_class(
|
|
279
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.Arguments",
|
|
280
|
+
)
|
|
281
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
173
282
|
class Arguments:
|
|
174
283
|
recipe_key: identifier_t.IdentifierKey
|
|
175
284
|
recipe_workflow_step_identifier: recipe_workflow_steps_t.RecipeWorkflowStepIdentifier
|
|
@@ -177,7 +286,10 @@ class Arguments:
|
|
|
177
286
|
|
|
178
287
|
|
|
179
288
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
180
|
-
@
|
|
289
|
+
@serial_class(
|
|
290
|
+
named_type_path="sdk.api.recipes.edit_recipe_inputs.Data",
|
|
291
|
+
)
|
|
292
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
181
293
|
class Data:
|
|
182
294
|
pass
|
|
183
295
|
# DO NOT MODIFY -- This file is generated by type_spec
|