UncountablePythonSDK 0.0.111__py3-none-any.whl → 0.0.113__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 +2 -2
- docs/justfile +1 -1
- examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +35 -0
- examples/integration-server/jobs/materials_auto/profile.yaml +9 -0
- examples/integration-server/pyproject.toml +2 -2
- pkgs/argument_parser/argument_parser.py +6 -3
- pkgs/filesystem_utils/_blob_session.py +8 -1
- pkgs/type_spec/emit_python.py +9 -3
- pkgs/type_spec/emit_typescript_util.py +16 -1
- pkgs/type_spec/parts/base.py.prepart +4 -0
- pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
- pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +294 -0
- pkgs/type_spec/value_spec/convert_type.py +13 -0
- uncountable/core/client.py +7 -4
- uncountable/integration/executors/generic_upload_executor.py +3 -2
- uncountable/integration/job.py +24 -1
- uncountable/integration/queue_runner/datastore/datastore_sqlite.py +3 -2
- uncountable/integration/scan_profiles.py +1 -1
- uncountable/integration/scheduler.py +4 -3
- uncountable/integration/secret_retrieval/retrieve_secret.py +1 -1
- uncountable/types/__init__.py +2 -0
- uncountable/types/api/batch/execute_batch.py +4 -4
- uncountable/types/api/batch/execute_batch_load_async.py +2 -2
- uncountable/types/api/chemical/convert_chemical_formats.py +3 -3
- uncountable/types/api/condition_parameters/upsert_condition_match.py +4 -3
- uncountable/types/api/entity/create_entities.py +3 -3
- uncountable/types/api/entity/create_entity.py +3 -3
- uncountable/types/api/entity/create_or_update_entity.py +3 -2
- uncountable/types/api/entity/get_entities_data.py +3 -3
- uncountable/types/api/entity/grant_entity_permissions.py +3 -2
- uncountable/types/api/entity/list_entities.py +4 -4
- uncountable/types/api/entity/lock_entity.py +3 -2
- uncountable/types/api/entity/lookup_entity.py +5 -5
- uncountable/types/api/entity/resolve_entity_ids.py +3 -3
- uncountable/types/api/entity/set_entity_field_values.py +3 -2
- uncountable/types/api/entity/set_values.py +3 -2
- uncountable/types/api/entity/transition_entity_phase.py +5 -4
- uncountable/types/api/entity/unlock_entity.py +3 -2
- uncountable/types/api/equipment/associate_equipment_input.py +2 -2
- uncountable/types/api/field_options/upsert_field_options.py +4 -3
- uncountable/types/api/files/download_file.py +4 -3
- uncountable/types/api/id_source/list_id_source.py +3 -3
- uncountable/types/api/id_source/match_id_source.py +3 -3
- uncountable/types/api/input_groups/get_input_group_names.py +3 -3
- uncountable/types/api/inputs/create_inputs.py +4 -4
- uncountable/types/api/inputs/get_input_data.py +6 -6
- uncountable/types/api/inputs/get_input_names.py +3 -3
- uncountable/types/api/inputs/get_inputs_data.py +6 -6
- uncountable/types/api/inputs/set_input_attribute_values.py +3 -3
- uncountable/types/api/inputs/set_input_category.py +3 -2
- uncountable/types/api/inputs/set_input_subcategories.py +3 -2
- uncountable/types/api/inputs/set_intermediate_type.py +3 -2
- uncountable/types/api/material_families/update_entity_material_families.py +2 -2
- uncountable/types/api/outputs/get_output_data.py +6 -6
- uncountable/types/api/outputs/get_output_names.py +3 -3
- uncountable/types/api/outputs/resolve_output_conditions.py +5 -5
- uncountable/types/api/permissions/set_core_permissions.py +7 -6
- uncountable/types/api/project/get_projects.py +3 -3
- uncountable/types/api/project/get_projects_data.py +3 -3
- uncountable/types/api/recipe_links/create_recipe_link.py +3 -2
- uncountable/types/api/recipe_links/remove_recipe_link.py +3 -2
- uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -3
- uncountable/types/api/recipes/add_recipe_to_project.py +3 -2
- uncountable/types/api/recipes/add_time_series_data.py +4 -3
- uncountable/types/api/recipes/archive_recipes.py +3 -2
- uncountable/types/api/recipes/associate_recipe_as_input.py +3 -2
- uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -2
- uncountable/types/api/recipes/clear_recipe_outputs.py +3 -2
- uncountable/types/api/recipes/create_recipe.py +2 -2
- uncountable/types/api/recipes/create_recipes.py +4 -4
- uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -2
- uncountable/types/api/recipes/edit_recipe_inputs.py +17 -16
- uncountable/types/api/recipes/get_column_calculation_values.py +3 -3
- uncountable/types/api/recipes/get_curve.py +2 -2
- uncountable/types/api/recipes/get_recipe_calculations.py +3 -3
- uncountable/types/api/recipes/get_recipe_links.py +2 -2
- uncountable/types/api/recipes/get_recipe_names.py +3 -3
- uncountable/types/api/recipes/get_recipe_output_metadata.py +3 -3
- uncountable/types/api/recipes/get_recipes_data.py +11 -11
- uncountable/types/api/recipes/lock_recipes.py +4 -3
- uncountable/types/api/recipes/remove_recipe_from_project.py +3 -2
- uncountable/types/api/recipes/set_recipe_inputs.py +3 -3
- uncountable/types/api/recipes/set_recipe_metadata.py +3 -2
- uncountable/types/api/recipes/set_recipe_output_annotations.py +6 -6
- uncountable/types/api/recipes/set_recipe_output_file.py +3 -3
- uncountable/types/api/recipes/set_recipe_outputs.py +5 -5
- uncountable/types/api/recipes/set_recipe_tags.py +6 -6
- uncountable/types/api/recipes/unarchive_recipes.py +3 -2
- uncountable/types/api/recipes/unlock_recipes.py +3 -2
- 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 +3 -2
- uncountable/types/api/uploader/invoke_uploader.py +2 -2
- uncountable/types/async_batch_processor.py +34 -0
- uncountable/types/async_batch_t.py +6 -5
- uncountable/types/auth_retrieval_t.py +4 -3
- uncountable/types/base_t.py +4 -0
- uncountable/types/calculations_t.py +1 -1
- uncountable/types/chemical_structure_t.py +2 -1
- uncountable/types/client_base.py +21 -0
- uncountable/types/client_config_t.py +2 -1
- uncountable/types/curves_t.py +2 -2
- uncountable/types/data.py +2 -2
- uncountable/types/data_t.py +42 -32
- uncountable/types/entity_t.py +3 -3
- uncountable/types/experiment_groups_t.py +1 -1
- uncountable/types/field_values_t.py +20 -20
- uncountable/types/fields_t.py +1 -1
- uncountable/types/generic_upload_t.py +7 -6
- uncountable/types/id_source_t.py +5 -4
- uncountable/types/identifier_t.py +3 -3
- uncountable/types/input_attributes_t.py +1 -1
- uncountable/types/inputs_t.py +1 -1
- uncountable/types/integration_server_t.py +2 -1
- uncountable/types/job_definition_t.py +14 -13
- uncountable/types/outputs_t.py +1 -1
- uncountable/types/overrides_t.py +3 -2
- uncountable/types/phases_t.py +1 -1
- uncountable/types/queued_job_t.py +7 -7
- uncountable/types/recipe_identifiers_t.py +3 -3
- uncountable/types/recipe_links_t.py +1 -1
- uncountable/types/recipe_metadata_t.py +3 -3
- uncountable/types/recipe_output_metadata_t.py +1 -1
- uncountable/types/recipe_tags_t.py +1 -1
- uncountable/types/recipe_workflow_steps_t.py +5 -4
- uncountable/types/recipes_t.py +2 -1
- uncountable/types/response_t.py +2 -1
- uncountable/types/secret_retrieval_t.py +4 -3
- uncountable/types/units_t.py +1 -1
- uncountable/types/users_t.py +1 -1
- uncountable/types/webhook_job_t.py +4 -3
- uncountable/types/workflows_t.py +2 -2
- {uncountablepythonsdk-0.0.111.dist-info → uncountablepythonsdk-0.0.113.dist-info}/METADATA +2 -1
- {uncountablepythonsdk-0.0.111.dist-info → uncountablepythonsdk-0.0.113.dist-info}/RECORD +136 -131
- {uncountablepythonsdk-0.0.111.dist-info → uncountablepythonsdk-0.0.113.dist-info}/WHEEL +1 -1
- {uncountablepythonsdk-0.0.111.dist-info → uncountablepythonsdk-0.0.113.dist-info}/top_level.txt +0 -0
|
@@ -11,6 +11,7 @@ import dataclasses
|
|
|
11
11
|
from pkgs.serialization import serial_class
|
|
12
12
|
from pkgs.serialization import serial_union_annotation
|
|
13
13
|
from . import auth_retrieval_t
|
|
14
|
+
from . import base_t
|
|
14
15
|
from . import client_config_t
|
|
15
16
|
from . import generic_upload_t
|
|
16
17
|
from . import identifier_t
|
|
@@ -63,7 +64,7 @@ class GenericUploadDataSourceType(StrEnum):
|
|
|
63
64
|
@serial_class(
|
|
64
65
|
named_type_path="sdk.job_definition.JobExecutorBase",
|
|
65
66
|
)
|
|
66
|
-
@dataclasses.dataclass(kw_only=True)
|
|
67
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
67
68
|
class JobExecutorBase:
|
|
68
69
|
type: JobExecutorType
|
|
69
70
|
|
|
@@ -73,7 +74,7 @@ class JobExecutorBase:
|
|
|
73
74
|
named_type_path="sdk.job_definition.JobExecutorScript",
|
|
74
75
|
parse_require={"type"},
|
|
75
76
|
)
|
|
76
|
-
@dataclasses.dataclass(kw_only=True)
|
|
77
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
77
78
|
class JobExecutorScript(JobExecutorBase):
|
|
78
79
|
type: typing.Literal[JobExecutorType.SCRIPT] = JobExecutorType.SCRIPT
|
|
79
80
|
import_path: str
|
|
@@ -83,7 +84,7 @@ class JobExecutorScript(JobExecutorBase):
|
|
|
83
84
|
@serial_class(
|
|
84
85
|
named_type_path="sdk.job_definition.GenericUploadDataSourceBase",
|
|
85
86
|
)
|
|
86
|
-
@dataclasses.dataclass(kw_only=True)
|
|
87
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
87
88
|
class GenericUploadDataSourceBase:
|
|
88
89
|
type: GenericUploadDataSourceType
|
|
89
90
|
|
|
@@ -93,7 +94,7 @@ class GenericUploadDataSourceBase:
|
|
|
93
94
|
named_type_path="sdk.job_definition.GenericUploadDataSourceSFTP",
|
|
94
95
|
parse_require={"type"},
|
|
95
96
|
)
|
|
96
|
-
@dataclasses.dataclass(kw_only=True)
|
|
97
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
97
98
|
class GenericUploadDataSourceSFTP(GenericUploadDataSourceBase):
|
|
98
99
|
type: typing.Literal[GenericUploadDataSourceType.SFTP] = GenericUploadDataSourceType.SFTP
|
|
99
100
|
host: str
|
|
@@ -113,7 +114,7 @@ class S3CloudProvider(StrEnum):
|
|
|
113
114
|
named_type_path="sdk.job_definition.GenericUploadDataSourceS3",
|
|
114
115
|
parse_require={"type"},
|
|
115
116
|
)
|
|
116
|
-
@dataclasses.dataclass(kw_only=True)
|
|
117
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
117
118
|
class GenericUploadDataSourceS3(GenericUploadDataSourceBase):
|
|
118
119
|
type: typing.Literal[GenericUploadDataSourceType.S3] = GenericUploadDataSourceType.S3
|
|
119
120
|
bucket_name: str
|
|
@@ -143,7 +144,7 @@ GenericUploadDataSource = typing.Annotated[
|
|
|
143
144
|
named_type_path="sdk.job_definition.JobExecutorGenericUpload",
|
|
144
145
|
parse_require={"type"},
|
|
145
146
|
)
|
|
146
|
-
@dataclasses.dataclass(kw_only=True)
|
|
147
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
147
148
|
class JobExecutorGenericUpload(JobExecutorBase):
|
|
148
149
|
type: typing.Literal[JobExecutorType.GENERIC_UPLOAD] = JobExecutorType.GENERIC_UPLOAD
|
|
149
150
|
data_source: GenericUploadDataSource
|
|
@@ -169,7 +170,7 @@ JobExecutor = typing.Annotated[
|
|
|
169
170
|
@serial_class(
|
|
170
171
|
named_type_path="sdk.job_definition.JobLoggingSettings",
|
|
171
172
|
)
|
|
172
|
-
@dataclasses.dataclass(kw_only=True)
|
|
173
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
173
174
|
class JobLoggingSettings:
|
|
174
175
|
enabled: bool = False
|
|
175
176
|
share_with_user_groups: list[identifier_t.IdentifierKey] | None = None
|
|
@@ -179,7 +180,7 @@ class JobLoggingSettings:
|
|
|
179
180
|
@serial_class(
|
|
180
181
|
named_type_path="sdk.job_definition.JobDefinitionBase",
|
|
181
182
|
)
|
|
182
|
-
@dataclasses.dataclass(kw_only=True)
|
|
183
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
183
184
|
class JobDefinitionBase:
|
|
184
185
|
id: str
|
|
185
186
|
name: str
|
|
@@ -193,7 +194,7 @@ class JobDefinitionBase:
|
|
|
193
194
|
named_type_path="sdk.job_definition.CronJobDefinition",
|
|
194
195
|
parse_require={"type"},
|
|
195
196
|
)
|
|
196
|
-
@dataclasses.dataclass(kw_only=True)
|
|
197
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
197
198
|
class CronJobDefinition(JobDefinitionBase):
|
|
198
199
|
type: typing.Literal[JobDefinitionType.CRON] = JobDefinitionType.CRON
|
|
199
200
|
cron_spec: str
|
|
@@ -204,7 +205,7 @@ class CronJobDefinition(JobDefinitionBase):
|
|
|
204
205
|
named_type_path="sdk.job_definition.WebhookJobDefinition",
|
|
205
206
|
parse_require={"type"},
|
|
206
207
|
)
|
|
207
|
-
@dataclasses.dataclass(kw_only=True)
|
|
208
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
208
209
|
class WebhookJobDefinition(JobDefinitionBase):
|
|
209
210
|
type: typing.Literal[JobDefinitionType.WEBHOOK] = JobDefinitionType.WEBHOOK
|
|
210
211
|
signature_key_secret: secret_retrieval_t.SecretRetrieval
|
|
@@ -228,7 +229,7 @@ JobDefinition = typing.Annotated[
|
|
|
228
229
|
@serial_class(
|
|
229
230
|
named_type_path="sdk.job_definition.ProfileDefinition",
|
|
230
231
|
)
|
|
231
|
-
@dataclasses.dataclass(kw_only=True)
|
|
232
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
232
233
|
class ProfileDefinition:
|
|
233
234
|
jobs: list[JobDefinition]
|
|
234
235
|
auth_retrieval: auth_retrieval_t.AuthRetrieval | None = None
|
|
@@ -241,7 +242,7 @@ class ProfileDefinition:
|
|
|
241
242
|
@serial_class(
|
|
242
243
|
named_type_path="sdk.job_definition.ProfileMetadata",
|
|
243
244
|
)
|
|
244
|
-
@dataclasses.dataclass(kw_only=True)
|
|
245
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
245
246
|
class ProfileMetadata:
|
|
246
247
|
name: str
|
|
247
248
|
base_url: str
|
|
@@ -254,7 +255,7 @@ class ProfileMetadata:
|
|
|
254
255
|
@serial_class(
|
|
255
256
|
named_type_path="sdk.job_definition.JobResult",
|
|
256
257
|
)
|
|
257
|
-
@dataclasses.dataclass(kw_only=True)
|
|
258
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
258
259
|
class JobResult:
|
|
259
260
|
success: bool
|
|
260
261
|
# DO NOT MODIFY -- This file is generated by type_spec
|
uncountable/types/outputs_t.py
CHANGED
|
@@ -20,7 +20,7 @@ __all__: list[str] = [
|
|
|
20
20
|
@serial_class(
|
|
21
21
|
named_type_path="sdk.outputs.SimpleOutput",
|
|
22
22
|
)
|
|
23
|
-
@dataclasses.dataclass(kw_only=True)
|
|
23
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
24
24
|
class SimpleOutput:
|
|
25
25
|
output_id: base_t.ObjectId
|
|
26
26
|
name: str
|
uncountable/types/overrides_t.py
CHANGED
|
@@ -9,6 +9,7 @@ from decimal import Decimal # noqa: F401
|
|
|
9
9
|
import dataclasses
|
|
10
10
|
from pkgs.serialization import serial_class
|
|
11
11
|
from pkgs.serialization import serial_alias_annotation
|
|
12
|
+
from . import base_t
|
|
12
13
|
from . import secret_retrieval_t
|
|
13
14
|
|
|
14
15
|
__all__: list[str] = [
|
|
@@ -22,7 +23,7 @@ __all__: list[str] = [
|
|
|
22
23
|
@serial_class(
|
|
23
24
|
named_type_path="sdk.overrides.SecretRetrievalOverride",
|
|
24
25
|
)
|
|
25
|
-
@dataclasses.dataclass(kw_only=True)
|
|
26
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
26
27
|
class SecretRetrievalOverride:
|
|
27
28
|
profile_name: str
|
|
28
29
|
secret_retrieval: secret_retrieval_t.SecretRetrieval
|
|
@@ -42,7 +43,7 @@ SecretRetrievalOverrides = typing.Annotated[
|
|
|
42
43
|
@serial_class(
|
|
43
44
|
named_type_path="sdk.overrides.Overrides",
|
|
44
45
|
)
|
|
45
|
-
@dataclasses.dataclass(kw_only=True)
|
|
46
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
46
47
|
class Overrides:
|
|
47
48
|
secrets: SecretRetrievalOverrides
|
|
48
49
|
# DO NOT MODIFY -- This file is generated by type_spec
|
uncountable/types/phases_t.py
CHANGED
|
@@ -19,7 +19,7 @@ __all__: list[str] = [
|
|
|
19
19
|
@serial_class(
|
|
20
20
|
named_type_path="sdk.phases.Phase",
|
|
21
21
|
)
|
|
22
|
-
@dataclasses.dataclass(kw_only=True)
|
|
22
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
23
23
|
class Phase:
|
|
24
24
|
id: base_t.ObjectId
|
|
25
25
|
name: str
|
|
@@ -37,7 +37,7 @@ class InvocationContextType(StrEnum):
|
|
|
37
37
|
@serial_class(
|
|
38
38
|
named_type_path="sdk.queued_job.InvocationContextBase",
|
|
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 InvocationContextBase:
|
|
42
42
|
type: InvocationContextType
|
|
43
43
|
|
|
@@ -47,7 +47,7 @@ class InvocationContextBase:
|
|
|
47
47
|
named_type_path="sdk.queued_job.InvocationContextCron",
|
|
48
48
|
parse_require={"type"},
|
|
49
49
|
)
|
|
50
|
-
@dataclasses.dataclass(kw_only=True)
|
|
50
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
51
51
|
class InvocationContextCron(InvocationContextBase):
|
|
52
52
|
type: typing.Literal[InvocationContextType.CRON] = InvocationContextType.CRON
|
|
53
53
|
|
|
@@ -57,7 +57,7 @@ class InvocationContextCron(InvocationContextBase):
|
|
|
57
57
|
named_type_path="sdk.queued_job.InvocationContextManual",
|
|
58
58
|
parse_require={"type"},
|
|
59
59
|
)
|
|
60
|
-
@dataclasses.dataclass(kw_only=True)
|
|
60
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
61
61
|
class InvocationContextManual(InvocationContextBase):
|
|
62
62
|
type: typing.Literal[InvocationContextType.MANUAL] = InvocationContextType.MANUAL
|
|
63
63
|
|
|
@@ -68,7 +68,7 @@ class InvocationContextManual(InvocationContextBase):
|
|
|
68
68
|
unconverted_values={"webhook_payload"},
|
|
69
69
|
parse_require={"type"},
|
|
70
70
|
)
|
|
71
|
-
@dataclasses.dataclass(kw_only=True)
|
|
71
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
72
72
|
class InvocationContextWebhook(InvocationContextBase):
|
|
73
73
|
type: typing.Literal[InvocationContextType.WEBHOOK] = InvocationContextType.WEBHOOK
|
|
74
74
|
webhook_payload: base_t.JsonValue
|
|
@@ -93,7 +93,7 @@ InvocationContext = typing.Annotated[
|
|
|
93
93
|
@serial_class(
|
|
94
94
|
named_type_path="sdk.queued_job.QueuedJobPayload",
|
|
95
95
|
)
|
|
96
|
-
@dataclasses.dataclass(kw_only=True)
|
|
96
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
97
97
|
class QueuedJobPayload:
|
|
98
98
|
invocation_context: InvocationContext
|
|
99
99
|
|
|
@@ -102,7 +102,7 @@ class QueuedJobPayload:
|
|
|
102
102
|
@serial_class(
|
|
103
103
|
named_type_path="sdk.queued_job.QueuedJobResult",
|
|
104
104
|
)
|
|
105
|
-
@dataclasses.dataclass(kw_only=True)
|
|
105
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
106
106
|
class QueuedJobResult:
|
|
107
107
|
queued_job_uuid: str
|
|
108
108
|
job_result: job_definition_t.JobResult
|
|
@@ -112,7 +112,7 @@ class QueuedJobResult:
|
|
|
112
112
|
@serial_class(
|
|
113
113
|
named_type_path="sdk.queued_job.QueuedJob",
|
|
114
114
|
)
|
|
115
|
-
@dataclasses.dataclass(kw_only=True)
|
|
115
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
116
116
|
class QueuedJob:
|
|
117
117
|
queued_job_uuid: str
|
|
118
118
|
job_ref_name: str
|
|
@@ -25,7 +25,7 @@ __all__: list[str] = [
|
|
|
25
25
|
named_type_path="sdk.recipe_identifiers.RecipeIdentifierEditableName",
|
|
26
26
|
parse_require={"type"},
|
|
27
27
|
)
|
|
28
|
-
@dataclasses.dataclass(kw_only=True)
|
|
28
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
29
29
|
class RecipeIdentifierEditableName:
|
|
30
30
|
type: typing.Literal["name"] = "name"
|
|
31
31
|
editable_name: str
|
|
@@ -37,7 +37,7 @@ class RecipeIdentifierEditableName:
|
|
|
37
37
|
to_string_values={"quantity_dec"},
|
|
38
38
|
parse_require={"type"},
|
|
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 RecipeIdentifierMetadata:
|
|
42
42
|
type: typing.Literal["metadata"] = "metadata"
|
|
43
43
|
recipe_metadata_id: base_t.ObjectId
|
|
@@ -50,7 +50,7 @@ class RecipeIdentifierMetadata:
|
|
|
50
50
|
named_type_path="sdk.recipe_identifiers.RecipeIdentifierMaterialFamily",
|
|
51
51
|
parse_require={"type"},
|
|
52
52
|
)
|
|
53
|
-
@dataclasses.dataclass(kw_only=True)
|
|
53
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
54
54
|
class RecipeIdentifierMaterialFamily:
|
|
55
55
|
type: typing.Literal["material_family_id"] = "material_family_id"
|
|
56
56
|
material_family_id: base_t.ObjectId
|
|
@@ -44,7 +44,7 @@ class RecipeLinkType(StrEnum):
|
|
|
44
44
|
@serial_class(
|
|
45
45
|
named_type_path="sdk.recipe_links.RecipeLink",
|
|
46
46
|
)
|
|
47
|
-
@dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
|
|
47
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
|
|
48
48
|
class RecipeLink:
|
|
49
49
|
recipe_id_from: base_t.ObjectId
|
|
50
50
|
recipe_id_to: base_t.ObjectId
|
|
@@ -23,7 +23,7 @@ __all__: list[str] = [
|
|
|
23
23
|
unconverted_values={"value_json"},
|
|
24
24
|
to_string_values={"value_numeric"},
|
|
25
25
|
)
|
|
26
|
-
@dataclasses.dataclass(kw_only=True)
|
|
26
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
27
27
|
class MetadataValue:
|
|
28
28
|
metadata_id: base_t.ObjectId
|
|
29
29
|
value_numeric: Decimal | None = None
|
|
@@ -36,7 +36,7 @@ class MetadataValue:
|
|
|
36
36
|
@serial_class(
|
|
37
37
|
named_type_path="sdk.recipe_metadata.SimpleRecipeMetadataField",
|
|
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 SimpleRecipeMetadataField:
|
|
41
41
|
metadata_id: base_t.ObjectId
|
|
42
42
|
name: str
|
|
@@ -49,7 +49,7 @@ class SimpleRecipeMetadataField:
|
|
|
49
49
|
unconverted_values={"quantity_json"},
|
|
50
50
|
to_string_values={"quantity_dec"},
|
|
51
51
|
)
|
|
52
|
-
@dataclasses.dataclass(kw_only=True)
|
|
52
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
53
53
|
class RecipeMetadata:
|
|
54
54
|
metadata_id: base_t.ObjectId
|
|
55
55
|
quantity_dec: Decimal | None = None
|
|
@@ -19,7 +19,7 @@ __all__: list[str] = [
|
|
|
19
19
|
@serial_class(
|
|
20
20
|
named_type_path="sdk.recipe_output_metadata.RecipeOutputMetadataField",
|
|
21
21
|
)
|
|
22
|
-
@dataclasses.dataclass(kw_only=True)
|
|
22
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
23
23
|
class RecipeOutputMetadataField:
|
|
24
24
|
id: base_t.ObjectId
|
|
25
25
|
name: str
|
|
@@ -19,7 +19,7 @@ __all__: list[str] = [
|
|
|
19
19
|
@serial_class(
|
|
20
20
|
named_type_path="sdk.recipe_tags.SimpleRecipeTag",
|
|
21
21
|
)
|
|
22
|
-
@dataclasses.dataclass(kw_only=True)
|
|
22
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
23
23
|
class SimpleRecipeTag:
|
|
24
24
|
recipe_tag_id: base_t.ObjectId
|
|
25
25
|
name: str
|
|
@@ -10,6 +10,7 @@ from enum import StrEnum
|
|
|
10
10
|
import dataclasses
|
|
11
11
|
from pkgs.serialization import serial_class
|
|
12
12
|
from pkgs.serialization import serial_union_annotation
|
|
13
|
+
from . import base_t
|
|
13
14
|
from . import identifier_t
|
|
14
15
|
|
|
15
16
|
__all__: list[str] = [
|
|
@@ -34,7 +35,7 @@ class RecipeWorkflowStepIdentifierType(StrEnum):
|
|
|
34
35
|
@serial_class(
|
|
35
36
|
named_type_path="sdk.recipe_workflow_steps.RecipeWorkflowStepIdentifierBase",
|
|
36
37
|
)
|
|
37
|
-
@dataclasses.dataclass(kw_only=True)
|
|
38
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
38
39
|
class RecipeWorkflowStepIdentifierBase:
|
|
39
40
|
type: RecipeWorkflowStepIdentifierType
|
|
40
41
|
|
|
@@ -44,7 +45,7 @@ class RecipeWorkflowStepIdentifierBase:
|
|
|
44
45
|
named_type_path="sdk.recipe_workflow_steps.RecipeWorkflowStepIdentifierDefault",
|
|
45
46
|
parse_require={"type"},
|
|
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 RecipeWorkflowStepIdentifierDefault(RecipeWorkflowStepIdentifierBase):
|
|
49
50
|
type: typing.Literal[RecipeWorkflowStepIdentifierType.DEFAULT] = RecipeWorkflowStepIdentifierType.DEFAULT
|
|
50
51
|
|
|
@@ -60,7 +61,7 @@ class RecipeWorkflowStepPosition(StrEnum):
|
|
|
60
61
|
named_type_path="sdk.recipe_workflow_steps.RecipeWorkflowStepIdentifierWorkflowStep",
|
|
61
62
|
parse_require={"type"},
|
|
62
63
|
)
|
|
63
|
-
@dataclasses.dataclass(kw_only=True)
|
|
64
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
64
65
|
class RecipeWorkflowStepIdentifierWorkflowStep(RecipeWorkflowStepIdentifierBase):
|
|
65
66
|
type: typing.Literal[RecipeWorkflowStepIdentifierType.WORKFLOW_STEP] = RecipeWorkflowStepIdentifierType.WORKFLOW_STEP
|
|
66
67
|
workflow_step_key: identifier_t.IdentifierKey
|
|
@@ -72,7 +73,7 @@ class RecipeWorkflowStepIdentifierWorkflowStep(RecipeWorkflowStepIdentifierBase)
|
|
|
72
73
|
named_type_path="sdk.recipe_workflow_steps.RecipeWorkflowStepIdentifierKey",
|
|
73
74
|
parse_require={"type"},
|
|
74
75
|
)
|
|
75
|
-
@dataclasses.dataclass(kw_only=True)
|
|
76
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
76
77
|
class RecipeWorkflowStepIdentifierKey:
|
|
77
78
|
type: typing.Literal[RecipeWorkflowStepIdentifierType.IDENTIFIER_KEY] = RecipeWorkflowStepIdentifierType.IDENTIFIER_KEY
|
|
78
79
|
recipe_workflow_step_key: identifier_t.IdentifierKey
|
uncountable/types/recipes_t.py
CHANGED
|
@@ -8,6 +8,7 @@ import datetime # noqa: F401
|
|
|
8
8
|
from decimal import Decimal # noqa: F401
|
|
9
9
|
import dataclasses
|
|
10
10
|
from pkgs.serialization import serial_class
|
|
11
|
+
from . import base_t
|
|
11
12
|
|
|
12
13
|
__all__: list[str] = [
|
|
13
14
|
"RecipeAttributeFormatting",
|
|
@@ -18,7 +19,7 @@ __all__: list[str] = [
|
|
|
18
19
|
@serial_class(
|
|
19
20
|
named_type_path="sdk.recipes.RecipeAttributeFormatting",
|
|
20
21
|
)
|
|
21
|
-
@dataclasses.dataclass(kw_only=True)
|
|
22
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
22
23
|
class RecipeAttributeFormatting:
|
|
23
24
|
background_color: str
|
|
24
25
|
# DO NOT MODIFY -- This file is generated by type_spec
|
uncountable/types/response_t.py
CHANGED
|
@@ -8,6 +8,7 @@ import datetime # noqa: F401
|
|
|
8
8
|
from decimal import Decimal # noqa: F401
|
|
9
9
|
import dataclasses
|
|
10
10
|
from pkgs.serialization import serial_class
|
|
11
|
+
from . import base_t
|
|
11
12
|
|
|
12
13
|
__all__: list[str] = [
|
|
13
14
|
"Response",
|
|
@@ -19,7 +20,7 @@ __all__: list[str] = [
|
|
|
19
20
|
named_type_path="sdk.response.Response",
|
|
20
21
|
parse_require={"status"},
|
|
21
22
|
)
|
|
22
|
-
@dataclasses.dataclass(kw_only=True)
|
|
23
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
23
24
|
class Response:
|
|
24
25
|
status: typing.Literal["ok"] = "ok"
|
|
25
26
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -10,6 +10,7 @@ from enum import StrEnum
|
|
|
10
10
|
import dataclasses
|
|
11
11
|
from pkgs.serialization import serial_class
|
|
12
12
|
from pkgs.serialization import serial_union_annotation
|
|
13
|
+
from . import base_t
|
|
13
14
|
|
|
14
15
|
__all__: list[str] = [
|
|
15
16
|
"SecretRetrieval",
|
|
@@ -24,7 +25,7 @@ __all__: list[str] = [
|
|
|
24
25
|
@serial_class(
|
|
25
26
|
named_type_path="sdk.secret_retrieval.SecretRetrievalBase",
|
|
26
27
|
)
|
|
27
|
-
@dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
|
|
28
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
|
|
28
29
|
class SecretRetrievalBase:
|
|
29
30
|
type: SecretRetrievalType
|
|
30
31
|
|
|
@@ -40,7 +41,7 @@ class SecretRetrievalType(StrEnum):
|
|
|
40
41
|
named_type_path="sdk.secret_retrieval.SecretRetrievalEnv",
|
|
41
42
|
parse_require={"type"},
|
|
42
43
|
)
|
|
43
|
-
@dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
|
|
44
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
|
|
44
45
|
class SecretRetrievalEnv(SecretRetrievalBase):
|
|
45
46
|
type: typing.Literal[SecretRetrievalType.ENV] = SecretRetrievalType.ENV
|
|
46
47
|
env_key: str
|
|
@@ -51,7 +52,7 @@ class SecretRetrievalEnv(SecretRetrievalBase):
|
|
|
51
52
|
named_type_path="sdk.secret_retrieval.SecretRetrievalAWS",
|
|
52
53
|
parse_require={"type"},
|
|
53
54
|
)
|
|
54
|
-
@dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
|
|
55
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
|
|
55
56
|
class SecretRetrievalAWS(SecretRetrievalBase):
|
|
56
57
|
type: typing.Literal[SecretRetrievalType.AWS] = SecretRetrievalType.AWS
|
|
57
58
|
secret_name: str
|
uncountable/types/units_t.py
CHANGED
|
@@ -19,7 +19,7 @@ __all__: list[str] = [
|
|
|
19
19
|
@serial_class(
|
|
20
20
|
named_type_path="sdk.units.SimpleUnit",
|
|
21
21
|
)
|
|
22
|
-
@dataclasses.dataclass(kw_only=True)
|
|
22
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
23
23
|
class SimpleUnit:
|
|
24
24
|
unit_id: base_t.ObjectId
|
|
25
25
|
name: str
|
uncountable/types/users_t.py
CHANGED
|
@@ -19,7 +19,7 @@ __all__: list[str] = [
|
|
|
19
19
|
@serial_class(
|
|
20
20
|
named_type_path="sdk.users.SimpleUser",
|
|
21
21
|
)
|
|
22
|
-
@dataclasses.dataclass(kw_only=True)
|
|
22
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
23
23
|
class SimpleUser:
|
|
24
24
|
user_id: base_t.ObjectId
|
|
25
25
|
display_name: str
|
|
@@ -23,7 +23,7 @@ __all__: list[str] = [
|
|
|
23
23
|
named_type_path="sdk.webhook_job.WebhookEventPayload",
|
|
24
24
|
unconverted_values={"data"},
|
|
25
25
|
)
|
|
26
|
-
@dataclasses.dataclass(kw_only=True)
|
|
26
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
27
27
|
class WebhookEventPayload:
|
|
28
28
|
data: dict[str, base_t.JsonValue]
|
|
29
29
|
|
|
@@ -32,7 +32,7 @@ class WebhookEventPayload:
|
|
|
32
32
|
@serial_class(
|
|
33
33
|
named_type_path="sdk.webhook_job.WebhookEventBody",
|
|
34
34
|
)
|
|
35
|
-
@dataclasses.dataclass(kw_only=True)
|
|
35
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
36
36
|
class WebhookEventBody(WebhookEventPayload):
|
|
37
37
|
event_id: str
|
|
38
38
|
|
|
@@ -41,7 +41,8 @@ class WebhookEventBody(WebhookEventPayload):
|
|
|
41
41
|
@serial_class(
|
|
42
42
|
named_type_path="sdk.webhook_job.RunsheetWebhookPayload",
|
|
43
43
|
)
|
|
44
|
-
@dataclasses.dataclass(kw_only=True)
|
|
44
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
45
45
|
class RunsheetWebhookPayload:
|
|
46
46
|
entities: list[entity_t.Entity]
|
|
47
|
+
async_job_id: base_t.ObjectId
|
|
47
48
|
# DO NOT MODIFY -- This file is generated by type_spec
|
uncountable/types/workflows_t.py
CHANGED
|
@@ -20,7 +20,7 @@ __all__: list[str] = [
|
|
|
20
20
|
@serial_class(
|
|
21
21
|
named_type_path="sdk.workflows.SimpleWorkflowStep",
|
|
22
22
|
)
|
|
23
|
-
@dataclasses.dataclass(kw_only=True)
|
|
23
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
24
24
|
class SimpleWorkflowStep:
|
|
25
25
|
workflow_step_id: base_t.ObjectId
|
|
26
26
|
name: str | None
|
|
@@ -30,7 +30,7 @@ class SimpleWorkflowStep:
|
|
|
30
30
|
@serial_class(
|
|
31
31
|
named_type_path="sdk.workflows.SimpleWorkflow",
|
|
32
32
|
)
|
|
33
|
-
@dataclasses.dataclass(kw_only=True)
|
|
33
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
34
34
|
class SimpleWorkflow:
|
|
35
35
|
workflow_id: base_t.ObjectId
|
|
36
36
|
name: str
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: UncountablePythonSDK
|
|
3
|
-
Version: 0.0.
|
|
3
|
+
Version: 0.0.113
|
|
4
4
|
Summary: Uncountable SDK
|
|
5
5
|
Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
|
|
6
6
|
Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
|
|
@@ -39,6 +39,7 @@ Requires-Dist: grpcio==1.67.1
|
|
|
39
39
|
Requires-Dist: protobuf>=4.21.1
|
|
40
40
|
Requires-Dist: azure-storage-blob==12.*
|
|
41
41
|
Requires-Dist: boto3-stubs[essential,ses]==1.*
|
|
42
|
+
Requires-Dist: msgspec==0.19.*
|
|
42
43
|
Provides-Extra: test
|
|
43
44
|
Requires-Dist: mypy==1.*; extra == "test"
|
|
44
45
|
Requires-Dist: ruff==0.*; extra == "test"
|