UncountablePythonSDK 0.0.16__py3-none-any.whl → 0.0.18__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.

Files changed (81) hide show
  1. {UncountablePythonSDK-0.0.16.dist-info → UncountablePythonSDK-0.0.18.dist-info}/METADATA +14 -1
  2. {UncountablePythonSDK-0.0.16.dist-info → UncountablePythonSDK-0.0.18.dist-info}/RECORD +81 -33
  3. {UncountablePythonSDK-0.0.16.dist-info → UncountablePythonSDK-0.0.18.dist-info}/top_level.txt +1 -0
  4. docs/.gitignore +1 -0
  5. docs/conf.py +52 -0
  6. docs/index.md +13 -0
  7. docs/justfile +12 -0
  8. docs/quickstart.md +19 -0
  9. docs/requirements.txt +7 -0
  10. docs/static/favicons/android-chrome-192x192.png +0 -0
  11. docs/static/favicons/android-chrome-512x512.png +0 -0
  12. docs/static/favicons/apple-touch-icon.png +0 -0
  13. docs/static/favicons/browserconfig.xml +9 -0
  14. docs/static/favicons/favicon-16x16.png +0 -0
  15. docs/static/favicons/favicon-32x32.png +0 -0
  16. docs/static/favicons/manifest.json +18 -0
  17. docs/static/favicons/mstile-150x150.png +0 -0
  18. docs/static/favicons/safari-pinned-tab.svg +32 -0
  19. docs/static/logo_blue.png +0 -0
  20. examples/create_entity.py +23 -16
  21. pkgs/argument_parser/_is_enum.py +1 -1
  22. pkgs/argument_parser/argument_parser.py +26 -19
  23. pkgs/serialization/serial_class.py +3 -3
  24. pkgs/serialization_util/_get_type_for_serialization.py +1 -3
  25. pkgs/serialization_util/serialization_helpers.py +1 -3
  26. pkgs/strenum_compat/strenum_compat.py +1 -9
  27. pkgs/type_spec/actions_registry/__init__.py +0 -0
  28. pkgs/type_spec/actions_registry/__main__.py +114 -0
  29. pkgs/type_spec/actions_registry/emit_typescript.py +120 -0
  30. pkgs/type_spec/builder.py +14 -10
  31. pkgs/type_spec/config.py +3 -2
  32. pkgs/type_spec/emit_python.py +54 -17
  33. pkgs/type_spec/emit_typescript.py +8 -9
  34. pkgs/type_spec/emit_typescript_util.py +1 -2
  35. pkgs/type_spec/load_types.py +2 -1
  36. pkgs/type_spec/open_api_util.py +2 -2
  37. pkgs/type_spec/parts/base.py.prepart +2 -1
  38. pkgs/type_spec/util.py +9 -9
  39. pkgs/type_spec/value_spec/__main__.py +2 -2
  40. pkgs/type_spec/value_spec/emit_python.py +1 -0
  41. type_spec/external/api/batch/execute_batch_load_async.yaml +18 -0
  42. type_spec/external/api/chemical/convert_chemical_formats.yaml +33 -0
  43. type_spec/external/api/entity/create_entities.yaml +1 -1
  44. type_spec/external/api/entity/create_entity.yaml +1 -1
  45. type_spec/external/api/id_source/list_id_source.yaml +35 -0
  46. type_spec/external/api/id_source/match_id_source.yaml +32 -0
  47. type_spec/external/api/recipe_links/create_recipe_link.yaml +25 -0
  48. type_spec/external/api/recipes/associate_recipe_as_input.yaml +19 -0
  49. type_spec/external/api/recipes/associate_recipe_as_lot.yaml +19 -0
  50. type_spec/external/api/recipes/create_recipe.yaml +38 -0
  51. type_spec/external/api/recipes/get_recipes_data.yaml +21 -21
  52. type_spec/external/api/recipes/set_recipe_inputs.yaml +6 -0
  53. type_spec/external/api/recipes/set_recipe_metadata.yaml +19 -0
  54. type_spec/external/api/triggers/run_trigger.yaml +18 -0
  55. uncountable/core/client.py +13 -14
  56. uncountable/types/__init__.py +30 -0
  57. uncountable/types/api/batch/execute_batch_load_async.py +35 -0
  58. uncountable/types/api/chemical/__init__.py +1 -0
  59. uncountable/types/api/chemical/convert_chemical_formats.py +50 -0
  60. uncountable/types/api/entity/create_entities.py +1 -1
  61. uncountable/types/api/entity/create_entity.py +1 -1
  62. uncountable/types/api/id_source/__init__.py +1 -0
  63. uncountable/types/api/id_source/list_id_source.py +46 -0
  64. uncountable/types/api/id_source/match_id_source.py +48 -0
  65. uncountable/types/api/recipe_links/__init__.py +1 -0
  66. uncountable/types/api/recipe_links/create_recipe_link.py +39 -0
  67. uncountable/types/api/recipes/associate_recipe_as_input.py +35 -0
  68. uncountable/types/api/recipes/associate_recipe_as_lot.py +36 -0
  69. uncountable/types/api/recipes/create_recipe.py +43 -0
  70. uncountable/types/api/recipes/set_recipe_inputs.py +2 -0
  71. uncountable/types/api/recipes/set_recipe_metadata.py +36 -0
  72. uncountable/types/api/triggers/__init__.py +1 -0
  73. uncountable/types/api/triggers/run_trigger.py +36 -0
  74. uncountable/types/async_batch.py +45 -0
  75. uncountable/types/base.py +2 -1
  76. uncountable/types/chemical_structure.py +27 -0
  77. uncountable/types/client_base.py +404 -2
  78. uncountable/types/id_source.py +49 -0
  79. uncountable/types/identifier.py +54 -0
  80. uncountable/types/recipe_identifiers.py +62 -0
  81. {UncountablePythonSDK-0.0.16.dist-info → UncountablePythonSDK-0.0.18.dist-info}/WHEEL +0 -0
