UncountablePythonSDK 0.0.82__py3-none-any.whl → 0.0.132__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/basic_auth.py +7 -0
- examples/create_ingredient_sdk.py +34 -0
- examples/download_files.py +26 -0
- examples/integration-server/jobs/materials_auto/concurrent_cron.py +11 -0
- examples/integration-server/jobs/materials_auto/example_cron.py +3 -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 +17 -9
- examples/integration-server/jobs/materials_auto/profile.yaml +61 -0
- examples/integration-server/pyproject.toml +10 -10
- examples/oauth.py +7 -0
- examples/set_recipe_metadata_file.py +1 -1
- examples/upload_files.py +1 -2
- pkgs/argument_parser/__init__.py +8 -0
- pkgs/argument_parser/_is_namedtuple.py +3 -0
- pkgs/argument_parser/argument_parser.py +196 -63
- pkgs/filesystem_utils/__init__.py +1 -0
- pkgs/filesystem_utils/_blob_session.py +144 -0
- pkgs/filesystem_utils/_gdrive_session.py +5 -5
- pkgs/filesystem_utils/_s3_session.py +2 -1
- pkgs/filesystem_utils/_sftp_session.py +6 -3
- pkgs/filesystem_utils/file_type_utils.py +30 -10
- 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 +40 -48
- pkgs/serialization/serial_generic.py +16 -0
- pkgs/serialization/serial_union.py +16 -16
- 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 +2 -4
- pkgs/type_spec/builder.py +248 -70
- pkgs/type_spec/builder_types.py +9 -0
- pkgs/type_spec/config.py +40 -7
- pkgs/type_spec/cross_output_links.py +99 -0
- pkgs/type_spec/emit_open_api.py +121 -34
- pkgs/type_spec/emit_open_api_util.py +5 -5
- pkgs/type_spec/emit_python.py +277 -86
- pkgs/type_spec/emit_typescript.py +102 -29
- pkgs/type_spec/emit_typescript_util.py +66 -10
- pkgs/type_spec/load_types.py +16 -3
- 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 +11 -8
- 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 +115 -22
- 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 +3 -3
- pkgs/type_spec/value_spec/__main__.py +26 -9
- pkgs/type_spec/value_spec/convert_type.py +18 -0
- pkgs/type_spec/value_spec/emit_python.py +13 -3
- pkgs/type_spec/value_spec/types.py +1 -1
- uncountable/core/async_batch.py +1 -1
- uncountable/core/client.py +133 -34
- uncountable/core/environment.py +3 -3
- uncountable/core/file_upload.py +39 -15
- uncountable/integration/cli.py +116 -23
- uncountable/integration/construct_client.py +3 -3
- uncountable/integration/executors/executors.py +12 -2
- uncountable/integration/executors/generic_upload_executor.py +66 -14
- uncountable/integration/http_server/__init__.py +5 -0
- uncountable/integration/http_server/types.py +69 -0
- uncountable/integration/job.py +192 -7
- uncountable/integration/queue_runner/command_server/__init__.py +4 -0
- uncountable/integration/queue_runner/command_server/command_client.py +65 -0
- uncountable/integration/queue_runner/command_server/command_server.py +83 -5
- uncountable/integration/queue_runner/command_server/constants.py +4 -0
- uncountable/integration/queue_runner/command_server/protocol/command_server.proto +36 -0
- uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +28 -11
- uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +77 -1
- uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +135 -0
- uncountable/integration/queue_runner/command_server/types.py +25 -2
- uncountable/integration/queue_runner/datastore/datastore_sqlite.py +168 -11
- uncountable/integration/queue_runner/datastore/interface.py +10 -0
- uncountable/integration/queue_runner/datastore/model.py +8 -1
- uncountable/integration/queue_runner/job_scheduler.py +63 -23
- uncountable/integration/queue_runner/queue_runner.py +10 -2
- uncountable/integration/queue_runner/worker.py +22 -17
- uncountable/integration/scan_profiles.py +1 -1
- uncountable/integration/scheduler.py +74 -25
- uncountable/integration/secret_retrieval/retrieve_secret.py +1 -1
- uncountable/integration/server.py +42 -12
- uncountable/integration/telemetry.py +63 -10
- uncountable/integration/webhook_server/entrypoint.py +39 -112
- uncountable/types/__init__.py +58 -1
- uncountable/types/api/batch/execute_batch.py +5 -6
- uncountable/types/api/batch/execute_batch_load_async.py +2 -3
- uncountable/types/api/chemical/convert_chemical_formats.py +10 -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 +7 -7
- uncountable/types/api/entity/create_entity.py +8 -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 +3 -4
- uncountable/types/api/entity/grant_entity_permissions.py +6 -6
- uncountable/types/api/entity/list_aggregate.py +79 -0
- uncountable/types/api/entity/list_entities.py +34 -10
- uncountable/types/api/entity/lock_entity.py +4 -4
- uncountable/types/api/entity/lookup_entity.py +116 -0
- uncountable/types/api/entity/resolve_entity_ids.py +5 -6
- uncountable/types/api/entity/set_entity_field_values.py +44 -0
- uncountable/types/api/entity/set_values.py +3 -3
- uncountable/types/api/entity/transition_entity_phase.py +14 -7
- uncountable/types/api/entity/unlock_entity.py +3 -3
- uncountable/types/api/equipment/associate_equipment_input.py +2 -3
- uncountable/types/api/field_options/upsert_field_options.py +7 -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 +6 -7
- uncountable/types/api/id_source/match_id_source.py +4 -5
- uncountable/types/api/input_groups/get_input_group_names.py +3 -4
- uncountable/types/api/inputs/create_inputs.py +10 -9
- uncountable/types/api/inputs/get_input_data.py +11 -12
- uncountable/types/api/inputs/get_input_names.py +6 -7
- uncountable/types/api/inputs/get_inputs_data.py +6 -7
- uncountable/types/api/inputs/set_input_attribute_values.py +5 -6
- uncountable/types/api/inputs/set_input_category.py +5 -5
- uncountable/types/api/inputs/set_input_subcategories.py +3 -3
- uncountable/types/api/inputs/set_intermediate_type.py +4 -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 +3 -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 +12 -13
- uncountable/types/api/outputs/get_output_names.py +5 -6
- uncountable/types/api/outputs/get_output_organization.py +173 -0
- uncountable/types/api/outputs/resolve_output_conditions.py +7 -8
- uncountable/types/api/permissions/set_core_permissions.py +16 -10
- uncountable/types/api/project/get_projects.py +6 -7
- uncountable/types/api/project/get_projects_data.py +7 -8
- uncountable/types/api/recipe_links/create_recipe_link.py +5 -5
- uncountable/types/api/recipe_links/remove_recipe_link.py +4 -4
- uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +6 -7
- uncountable/types/api/recipes/add_recipe_to_project.py +3 -3
- uncountable/types/api/recipes/add_time_series_data.py +64 -0
- uncountable/types/api/recipes/archive_recipes.py +4 -4
- uncountable/types/api/recipes/associate_recipe_as_input.py +5 -5
- uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -3
- uncountable/types/api/recipes/clear_recipe_outputs.py +3 -3
- uncountable/types/api/recipes/create_mix_order.py +44 -0
- uncountable/types/api/recipes/create_recipe.py +8 -9
- uncountable/types/api/recipes/create_recipes.py +8 -9
- uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -3
- uncountable/types/api/recipes/edit_recipe_inputs.py +101 -24
- uncountable/types/api/recipes/get_column_calculation_values.py +4 -5
- uncountable/types/api/recipes/get_curve.py +4 -5
- uncountable/types/api/recipes/get_recipe_calculations.py +6 -7
- uncountable/types/api/recipes/get_recipe_links.py +3 -4
- uncountable/types/api/recipes/get_recipe_names.py +3 -4
- uncountable/types/api/recipes/get_recipe_output_metadata.py +5 -6
- uncountable/types/api/recipes/get_recipes_data.py +62 -34
- uncountable/types/api/recipes/lock_recipes.py +9 -8
- uncountable/types/api/recipes/remove_recipe_from_project.py +3 -3
- uncountable/types/api/recipes/set_recipe_inputs.py +9 -10
- uncountable/types/api/recipes/set_recipe_metadata.py +3 -3
- uncountable/types/api/recipes/set_recipe_output_annotations.py +11 -12
- uncountable/types/api/recipes/set_recipe_output_file.py +5 -6
- uncountable/types/api/recipes/set_recipe_outputs.py +24 -13
- uncountable/types/api/recipes/set_recipe_tags.py +14 -9
- uncountable/types/api/recipes/set_recipe_total.py +59 -0
- uncountable/types/api/recipes/unarchive_recipes.py +3 -3
- uncountable/types/api/recipes/unlock_recipes.py +7 -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 +4 -4
- uncountable/types/api/uploader/complete_async_parse.py +46 -0
- uncountable/types/api/uploader/invoke_uploader.py +4 -5
- uncountable/types/api/user/__init__.py +1 -0
- uncountable/types/api/user/get_current_user_info.py +40 -0
- uncountable/types/async_batch.py +1 -1
- uncountable/types/async_batch_processor.py +506 -23
- uncountable/types/async_batch_t.py +35 -8
- uncountable/types/async_jobs.py +0 -1
- uncountable/types/async_jobs_t.py +1 -2
- uncountable/types/auth_retrieval.py +0 -1
- uncountable/types/auth_retrieval_t.py +6 -6
- uncountable/types/base.py +0 -1
- uncountable/types/base_t.py +11 -9
- uncountable/types/calculations.py +0 -1
- uncountable/types/calculations_t.py +1 -2
- uncountable/types/chemical_structure.py +0 -1
- uncountable/types/chemical_structure_t.py +5 -5
- uncountable/types/client_base.py +614 -69
- uncountable/types/client_config.py +1 -1
- uncountable/types/client_config_t.py +13 -3
- uncountable/types/curves.py +0 -1
- uncountable/types/curves_t.py +6 -7
- uncountable/types/data.py +12 -0
- uncountable/types/data_t.py +103 -0
- uncountable/types/entity.py +1 -1
- uncountable/types/entity_t.py +90 -10
- uncountable/types/experiment_groups.py +0 -1
- uncountable/types/experiment_groups_t.py +1 -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 +242 -9
- uncountable/types/fields.py +0 -1
- uncountable/types/fields_t.py +1 -2
- uncountable/types/generic_upload.py +0 -1
- uncountable/types/generic_upload_t.py +14 -14
- uncountable/types/id_source.py +0 -1
- uncountable/types/id_source_t.py +13 -7
- uncountable/types/identifier.py +0 -1
- uncountable/types/identifier_t.py +10 -5
- uncountable/types/input_attributes.py +0 -1
- uncountable/types/input_attributes_t.py +3 -4
- uncountable/types/inputs.py +0 -1
- uncountable/types/inputs_t.py +3 -4
- uncountable/types/integration_server.py +0 -1
- uncountable/types/integration_server_t.py +13 -4
- 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 +2 -1
- uncountable/types/job_definition_t.py +57 -32
- 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 +2 -3
- uncountable/types/overrides.py +0 -1
- uncountable/types/overrides_t.py +10 -4
- uncountable/types/permissions.py +0 -1
- uncountable/types/permissions_t.py +1 -2
- uncountable/types/phases.py +0 -1
- uncountable/types/phases_t.py +1 -2
- uncountable/types/post_base.py +0 -1
- uncountable/types/post_base_t.py +1 -2
- uncountable/types/queued_job.py +2 -1
- uncountable/types/queued_job_t.py +29 -12
- uncountable/types/recipe_identifiers.py +0 -1
- uncountable/types/recipe_identifiers_t.py +18 -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 +3 -4
- uncountable/types/recipe_metadata.py +0 -1
- uncountable/types/recipe_metadata_t.py +9 -10
- uncountable/types/recipe_output_metadata.py +0 -1
- uncountable/types/recipe_output_metadata_t.py +1 -2
- uncountable/types/recipe_tags.py +0 -1
- uncountable/types/recipe_tags_t.py +1 -2
- uncountable/types/recipe_workflow_steps.py +0 -1
- uncountable/types/recipe_workflow_steps_t.py +7 -7
- uncountable/types/recipes.py +0 -1
- uncountable/types/recipes_t.py +2 -2
- uncountable/types/response.py +0 -1
- uncountable/types/response_t.py +2 -2
- uncountable/types/secret_retrieval.py +0 -1
- uncountable/types/secret_retrieval_t.py +7 -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 +1 -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 +1 -2
- uncountable/types/webhook_job.py +1 -1
- uncountable/types/webhook_job_t.py +14 -3
- uncountable/types/workflows.py +0 -1
- uncountable/types/workflows_t.py +3 -4
- uncountablepythonsdk-0.0.132.dist-info/METADATA +64 -0
- uncountablepythonsdk-0.0.132.dist-info/RECORD +363 -0
- {UncountablePythonSDK-0.0.82.dist-info → uncountablepythonsdk-0.0.132.dist-info}/WHEEL +1 -1
- UncountablePythonSDK-0.0.82.dist-info/METADATA +0 -60
- UncountablePythonSDK-0.0.82.dist-info/RECORD +0 -292
- docs/quickstart.md +0 -19
- {UncountablePythonSDK-0.0.82.dist-info → uncountablepythonsdk-0.0.132.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
|
|
@@ -7,8 +6,10 @@ from __future__ import annotations
|
|
|
7
6
|
import typing # noqa: F401
|
|
8
7
|
import datetime # noqa: F401
|
|
9
8
|
from decimal import Decimal # noqa: F401
|
|
9
|
+
from enum import StrEnum
|
|
10
10
|
import dataclasses
|
|
11
11
|
from pkgs.serialization import serial_class
|
|
12
|
+
from pkgs.serialization import serial_string_enum
|
|
12
13
|
from ... import base_t
|
|
13
14
|
from ... import experiment_groups_t
|
|
14
15
|
from ... import inputs_t
|
|
@@ -25,7 +26,9 @@ __all__: list[str] = [
|
|
|
25
26
|
"ENDPOINT_PATH",
|
|
26
27
|
"Recipe",
|
|
27
28
|
"RecipeInput",
|
|
29
|
+
"RecipeLockStatus",
|
|
28
30
|
"RecipeOutput",
|
|
31
|
+
"RecipeOutputInclusion",
|
|
29
32
|
"RecipeStep",
|
|
30
33
|
"RecipeStepGroup",
|
|
31
34
|
"RecipeStepRelationship",
|
|
@@ -41,12 +44,25 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipes_data"
|
|
|
41
44
|
@serial_class(
|
|
42
45
|
named_type_path="sdk.api.recipes.get_recipes_data.Arguments",
|
|
43
46
|
)
|
|
44
|
-
@dataclasses.dataclass(kw_only=True)
|
|
47
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
45
48
|
class Arguments:
|
|
46
|
-
recipe_ids:
|
|
47
|
-
project_id:
|
|
48
|
-
offset:
|
|
49
|
-
limit:
|
|
49
|
+
recipe_ids: list[base_t.ObjectId] | None = None
|
|
50
|
+
project_id: base_t.ObjectId | None = None
|
|
51
|
+
offset: int | None = None
|
|
52
|
+
limit: int | None = None
|
|
53
|
+
empty_output_behavior: RecipeOutputInclusion | None = None
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
57
|
+
@serial_string_enum(
|
|
58
|
+
labels={
|
|
59
|
+
"include_null": "Include Outputs without values",
|
|
60
|
+
"exclude_null": "Exclude Outputs without values",
|
|
61
|
+
},
|
|
62
|
+
)
|
|
63
|
+
class RecipeOutputInclusion(StrEnum):
|
|
64
|
+
INCLUDE_NULL = "include_null"
|
|
65
|
+
EXCLUDE_NULL = "exclude_null"
|
|
50
66
|
|
|
51
67
|
|
|
52
68
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -55,15 +71,15 @@ class Arguments:
|
|
|
55
71
|
unconverted_values={"quantity_json"},
|
|
56
72
|
to_string_values={"quantity_dec"},
|
|
57
73
|
)
|
|
58
|
-
@dataclasses.dataclass(kw_only=True)
|
|
74
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
59
75
|
class RecipeOutput:
|
|
60
76
|
id: base_t.ObjectId
|
|
61
77
|
output_id: base_t.ObjectId
|
|
62
78
|
replicate_num: int
|
|
63
79
|
quantity_json: base_t.JsonValue
|
|
64
|
-
curve_id:
|
|
65
|
-
output_condition_id:
|
|
66
|
-
quantity_dec:
|
|
80
|
+
curve_id: base_t.ObjectId | None
|
|
81
|
+
output_condition_id: base_t.ObjectId | None
|
|
82
|
+
quantity_dec: Decimal | None = None
|
|
67
83
|
|
|
68
84
|
|
|
69
85
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -72,19 +88,19 @@ class RecipeOutput:
|
|
|
72
88
|
unconverted_values={"quantity_json"},
|
|
73
89
|
to_string_values={"quantity_dec"},
|
|
74
90
|
)
|
|
75
|
-
@dataclasses.dataclass(kw_only=True)
|
|
91
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
76
92
|
class ConditionParameterValue:
|
|
77
93
|
condition_parameter_id: base_t.ObjectId
|
|
78
94
|
condition_parameter_name: str
|
|
79
95
|
quantity_json: base_t.JsonValue
|
|
80
|
-
quantity_dec:
|
|
96
|
+
quantity_dec: Decimal | None = None
|
|
81
97
|
|
|
82
98
|
|
|
83
99
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
84
100
|
@serial_class(
|
|
85
101
|
named_type_path="sdk.api.recipes.get_recipes_data.SimpleOutputCondition",
|
|
86
102
|
)
|
|
87
|
-
@dataclasses.dataclass(kw_only=True)
|
|
103
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
88
104
|
class SimpleOutputCondition:
|
|
89
105
|
output_condition_id: base_t.ObjectId
|
|
90
106
|
condition_parameter_values: list[ConditionParameterValue]
|
|
@@ -96,40 +112,40 @@ class SimpleOutputCondition:
|
|
|
96
112
|
unconverted_values={"actual_quantity_json", "quantity_json"},
|
|
97
113
|
to_string_values={"actual_quantity_dec", "quantity_dec"},
|
|
98
114
|
)
|
|
99
|
-
@dataclasses.dataclass(kw_only=True)
|
|
115
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
100
116
|
class RecipeInput:
|
|
101
117
|
id: base_t.ObjectId
|
|
102
118
|
input_id: base_t.ObjectId
|
|
103
|
-
input_lot_recipe_id:
|
|
119
|
+
input_lot_recipe_id: base_t.ObjectId | None
|
|
104
120
|
recipe_step_id: base_t.ObjectId
|
|
105
121
|
quantity_json: base_t.JsonValue
|
|
106
|
-
curve_id:
|
|
122
|
+
curve_id: base_t.ObjectId | None
|
|
107
123
|
actual_quantity_json: base_t.JsonValue
|
|
108
124
|
behavior: str
|
|
109
|
-
ingredient_role_id:
|
|
110
|
-
quantity_dec:
|
|
111
|
-
actual_quantity_dec:
|
|
125
|
+
ingredient_role_id: base_t.ObjectId | None
|
|
126
|
+
quantity_dec: Decimal | None = None
|
|
127
|
+
actual_quantity_dec: Decimal | None = None
|
|
112
128
|
|
|
113
129
|
|
|
114
130
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
115
131
|
@serial_class(
|
|
116
132
|
named_type_path="sdk.api.recipes.get_recipes_data.RecipeStep",
|
|
117
133
|
)
|
|
118
|
-
@dataclasses.dataclass(kw_only=True)
|
|
134
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
119
135
|
class RecipeStep:
|
|
120
|
-
name:
|
|
136
|
+
name: str | None
|
|
121
137
|
recipe_step_id: base_t.ObjectId
|
|
122
138
|
recipe_step_number: int
|
|
123
|
-
instructions:
|
|
139
|
+
instructions: str | None = None
|
|
124
140
|
|
|
125
141
|
|
|
126
142
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
127
143
|
@serial_class(
|
|
128
144
|
named_type_path="sdk.api.recipes.get_recipes_data.RecipeStepGroup",
|
|
129
145
|
)
|
|
130
|
-
@dataclasses.dataclass(kw_only=True)
|
|
146
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
131
147
|
class RecipeStepGroup:
|
|
132
|
-
name:
|
|
148
|
+
name: str | None
|
|
133
149
|
recipe_steps: list[RecipeStep]
|
|
134
150
|
|
|
135
151
|
|
|
@@ -137,8 +153,9 @@ class RecipeStepGroup:
|
|
|
137
153
|
@serial_class(
|
|
138
154
|
named_type_path="sdk.api.recipes.get_recipes_data.RecipeWorkflowStep",
|
|
139
155
|
)
|
|
140
|
-
@dataclasses.dataclass(kw_only=True)
|
|
156
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
141
157
|
class RecipeWorkflowStep:
|
|
158
|
+
recipe_workflow_step_name: str | None
|
|
142
159
|
recipe_workflow_step_id: base_t.ObjectId
|
|
143
160
|
workflow_step_id: base_t.ObjectId
|
|
144
161
|
recipe_step_groups: list[RecipeStepGroup]
|
|
@@ -149,27 +166,37 @@ class RecipeWorkflowStep:
|
|
|
149
166
|
named_type_path="sdk.api.recipes.get_recipes_data.RecipeStepRelationship",
|
|
150
167
|
to_string_values={"actual_quantity_dec", "quantity_dec"},
|
|
151
168
|
)
|
|
152
|
-
@dataclasses.dataclass(kw_only=True)
|
|
169
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
153
170
|
class RecipeStepRelationship:
|
|
154
171
|
step_relationship_id: base_t.ObjectId
|
|
155
|
-
name:
|
|
172
|
+
name: str | None
|
|
156
173
|
source_recipe_workflow_step_id: base_t.ObjectId
|
|
157
174
|
target_recipe_step_id: base_t.ObjectId
|
|
158
|
-
quantity_dec:
|
|
159
|
-
actual_quantity_dec:
|
|
175
|
+
quantity_dec: Decimal | None = None
|
|
176
|
+
actual_quantity_dec: Decimal | None = None
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
180
|
+
@serial_class(
|
|
181
|
+
named_type_path="sdk.api.recipes.get_recipes_data.RecipeLockStatus",
|
|
182
|
+
)
|
|
183
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
184
|
+
class RecipeLockStatus:
|
|
185
|
+
has_locked_inputs: bool
|
|
186
|
+
has_locked_outputs: bool
|
|
160
187
|
|
|
161
188
|
|
|
162
189
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
163
190
|
@serial_class(
|
|
164
191
|
named_type_path="sdk.api.recipes.get_recipes_data.Recipe",
|
|
165
192
|
)
|
|
166
|
-
@dataclasses.dataclass(kw_only=True)
|
|
193
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
167
194
|
class Recipe:
|
|
168
195
|
recipe_id: base_t.ObjectId
|
|
169
196
|
create_datetime: str
|
|
170
197
|
last_modified_datetime: str
|
|
171
198
|
name: str
|
|
172
|
-
notes:
|
|
199
|
+
notes: str | None
|
|
173
200
|
workflow_id: base_t.ObjectId
|
|
174
201
|
metadata: list[recipe_metadata_t.RecipeMetadata]
|
|
175
202
|
inputs: list[RecipeInput]
|
|
@@ -178,15 +205,16 @@ class Recipe:
|
|
|
178
205
|
tag_ids: list[base_t.ObjectId]
|
|
179
206
|
experiment_group_ids: list[base_t.ObjectId]
|
|
180
207
|
step_relationships: list[RecipeStepRelationship]
|
|
181
|
-
|
|
182
|
-
|
|
208
|
+
recipe_lock_status: RecipeLockStatus
|
|
209
|
+
creating_user_id: base_t.ObjectId | None = None
|
|
210
|
+
barcode_value: str | None = None
|
|
183
211
|
|
|
184
212
|
|
|
185
213
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
186
214
|
@serial_class(
|
|
187
215
|
named_type_path="sdk.api.recipes.get_recipes_data.Data",
|
|
188
216
|
)
|
|
189
|
-
@dataclasses.dataclass(kw_only=True)
|
|
217
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
190
218
|
class Data:
|
|
191
219
|
recipes: list[Recipe]
|
|
192
220
|
workflows: list[workflows_t.SimpleWorkflow]
|
|
@@ -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,9 +6,11 @@ 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
|
|
12
|
+
from ... import async_batch_t
|
|
13
|
+
from ... import base_t
|
|
13
14
|
from ... import identifier_t
|
|
14
15
|
|
|
15
16
|
__all__: list[str] = [
|
|
@@ -35,7 +36,7 @@ class RecipeLockType(StrEnum):
|
|
|
35
36
|
@serial_class(
|
|
36
37
|
named_type_path="sdk.api.recipes.lock_recipes.RecipeLockBase",
|
|
37
38
|
)
|
|
38
|
-
@dataclasses.dataclass(kw_only=True)
|
|
39
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
39
40
|
class RecipeLockBase:
|
|
40
41
|
recipe: identifier_t.IdentifierKey
|
|
41
42
|
|
|
@@ -44,20 +45,20 @@ class RecipeLockBase:
|
|
|
44
45
|
@serial_class(
|
|
45
46
|
named_type_path="sdk.api.recipes.lock_recipes.Arguments",
|
|
46
47
|
)
|
|
47
|
-
@dataclasses.dataclass(kw_only=True)
|
|
48
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
48
49
|
class Arguments:
|
|
49
50
|
type: RecipeLockType = RecipeLockType.ALL
|
|
50
51
|
recipes: list[identifier_t.IdentifierKey]
|
|
51
52
|
globally_removable: bool
|
|
52
|
-
lock_samples:
|
|
53
|
-
comments:
|
|
53
|
+
lock_samples: bool | None = None
|
|
54
|
+
comments: str | None = None
|
|
54
55
|
|
|
55
56
|
|
|
56
57
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
57
58
|
@serial_class(
|
|
58
59
|
named_type_path="sdk.api.recipes.lock_recipes.Data",
|
|
59
60
|
)
|
|
60
|
-
@dataclasses.dataclass(kw_only=True)
|
|
61
|
-
class Data:
|
|
61
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
62
|
+
class Data(async_batch_t.AsyncBatchActionReturn):
|
|
62
63
|
pass
|
|
63
64
|
# 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
|
|
@@ -9,6 +8,7 @@ import datetime # noqa: F401
|
|
|
9
8
|
from decimal import Decimal # noqa: F401
|
|
10
9
|
import dataclasses
|
|
11
10
|
from pkgs.serialization import serial_class
|
|
11
|
+
from ... import base_t
|
|
12
12
|
from ... import identifier_t
|
|
13
13
|
|
|
14
14
|
__all__: list[str] = [
|
|
@@ -26,7 +26,7 @@ ENDPOINT_PATH = "api/external/recipes/remove_recipe_from_project"
|
|
|
26
26
|
@serial_class(
|
|
27
27
|
named_type_path="sdk.api.recipes.remove_recipe_from_project.Arguments",
|
|
28
28
|
)
|
|
29
|
-
@dataclasses.dataclass(kw_only=True)
|
|
29
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
30
30
|
class Arguments:
|
|
31
31
|
recipe_key: identifier_t.IdentifierKey
|
|
32
32
|
project_key: identifier_t.IdentifierKey
|
|
@@ -36,7 +36,7 @@ class Arguments:
|
|
|
36
36
|
@serial_class(
|
|
37
37
|
named_type_path="sdk.api.recipes.remove_recipe_from_project.Data",
|
|
38
38
|
)
|
|
39
|
-
@dataclasses.dataclass(kw_only=True)
|
|
39
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
40
40
|
class Data:
|
|
41
41
|
pass
|
|
42
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
|
|
@@ -28,23 +27,23 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_inputs"
|
|
|
28
27
|
named_type_path="sdk.api.recipes.set_recipe_inputs.RecipeInputValue",
|
|
29
28
|
to_string_values={"value_numeric"},
|
|
30
29
|
)
|
|
31
|
-
@dataclasses.dataclass(kw_only=True)
|
|
30
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
32
31
|
class RecipeInputValue:
|
|
33
32
|
recipe_id: base_t.ObjectId
|
|
34
33
|
input_id: base_t.ObjectId
|
|
35
|
-
recipe_step_id:
|
|
36
|
-
value_numeric:
|
|
37
|
-
value_str:
|
|
38
|
-
set_actual_value:
|
|
39
|
-
lot_recipe_id:
|
|
40
|
-
remove:
|
|
34
|
+
recipe_step_id: base_t.ObjectId | None = None
|
|
35
|
+
value_numeric: Decimal | None = None
|
|
36
|
+
value_str: str | None = None
|
|
37
|
+
set_actual_value: bool | None = None
|
|
38
|
+
lot_recipe_id: base_t.ObjectId | None = None
|
|
39
|
+
remove: bool | None = None
|
|
41
40
|
|
|
42
41
|
|
|
43
42
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
44
43
|
@serial_class(
|
|
45
44
|
named_type_path="sdk.api.recipes.set_recipe_inputs.Arguments",
|
|
46
45
|
)
|
|
47
|
-
@dataclasses.dataclass(kw_only=True)
|
|
46
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
48
47
|
class Arguments:
|
|
49
48
|
input_data: list[RecipeInputValue]
|
|
50
49
|
|
|
@@ -53,7 +52,7 @@ class Arguments:
|
|
|
53
52
|
@serial_class(
|
|
54
53
|
named_type_path="sdk.api.recipes.set_recipe_inputs.Data",
|
|
55
54
|
)
|
|
56
|
-
@dataclasses.dataclass(kw_only=True)
|
|
55
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
57
56
|
class Data:
|
|
58
57
|
pass
|
|
59
58
|
# 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
|
|
@@ -9,6 +8,7 @@ import datetime # noqa: F401
|
|
|
9
8
|
from decimal import Decimal # noqa: F401
|
|
10
9
|
import dataclasses
|
|
11
10
|
from pkgs.serialization import serial_class
|
|
11
|
+
from ... import base_t
|
|
12
12
|
from ... import identifier_t
|
|
13
13
|
from ... import recipe_metadata_t
|
|
14
14
|
|
|
@@ -27,7 +27,7 @@ ENDPOINT_PATH = "api/external/recipes/set_recipe_metadata"
|
|
|
27
27
|
@serial_class(
|
|
28
28
|
named_type_path="sdk.api.recipes.set_recipe_metadata.Arguments",
|
|
29
29
|
)
|
|
30
|
-
@dataclasses.dataclass(kw_only=True)
|
|
30
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
31
31
|
class Arguments:
|
|
32
32
|
recipe_key: identifier_t.IdentifierKey
|
|
33
33
|
recipe_metadata: list[recipe_metadata_t.MetadataValue]
|
|
@@ -37,7 +37,7 @@ class Arguments:
|
|
|
37
37
|
@serial_class(
|
|
38
38
|
named_type_path="sdk.api.recipes.set_recipe_metadata.Data",
|
|
39
39
|
)
|
|
40
|
-
@dataclasses.dataclass(kw_only=True)
|
|
40
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
41
41
|
class Data:
|
|
42
42
|
pass
|
|
43
43
|
# 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,7 +6,7 @@ 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
|
|
@@ -36,11 +35,11 @@ ENDPOINT_PATH = "api/external/recipes/set_recipe_output_annotations"
|
|
|
36
35
|
named_type_path="sdk.api.recipes.set_recipe_output_annotations.AnnotationEdit",
|
|
37
36
|
to_string_values={"lower_value", "upper_value"},
|
|
38
37
|
)
|
|
39
|
-
@dataclasses.dataclass(kw_only=True)
|
|
38
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
40
39
|
class AnnotationEdit:
|
|
41
40
|
annotation_type_key: identifier_t.IdentifierKey
|
|
42
|
-
lower_value:
|
|
43
|
-
upper_value:
|
|
41
|
+
lower_value: Decimal | None = None
|
|
42
|
+
upper_value: Decimal | None = None
|
|
44
43
|
|
|
45
44
|
|
|
46
45
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -53,13 +52,13 @@ class AnnotationUpdateType(StrEnum):
|
|
|
53
52
|
@serial_class(
|
|
54
53
|
named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputEditBase",
|
|
55
54
|
)
|
|
56
|
-
@dataclasses.dataclass(kw_only=True)
|
|
55
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
57
56
|
class RecipeOutputEditBase:
|
|
58
57
|
recipe_id: base_t.ObjectId
|
|
59
58
|
output_id: base_t.ObjectId
|
|
60
59
|
experiment_num: int
|
|
61
60
|
annotations: list[AnnotationEdit]
|
|
62
|
-
condition_id:
|
|
61
|
+
condition_id: base_t.ObjectId | None = None
|
|
63
62
|
|
|
64
63
|
|
|
65
64
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -67,7 +66,7 @@ class RecipeOutputEditBase:
|
|
|
67
66
|
named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputMergeAnnotations",
|
|
68
67
|
parse_require={"type"},
|
|
69
68
|
)
|
|
70
|
-
@dataclasses.dataclass(kw_only=True)
|
|
69
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
71
70
|
class RecipeOutputMergeAnnotations(RecipeOutputEditBase):
|
|
72
71
|
type: typing.Literal[AnnotationUpdateType.MERGE] = AnnotationUpdateType.MERGE
|
|
73
72
|
|
|
@@ -77,14 +76,14 @@ class RecipeOutputMergeAnnotations(RecipeOutputEditBase):
|
|
|
77
76
|
named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputReplaceAnnotations",
|
|
78
77
|
parse_require={"type"},
|
|
79
78
|
)
|
|
80
|
-
@dataclasses.dataclass(kw_only=True)
|
|
79
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
81
80
|
class RecipeOutputReplaceAnnotations(RecipeOutputEditBase):
|
|
82
81
|
type: typing.Literal[AnnotationUpdateType.REPLACE] = AnnotationUpdateType.REPLACE
|
|
83
82
|
|
|
84
83
|
|
|
85
84
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
86
85
|
RecipeOutputUpdateAnnotations = typing.Annotated[
|
|
87
|
-
|
|
86
|
+
RecipeOutputMergeAnnotations | RecipeOutputReplaceAnnotations,
|
|
88
87
|
serial_union_annotation(
|
|
89
88
|
named_type_path="sdk.api.recipes.set_recipe_output_annotations.RecipeOutputUpdateAnnotations",
|
|
90
89
|
discriminator="type",
|
|
@@ -100,7 +99,7 @@ RecipeOutputUpdateAnnotations = typing.Annotated[
|
|
|
100
99
|
@serial_class(
|
|
101
100
|
named_type_path="sdk.api.recipes.set_recipe_output_annotations.Arguments",
|
|
102
101
|
)
|
|
103
|
-
@dataclasses.dataclass(kw_only=True)
|
|
102
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
104
103
|
class Arguments:
|
|
105
104
|
updates: list[RecipeOutputUpdateAnnotations]
|
|
106
105
|
|
|
@@ -109,7 +108,7 @@ class Arguments:
|
|
|
109
108
|
@serial_class(
|
|
110
109
|
named_type_path="sdk.api.recipes.set_recipe_output_annotations.Data",
|
|
111
110
|
)
|
|
112
|
-
@dataclasses.dataclass(kw_only=True)
|
|
111
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
113
112
|
class Data:
|
|
114
113
|
pass
|
|
115
114
|
# 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
|
|
@@ -28,20 +27,20 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_output_file"
|
|
|
28
27
|
@serial_class(
|
|
29
28
|
named_type_path="sdk.api.recipes.set_recipe_output_file.RecipeOutputFileValue",
|
|
30
29
|
)
|
|
31
|
-
@dataclasses.dataclass(kw_only=True)
|
|
30
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
32
31
|
class RecipeOutputFileValue:
|
|
33
32
|
recipe_id: base_t.ObjectId
|
|
34
33
|
output_id: base_t.ObjectId
|
|
35
34
|
experiment_num: int
|
|
36
|
-
condition_id:
|
|
37
|
-
file_id:
|
|
35
|
+
condition_id: base_t.ObjectId | None = None
|
|
36
|
+
file_id: base_t.ObjectId | None = None
|
|
38
37
|
|
|
39
38
|
|
|
40
39
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
41
40
|
@serial_class(
|
|
42
41
|
named_type_path="sdk.api.recipes.set_recipe_output_file.Arguments",
|
|
43
42
|
)
|
|
44
|
-
@dataclasses.dataclass(kw_only=True)
|
|
43
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
45
44
|
class Arguments:
|
|
46
45
|
output_file_data: RecipeOutputFileValue
|
|
47
46
|
|
|
@@ -50,7 +49,7 @@ class Arguments:
|
|
|
50
49
|
@serial_class(
|
|
51
50
|
named_type_path="sdk.api.recipes.set_recipe_output_file.Data",
|
|
52
51
|
)
|
|
53
|
-
@dataclasses.dataclass(kw_only=True)
|
|
52
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
54
53
|
class Data(response_t.Response):
|
|
55
54
|
pass
|
|
56
55
|
# 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,9 +6,11 @@ from __future__ import annotations
|
|
|
7
6
|
import typing # noqa: F401
|
|
8
7
|
import datetime # noqa: F401
|
|
9
8
|
from decimal import Decimal # noqa: F401
|
|
9
|
+
from enum import StrEnum
|
|
10
10
|
import dataclasses
|
|
11
11
|
from pkgs.serialization import serial_class
|
|
12
12
|
from ... import base_t
|
|
13
|
+
from ... import data_t
|
|
13
14
|
from ... import field_values_t
|
|
14
15
|
from ... import recipes_t
|
|
15
16
|
from ... import response_t
|
|
@@ -20,6 +21,7 @@ __all__: list[str] = [
|
|
|
20
21
|
"Data",
|
|
21
22
|
"ENDPOINT_METHOD",
|
|
22
23
|
"ENDPOINT_PATH",
|
|
24
|
+
"NullBehavior",
|
|
23
25
|
"RecipeOutputValue",
|
|
24
26
|
]
|
|
25
27
|
|
|
@@ -31,10 +33,16 @@ ENDPOINT_PATH = "api/external/recipes/external_set_recipe_outputs"
|
|
|
31
33
|
@serial_class(
|
|
32
34
|
named_type_path="sdk.api.recipes.set_recipe_outputs.CurveValues",
|
|
33
35
|
)
|
|
34
|
-
@dataclasses.dataclass(kw_only=True)
|
|
36
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
35
37
|
class CurveValues:
|
|
36
|
-
x_values: list[
|
|
37
|
-
y_values: list[
|
|
38
|
+
x_values: list[Decimal | None]
|
|
39
|
+
y_values: list[Decimal | None]
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
43
|
+
class NullBehavior(StrEnum):
|
|
44
|
+
DO_NOTHING = "do_nothing"
|
|
45
|
+
ENSURE_EXISTS = "ensure_exists"
|
|
38
46
|
|
|
39
47
|
|
|
40
48
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -42,24 +50,27 @@ class CurveValues:
|
|
|
42
50
|
named_type_path="sdk.api.recipes.set_recipe_outputs.RecipeOutputValue",
|
|
43
51
|
to_string_values={"value_numeric"},
|
|
44
52
|
)
|
|
45
|
-
@dataclasses.dataclass(kw_only=True)
|
|
53
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
46
54
|
class RecipeOutputValue:
|
|
47
55
|
recipe_id: base_t.ObjectId
|
|
48
56
|
output_id: base_t.ObjectId
|
|
49
57
|
experiment_num: int
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
58
|
+
null_behavior: NullBehavior | None = NullBehavior.DO_NOTHING
|
|
59
|
+
condition_id: base_t.ObjectId | None = None
|
|
60
|
+
value_numeric: Decimal | None = None
|
|
61
|
+
value_str: str | None = None
|
|
62
|
+
value_curve: CurveValues | None = None
|
|
63
|
+
value_color: data_t.SupportedColorFormatColor | None = None
|
|
64
|
+
value_ingredient_id: base_t.ObjectId | None = None
|
|
65
|
+
formatting: recipes_t.RecipeAttributeFormatting | None = None
|
|
66
|
+
field_values: list[field_values_t.ArgumentValueRefName | field_values_t.ArgumentValueId] | None = None
|
|
56
67
|
|
|
57
68
|
|
|
58
69
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
59
70
|
@serial_class(
|
|
60
71
|
named_type_path="sdk.api.recipes.set_recipe_outputs.Arguments",
|
|
61
72
|
)
|
|
62
|
-
@dataclasses.dataclass(kw_only=True)
|
|
73
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
63
74
|
class Arguments:
|
|
64
75
|
output_data: list[RecipeOutputValue]
|
|
65
76
|
|
|
@@ -68,7 +79,7 @@ class Arguments:
|
|
|
68
79
|
@serial_class(
|
|
69
80
|
named_type_path="sdk.api.recipes.set_recipe_outputs.Data",
|
|
70
81
|
)
|
|
71
|
-
@dataclasses.dataclass(kw_only=True)
|
|
82
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
72
83
|
class Data(response_t.Response):
|
|
73
84
|
pass
|
|
74
85
|
# DO NOT MODIFY -- This file is generated by type_spec
|