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,15 +6,17 @@ 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 . import base_t
|
|
13
|
+
from . import entity_t
|
|
14
14
|
|
|
15
15
|
__all__: list[str] = [
|
|
16
16
|
"AsyncBatchActionReturn",
|
|
17
17
|
"AsyncBatchRequest",
|
|
18
18
|
"AsyncBatchRequestPath",
|
|
19
|
+
"AsyncBatchResultValue",
|
|
19
20
|
"QueuedAsyncBatchRequest",
|
|
20
21
|
"SavedAsyncBatchActionReturn",
|
|
21
22
|
]
|
|
@@ -35,6 +36,19 @@ class AsyncBatchRequestPath(StrEnum):
|
|
|
35
36
|
ASSOCIATE_RECIPE_AS_INPUT = "recipes/associate_recipe_as_input"
|
|
36
37
|
CLEAR_RECIPE_OUTPUTS = "recipes/clear_recipe_outputs"
|
|
37
38
|
GRANT_ENTITY_PERMISSIONS = "entity/grant_entity_permissions"
|
|
39
|
+
SET_ENTITY_FIELD_VALUES = "entity/set_entity_field_values"
|
|
40
|
+
ASSOCIATE_RECIPE_AS_LOT = "recipes/associate_recipe_as_lot"
|
|
41
|
+
CREATE_OR_UPDATE_ENTITY = "entity/create_or_update_entity"
|
|
42
|
+
ADD_TIME_SERIES_DATA = "recipes/add_time_series_data"
|
|
43
|
+
LOOKUP_ENTITY = "entity/lookup_entity"
|
|
44
|
+
CREATE_RECIPE_LINK = "recipe_links/create_recipe_link"
|
|
45
|
+
UPSERT_CONDITION_MATCH = "condition_parameters/upsert_condition_match"
|
|
46
|
+
COMPLETE_ASYNC_UPLOAD = "runsheet/complete_async_upload"
|
|
47
|
+
CREATE_MIX_ORDER = "recipes/create_mix_order"
|
|
48
|
+
PUSH_NOTIFICATION = "integrations/push_notification"
|
|
49
|
+
COMPLETE_ASYNC_PARSE = "uploader/complete_async_parse"
|
|
50
|
+
SET_RECIPE_TOTAL = "recipes/set_recipe_total"
|
|
51
|
+
TRANSITION_ENTITY_PHASE = "entity/transition_entity_phase"
|
|
38
52
|
|
|
39
53
|
|
|
40
54
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
@@ -42,29 +56,42 @@ class AsyncBatchRequestPath(StrEnum):
|
|
|
42
56
|
named_type_path="sdk.async_batch.AsyncBatchRequest",
|
|
43
57
|
unconverted_values={"data"},
|
|
44
58
|
)
|
|
45
|
-
@dataclasses.dataclass(kw_only=True)
|
|
59
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
46
60
|
class AsyncBatchRequest:
|
|
47
61
|
path: AsyncBatchRequestPath
|
|
48
62
|
data: base_t.JsonValue
|
|
49
63
|
batch_reference: str
|
|
50
|
-
depends_on:
|
|
64
|
+
depends_on: list[str] | None = None
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
# DO NOT MODIFY -- This file is generated by type_spec
|
|
68
|
+
@serial_class(
|
|
69
|
+
named_type_path="sdk.async_batch.AsyncBatchResultValue",
|
|
70
|
+
unconverted_values={"value"},
|
|
71
|
+
)
|
|
72
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
73
|
+
class AsyncBatchResultValue:
|
|
74
|
+
data_key: str
|
|
75
|
+
value: base_t.JsonValue
|
|
51
76
|
|
|
52
77
|
|
|
53
78
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
54
79
|
@serial_class(
|
|
55
80
|
named_type_path="sdk.async_batch.AsyncBatchActionReturn",
|
|
56
81
|
)
|
|
57
|
-
@dataclasses.dataclass(kw_only=True)
|
|
82
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
58
83
|
class AsyncBatchActionReturn:
|
|
59
84
|
modification_made: bool
|
|
60
|
-
result_id:
|
|
85
|
+
result_id: base_t.ObjectId | None = None
|
|
86
|
+
entity: entity_t.Entity | None = None
|
|
87
|
+
result_values: list[AsyncBatchResultValue] | None = None
|
|
61
88
|
|
|
62
89
|
|
|
63
90
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
64
91
|
@serial_class(
|
|
65
92
|
named_type_path="sdk.async_batch.SavedAsyncBatchActionReturn",
|
|
66
93
|
)
|
|
67
|
-
@dataclasses.dataclass(kw_only=True)
|
|
94
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
68
95
|
class SavedAsyncBatchActionReturn:
|
|
69
96
|
identifier: str
|
|
70
97
|
result_data: AsyncBatchActionReturn
|
|
@@ -74,7 +101,7 @@ class SavedAsyncBatchActionReturn:
|
|
|
74
101
|
@serial_class(
|
|
75
102
|
named_type_path="sdk.async_batch.QueuedAsyncBatchRequest",
|
|
76
103
|
)
|
|
77
|
-
@dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
|
|
104
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True, frozen=True, eq=True) # type: ignore[literal-required]
|
|
78
105
|
class QueuedAsyncBatchRequest:
|
|
79
106
|
path: AsyncBatchRequestPath
|
|
80
107
|
batch_reference: str
|
uncountable/types/async_jobs.py
CHANGED
|
@@ -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
|
from pkgs.serialization import serial_string_enum
|
|
12
11
|
|
|
13
12
|
__all__: list[str] = [
|
|
@@ -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,10 +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
|
|
13
12
|
from pkgs.serialization import serial_union_annotation
|
|
13
|
+
from . import base_t
|
|
14
14
|
from . import secret_retrieval_t
|
|
15
15
|
|
|
16
16
|
__all__: list[str] = [
|
|
@@ -32,7 +32,7 @@ class AuthRetrievalType(StrEnum):
|
|
|
32
32
|
@serial_class(
|
|
33
33
|
named_type_path="sdk.auth_retrieval.AuthRetrievalBase",
|
|
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 AuthRetrievalBase:
|
|
37
37
|
type: AuthRetrievalType
|
|
38
38
|
|
|
@@ -42,7 +42,7 @@ class AuthRetrievalBase:
|
|
|
42
42
|
named_type_path="sdk.auth_retrieval.AuthRetrievalOAuth",
|
|
43
43
|
parse_require={"type"},
|
|
44
44
|
)
|
|
45
|
-
@dataclasses.dataclass(kw_only=True)
|
|
45
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
46
46
|
class AuthRetrievalOAuth(AuthRetrievalBase):
|
|
47
47
|
type: typing.Literal[AuthRetrievalType.OAUTH] = AuthRetrievalType.OAUTH
|
|
48
48
|
refresh_token_secret: secret_retrieval_t.SecretRetrieval
|
|
@@ -53,7 +53,7 @@ class AuthRetrievalOAuth(AuthRetrievalBase):
|
|
|
53
53
|
named_type_path="sdk.auth_retrieval.AuthRetrievalBasic",
|
|
54
54
|
parse_require={"type"},
|
|
55
55
|
)
|
|
56
|
-
@dataclasses.dataclass(kw_only=True)
|
|
56
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
57
57
|
class AuthRetrievalBasic(AuthRetrievalBase):
|
|
58
58
|
type: typing.Literal[AuthRetrievalType.BASIC] = AuthRetrievalType.BASIC
|
|
59
59
|
api_id_secret: secret_retrieval_t.SecretRetrieval
|
|
@@ -62,7 +62,7 @@ class AuthRetrievalBasic(AuthRetrievalBase):
|
|
|
62
62
|
|
|
63
63
|
# DO NOT MODIFY -- This file is generated by type_spec
|
|
64
64
|
AuthRetrieval = typing.Annotated[
|
|
65
|
-
|
|
65
|
+
AuthRetrievalOAuth | AuthRetrievalBasic,
|
|
66
66
|
serial_union_annotation(
|
|
67
67
|
named_type_path="sdk.auth_retrieval.AuthRetrieval",
|
|
68
68
|
discriminator="type",
|
uncountable/types/base.py
CHANGED
uncountable/types/base_t.py
CHANGED
|
@@ -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
|
|
@@ -39,10 +38,16 @@ PureJsonScalar = Union[str, float, bool, None]
|
|
|
39
38
|
# Regular expressions for identifying ref names and IDs. Ref names should be
|
|
40
39
|
# using this regular expression as a constriant in the database.
|
|
41
40
|
REF_NAME_REGEX = r"^[a-zA-Z0-9_/-]+$"
|
|
41
|
+
REF_NAME_STRICT_REGEX_STRING = "^[a-zA-Z_][a-zA-Z0-9_]*$"
|
|
42
|
+
REF_NAME_STRICT_REGEX = rf"{REF_NAME_STRICT_REGEX_STRING}"
|
|
42
43
|
# Ids matching a strict integer number are converted to integers
|
|
43
44
|
ID_REGEX = r"-?[1-9][0-9]{0,20}"
|
|
44
45
|
|
|
45
46
|
|
|
47
|
+
# ENABLE_SLOTS should be removed after slots have been tested locally
|
|
48
|
+
import os
|
|
49
|
+
ENABLE_SLOTS = os.environ.get("UNC_ENABLE_DATACLASS_SLOTS") == "true"
|
|
50
|
+
|
|
46
51
|
if TYPE_CHECKING:
|
|
47
52
|
JsonValue = Union[JsonScalar, Mapping[str, "JsonValue"], Sequence["JsonValue"]]
|
|
48
53
|
ExtJsonValue = JsonValue
|
|
@@ -69,16 +74,13 @@ def is_pure_json_value(value: ExtJsonValue) -> bool:
|
|
|
69
74
|
return True
|
|
70
75
|
|
|
71
76
|
if isinstance(value, list):
|
|
72
|
-
for item in value
|
|
73
|
-
if not is_pure_json_value(item):
|
|
74
|
-
return False
|
|
75
|
-
return True
|
|
77
|
+
return all(is_pure_json_value(item) for item in value)
|
|
76
78
|
|
|
77
79
|
if isinstance(value, dict):
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
return all(
|
|
81
|
+
is_pure_json_value(key) and is_pure_json_value(item)
|
|
82
|
+
for key, item in value.items()
|
|
83
|
+
)
|
|
82
84
|
|
|
83
85
|
return False
|
|
84
86
|
# === END section from base.prepart.py ===
|
|
@@ -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
|
|
@@ -20,7 +19,7 @@ __all__: list[str] = [
|
|
|
20
19
|
@serial_class(
|
|
21
20
|
named_type_path="sdk.calculations.Calculation",
|
|
22
21
|
)
|
|
23
|
-
@dataclasses.dataclass(kw_only=True)
|
|
22
|
+
@dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
|
|
24
23
|
class Calculation:
|
|
25
24
|
id: base_t.ObjectId
|
|
26
25
|
name: str
|
|
@@ -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
|
|
|
13
13
|
__all__: list[str] = [
|
|
14
14
|
"ChemicalStructure",
|
|
@@ -20,9 +20,9 @@ __all__: list[str] = [
|
|
|
20
20
|
named_type_path="sdk.chemical_structure.ChemicalStructure",
|
|
21
21
|
to_string_values={"molecular_weight"},
|
|
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 ChemicalStructure:
|
|
25
|
-
ketcher_file:
|
|
26
|
-
gross_formula:
|
|
27
|
-
molecular_weight:
|
|
25
|
+
ketcher_file: str | None = None
|
|
26
|
+
gross_formula: str | None = None
|
|
27
|
+
molecular_weight: Decimal | None = None
|
|
28
28
|
# DO NOT MODIFY -- This file is generated by type_spec
|