@@ -3,15 +3,23 @@
3
3
  # ruff: noqa: E402
4
4
  # fmt: off
5
5
  # isort: skip_file
6
+ from .api.recipes import associate_recipe_as_input as associate_recipe_as_input_t
7
+ from .api.recipes import associate_recipe_as_lot as associate_recipe_as_lot_t
8
+ from . import async_batch as async_batch_t
6
9
  from . import base as base_t
7
10
  from . import calculations as calculations_t
11
+ from . import chemical_structure as chemical_structure_t
12
+ from .api.chemical import convert_chemical_formats as convert_chemical_formats_t
8
13
  from .api.entity import create_entities as create_entities_t
9
14
  from .api.entity import create_entity as create_entity_t
10
15
  from .api.inputs import create_inputs as create_inputs_t
16
+ from .api.recipes import create_recipe as create_recipe_t
17
+ from .api.recipe_links import create_recipe_link as create_recipe_link_t
11
18
  from .api.recipes import create_recipes as create_recipes_t
12
19
  from . import curves as curves_t
13
20
  from . import entity as entity_t
14
21
  from .api.batch import execute_batch as execute_batch_t
22
+ from .api.batch import execute_batch_load_async as execute_batch_load_async_t
15
23
  from . import experiment_groups as experiment_groups_t
16
24
  from . import field_values as field_values_t
17
25
  from . import fields as fields_t
@@ -31,11 +39,16 @@ from .api.recipe_metadata import get_recipe_metadata_data as get_recipe_metadata
31
39
  from .api.recipes import get_recipe_names as get_recipe_names_t
32
40
  from .api.recipes import get_recipe_output_metadata as get_recipe_output_metadata_t
33
41
  from .api.recipes import get_recipes_data as get_recipes_data_t
42
+ from . import id_source as id_source_t
43
+ from . import identifier as identifier_t
34
44
  from . import input_attributes as input_attributes_t
35
45
  from . import inputs as inputs_t
36
46
  from .api.entity import list_entities as list_entities_t
47
+ from .api.id_source import list_id_source as list_id_source_t
48
+ from .api.id_source import match_id_source as match_id_source_t
37
49
  from . import outputs as outputs_t
38
50
  from . import phases as phases_t
51
+ from . import recipe_identifiers as recipe_identifiers_t
39
52
  from . import recipe_links as recipe_links_t
40
53
  from . import recipe_metadata as recipe_metadata_t
41
54
  from . import recipe_output_metadata as recipe_output_metadata_t
@@ -43,8 +56,10 @@ from . import recipe_tags as recipe_tags_t
43
56
  from .api.entity import resolve_entity_ids as resolve_entity_ids_t
44
57
  from .api.outputs import resolve_output_conditions as resolve_output_conditions_t
