UncountablePythonSDK 0.0.40__py3-none-any.whl → 0.0.42__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 (127) hide show
  1. {UncountablePythonSDK-0.0.40.dist-info → UncountablePythonSDK-0.0.42.dist-info}/METADATA +5 -1
  2. {UncountablePythonSDK-0.0.40.dist-info → UncountablePythonSDK-0.0.42.dist-info}/RECORD +126 -107
  3. docs/requirements.txt +3 -3
  4. examples/invoke_uploader.py +23 -0
  5. pkgs/argument_parser/argument_parser.py +2 -2
  6. pkgs/filesystem_utils/__init__.py +17 -0
  7. pkgs/filesystem_utils/_gdrive_session.py +306 -0
  8. pkgs/filesystem_utils/_local_session.py +69 -0
  9. pkgs/filesystem_utils/_sftp_session.py +147 -0
  10. pkgs/filesystem_utils/file_type_utils.py +61 -0
  11. pkgs/filesystem_utils/filesystem_session.py +39 -0
  12. pkgs/serialization/yaml.py +54 -0
  13. pkgs/type_spec/config.py +1 -13
  14. pkgs/type_spec/emit_open_api.py +7 -5
  15. pkgs/type_spec/emit_open_api_util.py +4 -2
  16. pkgs/type_spec/emit_python.py +13 -14
  17. pkgs/type_spec/load_types.py +2 -1
  18. pkgs/type_spec/value_spec/__main__.py +1 -1
  19. uncountable/core/file_upload.py +13 -3
  20. uncountable/integration/construct_client.py +1 -1
  21. uncountable/integration/cron.py +11 -6
  22. uncountable/integration/entrypoint.py +6 -7
  23. uncountable/integration/executors/executors.py +24 -0
  24. uncountable/integration/executors/generic_upload_executor.py +245 -0
  25. uncountable/integration/executors/script_executor.py +1 -1
  26. uncountable/integration/job.py +19 -2
  27. uncountable/integration/secret_retrieval/__init__.py +3 -0
  28. uncountable/integration/secret_retrieval/retrieve_secret.py +40 -0
  29. uncountable/integration/server.py +1 -1
  30. uncountable/types/__init__.py +8 -0
  31. uncountable/types/api/batch/execute_batch.py +5 -5
  32. uncountable/types/api/batch/execute_batch_load_async.py +3 -3
  33. uncountable/types/api/chemical/convert_chemical_formats.py +4 -4
  34. uncountable/types/api/entity/create_entities.py +4 -4
  35. uncountable/types/api/entity/create_entity.py +4 -4
  36. uncountable/types/api/entity/get_entities_data.py +4 -4
  37. uncountable/types/api/entity/list_entities.py +5 -5
  38. uncountable/types/api/entity/lock_entity.py +3 -3
  39. uncountable/types/api/entity/resolve_entity_ids.py +4 -4
  40. uncountable/types/api/entity/set_values.py +3 -3
  41. uncountable/types/api/entity/transition_entity_phase.py +5 -5
  42. uncountable/types/api/entity/unlock_entity.py +3 -3
  43. uncountable/types/api/equipment/associate_equipment_input.py +3 -3
  44. uncountable/types/api/field_options/upsert_field_options.py +4 -4
  45. uncountable/types/api/id_source/list_id_source.py +4 -4
  46. uncountable/types/api/id_source/match_id_source.py +4 -4
  47. uncountable/types/api/input_groups/get_input_group_names.py +4 -4
  48. uncountable/types/api/inputs/create_inputs.py +5 -5
  49. uncountable/types/api/inputs/get_input_data.py +7 -7
  50. uncountable/types/api/inputs/get_input_names.py +4 -4
  51. uncountable/types/api/inputs/get_inputs_data.py +7 -7
  52. uncountable/types/api/inputs/set_input_attribute_values.py +4 -4
  53. uncountable/types/api/inputs/set_input_category.py +3 -3
  54. uncountable/types/api/inputs/set_input_subcategories.py +3 -3
  55. uncountable/types/api/inputs/set_intermediate_type.py +3 -3
  56. uncountable/types/api/material_families/update_entity_material_families.py +3 -3
  57. uncountable/types/api/outputs/get_output_data.py +7 -7
  58. uncountable/types/api/outputs/get_output_names.py +4 -4
  59. uncountable/types/api/outputs/resolve_output_conditions.py +6 -6
  60. uncountable/types/api/permissions/set_core_permissions.py +7 -7
  61. uncountable/types/api/project/get_projects.py +4 -4
  62. uncountable/types/api/project/get_projects_data.py +4 -4
  63. uncountable/types/api/recipe_links/create_recipe_link.py +3 -3
  64. uncountable/types/api/recipe_links/remove_recipe_link.py +3 -3
  65. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +4 -4
  66. uncountable/types/api/recipes/add_recipe_to_project.py +3 -3
  67. uncountable/types/api/recipes/archive_recipes.py +3 -3
  68. uncountable/types/api/recipes/associate_recipe_as_input.py +3 -3
  69. uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -3
  70. uncountable/types/api/recipes/create_recipe.py +3 -3
  71. uncountable/types/api/recipes/create_recipes.py +5 -5
  72. uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -3
  73. uncountable/types/api/recipes/edit_recipe_inputs.py +12 -12
  74. uncountable/types/api/recipes/get_curve.py +3 -3
  75. uncountable/types/api/recipes/get_recipe_calculations.py +4 -4
  76. uncountable/types/api/recipes/get_recipe_links.py +3 -3
  77. uncountable/types/api/recipes/get_recipe_names.py +4 -4
  78. uncountable/types/api/recipes/get_recipe_output_metadata.py +4 -4
  79. uncountable/types/api/recipes/get_recipes_data.py +12 -12
  80. uncountable/types/api/recipes/lock_recipes.py +4 -4
  81. uncountable/types/api/recipes/remove_recipe_from_project.py +3 -3
  82. uncountable/types/api/recipes/set_recipe_inputs.py +4 -4
  83. uncountable/types/api/recipes/set_recipe_metadata.py +3 -3
  84. uncountable/types/api/recipes/set_recipe_output_annotations.py +7 -7
  85. uncountable/types/api/recipes/set_recipe_outputs.py +5 -5
  86. uncountable/types/api/recipes/set_recipe_tags.py +7 -7
  87. uncountable/types/api/recipes/unarchive_recipes.py +3 -3
  88. uncountable/types/api/recipes/unlock_recipes.py +3 -3
  89. uncountable/types/api/triggers/run_trigger.py +3 -3
  90. uncountable/types/api/uploader/__init__.py +1 -0
  91. uncountable/types/api/uploader/invoke_uploader.py +38 -0
  92. uncountable/types/async_batch_processor.py +36 -0
  93. uncountable/types/async_batch_t.py +6 -4
  94. uncountable/types/calculations_t.py +2 -2
  95. uncountable/types/chemical_structure_t.py +2 -2
  96. uncountable/types/client_base.py +25 -2
  97. uncountable/types/curves_t.py +3 -3
  98. uncountable/types/entity_t.py +2 -2
  99. uncountable/types/experiment_groups_t.py +2 -2
  100. uncountable/types/field_values_t.py +5 -5
  101. uncountable/types/fields_t.py +2 -2
  102. uncountable/types/generic_upload.py +9 -0
  103. uncountable/types/generic_upload_t.py +41 -0
  104. uncountable/types/id_source_t.py +5 -5
  105. uncountable/types/identifier_t.py +4 -4
  106. uncountable/types/input_attributes_t.py +2 -2
  107. uncountable/types/inputs_t.py +2 -2
  108. uncountable/types/job_definition.py +26 -0
  109. uncountable/types/job_definition_t.py +203 -0
  110. uncountable/types/outputs_t.py +2 -2
  111. uncountable/types/phases_t.py +2 -2
  112. uncountable/types/recipe_identifiers_t.py +4 -4
  113. uncountable/types/recipe_links_t.py +2 -2
  114. uncountable/types/recipe_metadata_t.py +4 -4
  115. uncountable/types/recipe_output_metadata_t.py +2 -2
  116. uncountable/types/recipe_tags_t.py +2 -2
  117. uncountable/types/recipe_workflow_steps_t.py +5 -5
  118. uncountable/types/recipes_t.py +2 -2
  119. uncountable/types/response_t.py +2 -2
  120. uncountable/types/secret_retrieval.py +12 -0
  121. uncountable/types/secret_retrieval_t.py +69 -0
  122. uncountable/types/units_t.py +2 -2
  123. uncountable/types/users_t.py +2 -2
  124. uncountable/types/workflows_t.py +3 -3
  125. uncountable/integration/types.py +0 -89
  126. {UncountablePythonSDK-0.0.40.dist-info → UncountablePythonSDK-0.0.42.dist-info}/WHEEL +0 -0
  127. {UncountablePythonSDK-0.0.40.dist-info → UncountablePythonSDK-0.0.42.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,41 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
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
+ import dataclasses
11
+ from . import identifier_t
12
+
13
+ __all__: list[str] = [
14
+ "GenericRemoteDirectoryScope",
15
+ "GenericUploadStrategy",
16
+ ]
17
+
18
+
19
+ # DO NOT MODIFY -- This file is generated by type_spec
20
+ @dataclasses.dataclass(kw_only=True)
21
+ class GenericRemoteDirectoryScope:
22
+ src_path: str
23
+ success_archive_path: str
24
+ failure_archive_path: str
25
+ recursive: bool
26
+ prepend_date_on_archive: bool
27
+ valid_file_extensions: list[str]
28
+ filename_regex: typing.Optional[str] = None
29
+ max_files: typing.Optional[int] = None
30
+ detection_keyword: typing.Optional[str] = None
31
+ delimiter: typing.Optional[str] = None
32
+
33
+
34
+ # DO NOT MODIFY -- This file is generated by type_spec
35
+ @dataclasses.dataclass(kw_only=True)
36
+ class GenericUploadStrategy:
37
+ uploader_key: identifier_t.IdentifierKey
38
+ material_family_keys: list[identifier_t.IdentifierKey]
39
+ parse_files_individually: bool
40
+ skip_moving_files: bool = False
41
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from . import entity_t
12
12
 
13
13
  __all__: list[str] = [
@@ -20,25 +20,25 @@ __all__: list[str] = [
20
20
 
21
21
 
22
22
  # DO NOT MODIFY -- This file is generated by type_spec
23
- @dataclass(kw_only=True)
23
+ @dataclasses.dataclass(kw_only=True)
24
24
  class IdSourceSpecBase:
25
25
  pass
26
26
 
27
27
 
28
28
  # DO NOT MODIFY -- This file is generated by type_spec
29
- @dataclass(kw_only=True)
29
+ @dataclasses.dataclass(kw_only=True)
30
30
  class IdSourceSpecEntity(IdSourceSpecBase):
31
31
  entity_type: entity_t.EntityType
32
32
 
33
33
 
34
34
  # DO NOT MODIFY -- This file is generated by type_spec
35
- @dataclass(kw_only=True)
35
+ @dataclasses.dataclass(kw_only=True)
36
36
  class IdSourceSpecCustomEntity(IdSourceSpecBase):
37
37
  definition_ref_name: str
38
38
 
39
39
 
40
40
  # DO NOT MODIFY -- This file is generated by type_spec
41
- @dataclass(kw_only=True)
41
+ @dataclasses.dataclass(kw_only=True)
42
42
  class IdSourceSpecFieldOptions(IdSourceSpecBase):
43
43
  set_ref_name: str
44
44
  subset_ref_name: typing.Optional[str] = None
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from . import base_t
13
13
 
@@ -23,7 +23,7 @@ __all__: list[str] = [
23
23
  @serial_class(
24
24
  parse_require={"type"},
25
25
  )
26
- @dataclass(kw_only=True, frozen=True, eq=True)
26
+ @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
27
27
  class IdentifierKeyId:
28
28
  type: typing.Literal["id"] = "id"
29
29
  id: base_t.ObjectId
@@ -33,7 +33,7 @@ class IdentifierKeyId:
33
33
  @serial_class(
34
34
  parse_require={"type"},
35
35
  )
36
- @dataclass(kw_only=True, frozen=True, eq=True)
36
+ @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
37
37
  class IdentifierKeyRefName:
38
38
  type: typing.Literal["ref_name"] = "ref_name"
39
39
  ref_name: str
@@ -43,7 +43,7 @@ class IdentifierKeyRefName:
43
43
  @serial_class(
44
44
  parse_require={"type"},
45
45
  )
46
- @dataclass(kw_only=True, frozen=True, eq=True)
46
+ @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
47
47
  class IdentifierKeyBatchReference:
48
48
  type: typing.Literal["batch_reference"] = "batch_reference"
49
49
  reference: str
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from . import base_t
13
13
 
@@ -21,7 +21,7 @@ __all__: list[str] = [
21
21
  unconverted_values={"quantity_json"},
22
22
  to_string_values={"quantity_dec"},
23
23
  )
24
- @dataclass(kw_only=True)
24
+ @dataclasses.dataclass(kw_only=True)
25
25
  class InputAttributeValue:
26
26
  attribute_id: base_t.ObjectId
27
27
  quantity_dec: typing.Optional[Decimal] = None
@@ -8,7 +8,7 @@ import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
10
  from pkgs.strenum_compat import StrEnum
11
- from dataclasses import dataclass
11
+ import dataclasses
12
12
  from pkgs.serialization import serial_string_enum
13
13
  from . import base_t
14
14
 
@@ -51,7 +51,7 @@ class IngredientType(StrEnum):
51
51
 
52
52
 
53
53
  # DO NOT MODIFY -- This file is generated by type_spec
54
- @dataclass(kw_only=True)
54
+ @dataclasses.dataclass(kw_only=True)
55
55
  class SimpleInput:
56
56
  input_id: base_t.ObjectId
57
57
  quantity_type: IngredientQuantityType
@@ -0,0 +1,26 @@
1
+ # flake8: noqa: F821
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ # DO NOT MODIFY -- This file is generated by type_spec
6
+ # Kept only for SDK backwards compatibility
7
+ from .job_definition_t import JobDefinitionType as JobDefinitionType
8
+ from .job_definition_t import JobExecutorType as JobExecutorType
9
+ from .job_definition_t import AuthRetrievalType as AuthRetrievalType
10
+ from .job_definition_t import GenericUploadDataSourceType as GenericUploadDataSourceType
11
+ from .job_definition_t import JobExecutorBase as JobExecutorBase
12
+ from .job_definition_t import JobExecutorScript as JobExecutorScript
13
+ from .job_definition_t import GenericUploadDataSourceBase as GenericUploadDataSourceBase
14
+ from .job_definition_t import GenericUploadDataSourceSFTP as GenericUploadDataSourceSFTP
15
+ from .job_definition_t import GenericUploadDataSource as GenericUploadDataSource
16
+ from .job_definition_t import JobExecutorGenericUpload as JobExecutorGenericUpload
17
+ from .job_definition_t import JobExecutor as JobExecutor
18
+ from .job_definition_t import JobDefinitionBase as JobDefinitionBase
19
+ from .job_definition_t import CronJobDefinition as CronJobDefinition
20
+ from .job_definition_t import JobDefinition as JobDefinition
21
+ from .job_definition_t import AuthRetrievalBase as AuthRetrievalBase
22
+ from .job_definition_t import AuthRetrievalEnv as AuthRetrievalEnv
23
+ from .job_definition_t import AuthRetrieval as AuthRetrieval
24
+ from .job_definition_t import ProfileDefinition as ProfileDefinition
25
+ from .job_definition_t import ProfileMetadata as ProfileMetadata
26
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,203 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 Q003
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
+ import dataclasses
12
+ from pkgs.serialization import serial_class
13
+ from pkgs.serialization import serial_union_annotation
14
+ from . import generic_upload_t
15
+ from . import secret_retrieval_t
16
+
17
+ __all__: list[str] = [
18
+ "AuthRetrieval",
19
+ "AuthRetrievalBase",
20
+ "AuthRetrievalEnv",
21
+ "AuthRetrievalType",
22
+ "CronJobDefinition",
23
+ "GenericUploadDataSource",
24
+ "GenericUploadDataSourceBase",
25
+ "GenericUploadDataSourceSFTP",
26
+ "GenericUploadDataSourceType",
27
+ "JobDefinition",
28
+ "JobDefinitionBase",
29
+ "JobDefinitionType",
30
+ "JobExecutor",
31
+ "JobExecutorBase",
32
+ "JobExecutorGenericUpload",
33
+ "JobExecutorScript",
34
+ "JobExecutorType",
35
+ "ProfileDefinition",
36
+ "ProfileMetadata",
37
+ ]
38
+
39
+
40
+ # DO NOT MODIFY -- This file is generated by type_spec
41
+ class JobDefinitionType(StrEnum):
42
+ CRON = "cron"
43
+
44
+
45
+ # DO NOT MODIFY -- This file is generated by type_spec
46
+ class JobExecutorType(StrEnum):
47
+ SCRIPT = "script"
48
+ GENERIC_UPLOAD = "generic_upload"
49
+
50
+
51
+ # DO NOT MODIFY -- This file is generated by type_spec
52
+ class AuthRetrievalType(StrEnum):
53
+ ENV = "env"
54
+
55
+
56
+ # DO NOT MODIFY -- This file is generated by type_spec
57
+ class GenericUploadDataSourceType(StrEnum):
58
+ SFTP = "sftp"
59
+
60
+
61
+ # DO NOT MODIFY -- This file is generated by type_spec
62
+ @dataclasses.dataclass(kw_only=True)
63
+ class JobExecutorBase:
64
+ type: JobExecutorType
65
+
66
+
67
+ # DO NOT MODIFY -- This file is generated by type_spec
68
+ @serial_class(
69
+ parse_require={"type"},
70
+ )
71
+ @dataclasses.dataclass(kw_only=True)
72
+ class JobExecutorScript(JobExecutorBase):
73
+ type: typing.Literal[JobExecutorType.SCRIPT] = JobExecutorType.SCRIPT
74
+ import_path: str
75
+
76
+
77
+ # DO NOT MODIFY -- This file is generated by type_spec
78
+ @dataclasses.dataclass(kw_only=True)
79
+ class GenericUploadDataSourceBase:
80
+ type: GenericUploadDataSourceType
81
+
82
+
83
+ # DO NOT MODIFY -- This file is generated by type_spec
84
+ @serial_class(
85
+ parse_require={"type"},
86
+ )
87
+ @dataclasses.dataclass(kw_only=True)
88
+ class GenericUploadDataSourceSFTP(GenericUploadDataSourceBase):
89
+ type: typing.Literal[GenericUploadDataSourceType.SFTP] = GenericUploadDataSourceType.SFTP
90
+ host: str
91
+ username: str
92
+ pem_secret: secret_retrieval_t.SecretRetrieval
93
+
94
+
95
+ # DO NOT MODIFY -- This file is generated by type_spec
96
+ GenericUploadDataSource = typing.Annotated[
97
+ typing.Union[GenericUploadDataSourceSFTP],
98
+ serial_union_annotation(
99
+ discriminator="type",
100
+ discriminator_map={
101
+ "sftp": GenericUploadDataSourceSFTP,
102
+ },
103
+ ),
104
+ ]
105
+
106
+
107
+ # DO NOT MODIFY -- This file is generated by type_spec
108
+ @serial_class(
109
+ parse_require={"type"},
110
+ )
111
+ @dataclasses.dataclass(kw_only=True)
112
+ class JobExecutorGenericUpload(JobExecutorBase):
113
+ type: typing.Literal[JobExecutorType.GENERIC_UPLOAD] = JobExecutorType.GENERIC_UPLOAD
114
+ data_source: GenericUploadDataSource
115
+ upload_strategy: generic_upload_t.GenericUploadStrategy
116
+ remote_directories: list[generic_upload_t.GenericRemoteDirectoryScope]
117
+
118
+
119
+ # DO NOT MODIFY -- This file is generated by type_spec
120
+ JobExecutor = typing.Annotated[
121
+ typing.Union[JobExecutorScript, JobExecutorGenericUpload],
122
+ serial_union_annotation(
123
+ discriminator="type",
124
+ discriminator_map={
125
+ "script": JobExecutorScript,
126
+ "generic_upload": JobExecutorGenericUpload,
127
+ },
128
+ ),
129
+ ]
130
+
131
+
132
+ # DO NOT MODIFY -- This file is generated by type_spec
133
+ @dataclasses.dataclass(kw_only=True)
134
+ class JobDefinitionBase:
135
+ id: str
136
+ name: str
137
+ executor: JobExecutor
138
+
139
+
140
+ # DO NOT MODIFY -- This file is generated by type_spec
141
+ @serial_class(
142
+ parse_require={"type"},
143
+ )
144
+ @dataclasses.dataclass(kw_only=True)
145
+ class CronJobDefinition(JobDefinitionBase):
146
+ type: typing.Literal[JobDefinitionType.CRON] = JobDefinitionType.CRON
147
+ cron_spec: str
148
+
149
+
150
+ # DO NOT MODIFY -- This file is generated by type_spec
151
+ JobDefinition = typing.Annotated[
152
+ typing.Union[CronJobDefinition],
153
+ serial_union_annotation(
154
+ discriminator="type",
155
+ discriminator_map={
156
+ "cron": CronJobDefinition,
157
+ },
158
+ ),
159
+ ]
160
+
161
+
162
+ # DO NOT MODIFY -- This file is generated by type_spec
163
+ @dataclasses.dataclass(kw_only=True)
164
+ class AuthRetrievalBase:
165
+ type: AuthRetrievalType
166
+
167
+
168
+ # DO NOT MODIFY -- This file is generated by type_spec
169
+ @serial_class(
170
+ parse_require={"type"},
171
+ )
172
+ @dataclasses.dataclass(kw_only=True)
173
+ class AuthRetrievalEnv(AuthRetrievalBase):
174
+ type: typing.Literal[AuthRetrievalType.ENV] = AuthRetrievalType.ENV
175
+
176
+
177
+ # DO NOT MODIFY -- This file is generated by type_spec
178
+ AuthRetrieval = typing.Annotated[
179
+ typing.Union[AuthRetrievalEnv],
180
+ serial_union_annotation(
181
+ discriminator="type",
182
+ discriminator_map={
183
+ "env": AuthRetrievalEnv,
184
+ },
185
+ ),
186
+ ]
187
+
188
+
189
+ # DO NOT MODIFY -- This file is generated by type_spec
190
+ @dataclasses.dataclass(kw_only=True)
191
+ class ProfileDefinition:
192
+ auth_retrieval: AuthRetrieval
193
+ base_url: str
194
+ jobs: list[JobDefinition]
195
+
196
+
197
+ # DO NOT MODIFY -- This file is generated by type_spec
198
+ @dataclasses.dataclass(kw_only=True)
199
+ class ProfileMetadata:
200
+ name: str
201
+ base_url: str
202
+ auth_retrieval: AuthRetrieval
203
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from . import base_t
12
12
  from . import units_t
13
13
 
@@ -17,7 +17,7 @@ __all__: list[str] = [
17
17
 
18
18
 
19
19
  # DO NOT MODIFY -- This file is generated by type_spec
20
- @dataclass(kw_only=True)
20
+ @dataclasses.dataclass(kw_only=True)
21
21
  class SimpleOutput:
22
22
  output_id: base_t.ObjectId
23
23
  name: str
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from . import base_t
12
12
 
13
13
  __all__: list[str] = [
@@ -16,7 +16,7 @@ __all__: list[str] = [
16
16
 
17
17
 
18
18
  # DO NOT MODIFY -- This file is generated by type_spec
19
- @dataclass(kw_only=True)
19
+ @dataclasses.dataclass(kw_only=True)
20
20
  class Phase:
21
21
  id: base_t.ObjectId
22
22
  name: str
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from . import base_t
13
13
 
@@ -24,7 +24,7 @@ __all__: list[str] = [
24
24
  @serial_class(
25
25
  parse_require={"type"},
26
26
  )
27
- @dataclass(kw_only=True)
27
+ @dataclasses.dataclass(kw_only=True)
28
28
  class RecipeIdentifierEditableName:
29
29
  type: typing.Literal["name"] = "name"
30
30
  editable_name: str
@@ -35,7 +35,7 @@ class RecipeIdentifierEditableName:
35
35
  to_string_values={"quantity_dec"},
36
36
  parse_require={"type"},
37
37
  )
38
- @dataclass(kw_only=True)
38
+ @dataclasses.dataclass(kw_only=True)
39
39
  class RecipeIdentifierMetadata:
40
40
  type: typing.Literal["metadata"] = "metadata"
41
41
  recipe_metadata_id: base_t.ObjectId
@@ -47,7 +47,7 @@ class RecipeIdentifierMetadata:
47
47
  @serial_class(
48
48
  parse_require={"type"},
49
49
  )
50
- @dataclass(kw_only=True)
50
+ @dataclasses.dataclass(kw_only=True)
51
51
  class RecipeIdentifierMaterialFamily:
52
52
  type: typing.Literal["material_family_id"] = "material_family_id"
53
53
  material_family_id: base_t.ObjectId
@@ -8,7 +8,7 @@ import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
10
  from pkgs.strenum_compat import StrEnum
11
- from dataclasses import dataclass
11
+ import dataclasses
12
12
  from pkgs.serialization import serial_string_enum
13
13
  from . import base_t
14
14
 
@@ -41,7 +41,7 @@ class RecipeLinkType(StrEnum):
41
41
 
42
42
 
43
43
  # DO NOT MODIFY -- This file is generated by type_spec
44
- @dataclass(kw_only=True, frozen=True, eq=True)
44
+ @dataclasses.dataclass(kw_only=True, frozen=True, eq=True)
45
45
  class RecipeLink:
46
46
  recipe_id_from: base_t.ObjectId
47
47
  recipe_id_to: base_t.ObjectId
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
  from . import base_t
13
13
 
@@ -23,7 +23,7 @@ __all__: list[str] = [
23
23
  unconverted_values={"value_json"},
24
24
  to_string_values={"value_numeric"},
25
25
  )
26
- @dataclass(kw_only=True)
26
+ @dataclasses.dataclass(kw_only=True)
27
27
  class MetadataValue:
28
28
  metadata_id: base_t.ObjectId
29
29
  value_numeric: typing.Optional[Decimal] = None
@@ -32,7 +32,7 @@ class MetadataValue:
32
32
 
33
33
 
34
34
  # DO NOT MODIFY -- This file is generated by type_spec
35
- @dataclass(kw_only=True)
35
+ @dataclasses.dataclass(kw_only=True)
36
36
  class SimpleRecipeMetadataField:
37
37
  metadata_id: base_t.ObjectId
38
38
  name: str
@@ -44,7 +44,7 @@ class SimpleRecipeMetadataField:
44
44
  unconverted_values={"quantity_json"},
45
45
  to_string_values={"quantity_dec"},
46
46
  )
47
- @dataclass(kw_only=True)
47
+ @dataclasses.dataclass(kw_only=True)
48
48
  class RecipeMetadata:
49
49
  metadata_id: base_t.ObjectId
50
50
  quantity_dec: typing.Optional[Decimal] = None
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from . import base_t
12
12
 
13
13
  __all__: list[str] = [
@@ -16,7 +16,7 @@ __all__: list[str] = [
16
16
 
17
17
 
18
18
  # DO NOT MODIFY -- This file is generated by type_spec
19
- @dataclass(kw_only=True)
19
+ @dataclasses.dataclass(kw_only=True)
20
20
  class RecipeOutputMetadataField:
21
21
  id: base_t.ObjectId
22
22
  name: str
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from . import base_t
12
12
 
13
13
  __all__: list[str] = [
@@ -16,7 +16,7 @@ __all__: list[str] = [
16
16
 
17
17
 
18
18
  # DO NOT MODIFY -- This file is generated by type_spec
19
- @dataclass(kw_only=True)
19
+ @dataclasses.dataclass(kw_only=True)
20
20
  class SimpleRecipeTag:
21
21
  recipe_tag_id: base_t.ObjectId
22
22
  name: str
@@ -8,7 +8,7 @@ import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
10
  from pkgs.strenum_compat import StrEnum
11
- from dataclasses import dataclass
11
+ import dataclasses
12
12
  from pkgs.serialization import serial_class
13
13
  from pkgs.serialization import serial_union_annotation
14
14
  from . import identifier_t
@@ -32,7 +32,7 @@ class RecipeWorkflowStepIdentifierType(StrEnum):
32
32
 
33
33
 
34
34
  # DO NOT MODIFY -- This file is generated by type_spec
35
- @dataclass(kw_only=True)
35
+ @dataclasses.dataclass(kw_only=True)
36
36
  class RecipeWorkflowStepIdentifierBase:
37
37
  type: RecipeWorkflowStepIdentifierType
38
38
 
@@ -41,7 +41,7 @@ class RecipeWorkflowStepIdentifierBase:
41
41
  @serial_class(
42
42
  parse_require={"type"},
43
43
  )
44
- @dataclass(kw_only=True)
44
+ @dataclasses.dataclass(kw_only=True)
45
45
  class RecipeWorkflowStepIdentifierDefault(RecipeWorkflowStepIdentifierBase):
46
46
  type: typing.Literal[RecipeWorkflowStepIdentifierType.DEFAULT] = RecipeWorkflowStepIdentifierType.DEFAULT
47
47
 
@@ -56,7 +56,7 @@ class RecipeWorkflowStepPosition(StrEnum):
56
56
  @serial_class(
57
57
  parse_require={"type"},
58
58
  )
59
- @dataclass(kw_only=True)
59
+ @dataclasses.dataclass(kw_only=True)
60
60
  class RecipeWorkflowStepIdentifierWorkflowStep(RecipeWorkflowStepIdentifierBase):
61
61
  type: typing.Literal[RecipeWorkflowStepIdentifierType.WORKFLOW_STEP] = RecipeWorkflowStepIdentifierType.WORKFLOW_STEP
62
62
  workflow_step_key: identifier_t.IdentifierKey
@@ -67,7 +67,7 @@ class RecipeWorkflowStepIdentifierWorkflowStep(RecipeWorkflowStepIdentifierBase)
67
67
  @serial_class(
68
68
  parse_require={"type"},
69
69
  )
70
- @dataclass(kw_only=True)
70
+ @dataclasses.dataclass(kw_only=True)
71
71
  class RecipeWorkflowStepIdentifierKey:
72
72
  type: typing.Literal[RecipeWorkflowStepIdentifierType.IDENTIFIER_KEY] = RecipeWorkflowStepIdentifierType.IDENTIFIER_KEY
73
73
  recipe_workflow_step_key: identifier_t.IdentifierKey
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
 
12
12
  __all__: list[str] = [
13
13
  "RecipeAttributeFormatting",
@@ -15,7 +15,7 @@ __all__: list[str] = [
15
15
 
16
16
 
17
17
  # DO NOT MODIFY -- This file is generated by type_spec
18
- @dataclass(kw_only=True)
18
+ @dataclasses.dataclass(kw_only=True)
19
19
  class RecipeAttributeFormatting:
20
20
  background_color: str
21
21
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -7,7 +7,7 @@ from __future__ import annotations
7
7
  import typing # noqa: F401
8
8
  import datetime # noqa: F401
9
9
  from decimal import Decimal # noqa: F401
10
- from dataclasses import dataclass
10
+ import dataclasses
11
11
  from pkgs.serialization import serial_class
12
12
 
13
13
  __all__: list[str] = [
@@ -19,7 +19,7 @@ __all__: list[str] = [
19
19
  @serial_class(
20
20
  parse_require={"status"},
21
21
  )
22
- @dataclass(kw_only=True)
22
+ @dataclasses.dataclass(kw_only=True)
23
23
  class Response:
24
24
  status: typing.Literal["ok"] = "ok"
25
25
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,12 @@
1
+ # flake8: noqa: F821
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ # DO NOT MODIFY -- This file is generated by type_spec
6
+ # Kept only for SDK backwards compatibility
7
+ from .secret_retrieval_t import SecretRetrievalBase as SecretRetrievalBase
8
+ from .secret_retrieval_t import SecretRetrievalType as SecretRetrievalType
9
+ from .secret_retrieval_t import SecretRetrievalEnv as SecretRetrievalEnv
10
+ from .secret_retrieval_t import SecretRetrievalAWS as SecretRetrievalAWS
11
+ from .secret_retrieval_t import SecretRetrieval as SecretRetrieval
12
+ # DO NOT MODIFY -- This file is generated by type_spec