45
58
  from . import response as response_t
59
+ from .api.triggers import run_trigger as run_trigger_t
46
60
  from .api.inputs import set_input_attribute_values as set_input_attribute_values_t
47
61
  from .api.recipes import set_recipe_inputs as set_recipe_inputs_t
62
+ from .api.recipes import set_recipe_metadata as set_recipe_metadata_t
48
63
  from .api.recipes import set_recipe_outputs as set_recipe_outputs_t
49
64
  from .api.entity import set_values as set_values_t
50
65
  from . import units as units_t
@@ -53,15 +68,23 @@ from . import workflows as workflows_t
53
68
 
54
69
 
55
70
  __all__: list[str] = [
71
+ "associate_recipe_as_input_t",
72
+ "associate_recipe_as_lot_t",
73
+ "async_batch_t",
56
74
  "base_t",
57
75
  "calculations_t",
76
+ "chemical_structure_t",
77
+ "convert_chemical_formats_t",
58
78
  "create_entities_t",
59
79
  "create_entity_t",
60
80
  "create_inputs_t",
81
+ "create_recipe_t",
82
+ "create_recipe_link_t",
61
83
  "create_recipes_t",
62
84
  "curves_t",
63
85
  "entity_t",
64
86
  "execute_batch_t",
87
+ "execute_batch_load_async_t",
65
88
  "experiment_groups_t",
66
89
  "field_values_t",
67
90
  "fields_t",
@@ -81,11 +104,16 @@ __all__: list[str] = [
81
104
  "get_recipe_names_t",
82
105
  "get_recipe_output_metadata_t",
83
106
  "get_recipes_data_t",
107
+ "id_source_t",
108
+ "identifier_t",
84
109
  "input_attributes_t",
85
110
  "inputs_t",
86
111
  "list_entities_t",
112
+ "list_id_source_t",
113
+ "match_id_source_t",
87
114
  "outputs_t",
88
115
  "phases_t",
116
+ "recipe_identifiers_t",
89
117
  "recipe_links_t",
90
118
  "recipe_metadata_t",
91
119
  "recipe_output_metadata_t",
@@ -93,8 +121,10 @@ __all__: list[str] = [
93
121
  "resolve_entity_ids_t",
94
122
  "resolve_output_conditions_t",
95
123
  "response_t",
124
+ "run_trigger_t",
96
125
  "set_input_attribute_values_t",
97
126
  "set_recipe_inputs_t",
127
+ "set_recipe_metadata_t",
98
128
  "set_recipe_outputs_t",
99
129
  "set_values_t",
100
130
  "units_t",
@@ -0,0 +1,35 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from ... import async_batch as async_batch_t
12
+ from ... import base as base_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "Data",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ ]
20
+
21
+ ENDPOINT_METHOD = "POST"
22
+ ENDPOINT_PATH = "api/external/batch/execute_batch_load_async"
23
+
24
+
25
+ # DO NOT MODIFY -- This file is generated by type_spec
26
+ @dataclass(kw_only=True)
27
+ class Arguments:
28
+ requests: list[async_batch_t.AsyncBatchRequest]
29
+
30
+
31
+ # DO NOT MODIFY -- This file is generated by type_spec
32
+ @dataclass(kw_only=True)
33
+ class Data:
34
+ job_id: base_t.ObjectId
35
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,50 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from pkgs.serialization import serial_class
12
+ from ... import base as base_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "ChemicalStructureFile",
17
+ "Data",
18
+ "ENDPOINT_METHOD",
19
+ "ENDPOINT_PATH",
20
+ "UncountableChemicalStructure",
21
+ ]
22
+
23
+ ENDPOINT_METHOD = "POST"
24
+ ENDPOINT_PATH = "api/external/chemical/convert_chemical_formats"
25
+
26
+
27
+ # DO NOT MODIFY -- This file is generated by type_spec
28
+ @dataclass(kw_only=True)
29
+ class ChemicalStructureFile:
30
+ struct_file: str
31
+
32
+
33
+ # DO NOT MODIFY -- This file is generated by type_spec
34
+ @dataclass(kw_only=True)
35
+ class Arguments:
36
+ source_chemical_structures: list[ChemicalStructureFile]
37
+
38
+
39
+ # DO NOT MODIFY -- This file is generated by type_spec
40
+ UncountableChemicalStructure = dict[str, base_t.JsonValue]
41
+
42
+
43
+ # DO NOT MODIFY -- This file is generated by type_spec
44
+ @serial_class(
45
+ unconverted_values={"chemical_structures"},
46
+ )
47
+ @dataclass(kw_only=True)
48
+ class Data:
49
+ chemical_structures: list[UncountableChemicalStructure]
50
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -34,7 +34,7 @@ class EntityToCreate:
34
34
  @dataclass(kw_only=True)
35
35
  class Arguments:
36
36
  definition_id: base_t.ObjectId
37
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT]]
37
+ entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS]]
38
38
  entities_to_create: list[EntityToCreate]
39
39
 
40
40
 
@@ -40,7 +40,7 @@ class EntityFieldInitialValue:
40
40
  @dataclass(kw_only=True)
41
41
  class Arguments:
42
42
  definition_id: base_t.ObjectId
43
- entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT]]
43
+ entity_type: typing.Union[typing.Literal[entity_t.EntityType.LAB_REQUEST], typing.Literal[entity_t.EntityType.APPROVAL], typing.Literal[entity_t.EntityType.CUSTOM_ENTITY], typing.Literal[entity_t.EntityType.TASK], typing.Literal[entity_t.EntityType.PROJECT], typing.Literal[entity_t.EntityType.EQUIPMENT], typing.Literal[entity_t.EntityType.INV_LOCAL_LOCATIONS]]
44
44
  field_values: typing.Optional[typing.Optional[list[field_values_t.FieldRefNameValue]]] = None
45
45
 
46
46
 
@@ -0,0 +1 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,46 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from ... import base as base_t
12
+ from ... import id_source as id_source_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "Data",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ "IdName",
20
+ ]
21
+
22
+ ENDPOINT_METHOD = "GET"
23
+ ENDPOINT_PATH = "api/external/id_source/list_id_source"
24
+
25
+
26
+ # DO NOT MODIFY -- This file is generated by type_spec
27
+ @dataclass(kw_only=True)
28
+ class Arguments:
29
+ spec: id_source_t.IdSourceSpec
30
+ search_label: str
31
+ offset: typing.Optional[typing.Optional[int]] = None
32
+ limit: typing.Optional[typing.Optional[int]] = None
33
+
34
+
35
+ # DO NOT MODIFY -- This file is generated by type_spec
36
+ @dataclass(kw_only=True)
37
+ class IdName:
38
+ id: typing.Union[base_t.ObjectId, str]
39
+ name: str
40
+
41
+
42
+ # DO NOT MODIFY -- This file is generated by type_spec
43
+ @dataclass(kw_only=True)
44
+ class Data:
45
+ results: list[IdName]
46
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,48 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from pkgs.serialization import serial_class
12
+ from ... import base as base_t
13
+ from ... import id_source as id_source_t
14
+
15
+ __all__: list[str] = [
16
+ "Arguments",
17
+ "Data",
18
+ "ENDPOINT_METHOD",
19
+ "ENDPOINT_PATH",
20
+ "Match",
21
+ ]
22
+
23
+ ENDPOINT_METHOD = "GET"
24
+ ENDPOINT_PATH = "api/external/id_source/match_id_source"
25
+
26
+
27
+ # DO NOT MODIFY -- This file is generated by type_spec
28
+ @dataclass(kw_only=True)
29
+ class Arguments:
30
+ spec: id_source_t.IdSourceSpec
31
+ names: list[str]
32
+
33
+
34
+ # DO NOT MODIFY -- This file is generated by type_spec
35
+ @dataclass(kw_only=True)
36
+ class Match:
37
+ name: str
38
+ ids: list[typing.Union[base_t.ObjectId, str]]
39
+
40
+
41
+ # DO NOT MODIFY -- This file is generated by type_spec
42
+ @serial_class(
43
+ unconverted_values={"results"},
44
+ )
45
+ @dataclass(kw_only=True)
46
+ class Data:
47
+ results: list[Match]
48
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,39 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from ... import async_batch as async_batch_t
12
+ from ... import identifier as identifier_t
13
+ from ... import recipe_links as recipe_links_t
14
+
15
+ __all__: list[str] = [
16
+ "Arguments",
17
+ "Data",
18
+ "ENDPOINT_METHOD",
19
+ "ENDPOINT_PATH",
20
+ ]
21
+
22
+ ENDPOINT_METHOD = "POST"
23
+ ENDPOINT_PATH = "api/external/recipe_links/create_recipe_link"
24
+
25
+
26
+ # DO NOT MODIFY -- This file is generated by type_spec
27
+ @dataclass(kw_only=True)
28
+ class Arguments:
29
+ recipe_from_key: identifier_t.IdentifierKey
30
+ recipe_to_key: identifier_t.IdentifierKey
31
+ link_type: typing.Union[typing.Literal[recipe_links_t.RecipeLinkType.CHILD], typing.Literal[recipe_links_t.RecipeLinkType.CONTROL], typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]]
32
+ name: str
33
+
34
+
35
+ # DO NOT MODIFY -- This file is generated by type_spec
36
+ @dataclass(kw_only=True)
37
+ class Data(async_batch_t.AsyncBatchActionReturn):
38
+ pass
39
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,35 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from ... import base as base_t
12
+ from ... import identifier as identifier_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "Data",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ ]
20
+
21
+ ENDPOINT_METHOD = "POST"
22
+ ENDPOINT_PATH = "api/external/recipes/associate_recipe_as_input"
23
+
24
+
25
+ # DO NOT MODIFY -- This file is generated by type_spec
26
+ @dataclass(kw_only=True)
27
+ class Arguments:
28
+ recipe_key: identifier_t.IdentifierKey
29
+
30
+
31
+ # DO NOT MODIFY -- This file is generated by type_spec
32
+ @dataclass(kw_only=True)
33
+ class Data:
34
+ result_id: base_t.ObjectId
35
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,36 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from ... import async_batch as async_batch_t
12
+ from ... import identifier as identifier_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "Data",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ ]
20
+
21
+ ENDPOINT_METHOD = "POST"
22
+ ENDPOINT_PATH = "api/external/recipes/associate_recipe_as_lot"
23
+
24
+
25
+ # DO NOT MODIFY -- This file is generated by type_spec
26
+ @dataclass(kw_only=True)
27
+ class Arguments:
28
+ recipe_key: identifier_t.IdentifierKey
29
+ ingredient_key: identifier_t.IdentifierKey
30
+
31
+
32
+ # DO NOT MODIFY -- This file is generated by type_spec
33
+ @dataclass(kw_only=True)
34
+ class Data(async_batch_t.AsyncBatchActionReturn):
35
+ pass
36
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,43 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from ... import base as base_t
12
+ from ... import identifier as identifier_t
13
+ from ... import recipe_identifiers as recipe_identifiers_t
14
+ from ... import recipe_metadata as recipe_metadata_t
15
+
16
+ __all__: list[str] = [
17
+ "Arguments",
18
+ "Data",
19
+ "ENDPOINT_METHOD",
20
+ "ENDPOINT_PATH",
21
+ ]
22
+
23
+ ENDPOINT_METHOD = "POST"
24
+ ENDPOINT_PATH = "api/external/recipes/create_recipe"
25
+
26
+
27
+ # DO NOT MODIFY -- This file is generated by type_spec
28
+ @dataclass(kw_only=True)
29
+ class Arguments:
30
+ material_family_id: base_t.ObjectId
31
+ workflow_id: base_t.ObjectId
32
+ identifiers: recipe_identifiers_t.RecipeIdentifiers
33
+ name: typing.Optional[str] = None
34
+ workflow_variant_id: typing.Optional[typing.Optional[base_t.ObjectId]] = None
35
+ recipe_metadata: typing.Optional[list[recipe_metadata_t.MetadataValue]] = None
36
+ definition_key: typing.Optional[identifier_t.IdentifierKey] = None
37
+
38
+
39
+ # DO NOT MODIFY -- This file is generated by type_spec
40
+ @dataclass(kw_only=True)
41
+ class Data:
42
+ result_id: base_t.ObjectId
43
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -35,6 +35,8 @@ class RecipeInputValue:
35
35
  value_numeric: typing.Optional[Decimal] = None
36
36
  value_str: typing.Optional[str] = None
37
37
  set_actual_value: typing.Optional[bool] = None
38
+ lot_recipe_id: typing.Optional[base_t.ObjectId] = None
39
+ remove: typing.Optional[bool] = None
38
40
 
39
41
 
40
42
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,36 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from ... import identifier as identifier_t
12
+ from ... import recipe_metadata as recipe_metadata_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "Data",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ ]
20
+
21
+ ENDPOINT_METHOD = "POST"
22
+ ENDPOINT_PATH = "api/external/recipes/set_recipe_metadata"
23
+
24
+
25
+ # DO NOT MODIFY -- This file is generated by type_spec
26
+ @dataclass(kw_only=True)
27
+ class Arguments:
28
+ recipe_key: identifier_t.IdentifierKey
29
+ recipe_metadata: list[recipe_metadata_t.MetadataValue]
30
+
31
+
32
+ # DO NOT MODIFY -- This file is generated by type_spec
33
+ @dataclass(kw_only=True)
34
+ class Data:
35
+ pass
36
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,36 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from ... import entity as entity_t
12
+ from ... import response as response_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "Data",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ ]
20
+
21
+ ENDPOINT_METHOD = "POST"
22
+ ENDPOINT_PATH = "api/external/triggers/run_trigger"
23
+
24
+
25
+ # DO NOT MODIFY -- This file is generated by type_spec
26
+ @dataclass(kw_only=True)
27
+ class Arguments:
28
+ trigger_ref_name: str
29
+ entity: typing.Optional[entity_t.Entity] = None
30
+
31
+
32
+ # DO NOT MODIFY -- This file is generated by type_spec
33
+ @dataclass(kw_only=True)
34
+ class Data(response_t.Response):
35
+ pass
36
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,45 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from pkgs.strenum_compat import StrEnum
11
+ from dataclasses import dataclass
12
+ from pkgs.serialization import serial_class
13
+ from . import base as base_t
14
+
15
+ __all__: list[str] = [
16
+ "AsyncBatchActionReturn",
17
+ "AsyncBatchRequest",
18
+ "AsyncBatchRequestPath",
19
+ ]
20
+
21
+
22
+ # DO NOT MODIFY -- This file is generated by type_spec
23
+ class AsyncBatchRequestPath(StrEnum):
24
+ CREATE_RECIPE = "recipes/create_recipe"
25
+ SET_RECIPE_METADATA = "recipes/set_recipe_metadata"
26
+
27
+
28
+ # DO NOT MODIFY -- This file is generated by type_spec
29
+ @serial_class(
30
+ unconverted_values={"data"},
31
+ )
32
+ @dataclass(kw_only=True)
33
+ class AsyncBatchRequest:
34
+ path: AsyncBatchRequestPath
35
+ data: base_t.JsonValue
36
+ batch_reference: str
37
+ depends_on: typing.Optional[list[str]] = None
38
+
39
+
40
+ # DO NOT MODIFY -- This file is generated by type_spec
41
+ @dataclass(kw_only=True)
42
+ class AsyncBatchActionReturn:
43
+ modification_made: bool
44
+ result_id: typing.Optional[base_t.ObjectId] = None
45
+ # DO NOT MODIFY -- This file is generated by type_spec
uncountable/types/base.py CHANGED
@@ -18,7 +18,8 @@ __all__: list[str] = [
18
18
  """
19
19
  Types that type_spec will use in the emitted files.
20
20
  """
21
- from typing import Union, Mapping, Sequence, Any, TYPE_CHECKING
21
+ from typing import Union, Any, TYPE_CHECKING
22
+ from collections.abc import Mapping, Sequence
22
23
 
23
24
  # These two are part of the core output, thus don't duplicate here
24
25
  # from decimal import Decimal
@@ -0,0 +1,27 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
4
+ # fmt: off
5
+ # isort: skip_file
6
+ from __future__ import annotations
7
+ import typing # noqa: F401
8
+ import datetime # noqa: F401
9
+ from decimal import Decimal # noqa: F401
10
+ from dataclasses import dataclass
11
+ from pkgs.serialization import serial_class
12
+
13
+ __all__: list[str] = [
14
+ "ChemicalStructure",
15
+ ]
16
+
17
+
18
+ # DO NOT MODIFY -- This file is generated by type_spec
19
+ @serial_class(
20
+ to_string_values={"molecular_weight"},
21
+ )
22
+ @dataclass(kw_only=True)
23
+ class ChemicalStructure:
24
+ ketcher_file: typing.Optional[str] = None
25
+ gross_formula: typing.Optional[str] = None
26
+ molecular_weight: typing.Optional[Decimal] = None
27
+ # DO NOT MODIFY -- This file is generated by type_spec