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.

Files changed (136) hide show
  1. docs/conf.py +2 -2
  2. docs/justfile +1 -1
  3. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +35 -0
  4. examples/integration-server/jobs/materials_auto/profile.yaml +9 -0
  5. examples/integration-server/pyproject.toml +2 -2
  6. pkgs/argument_parser/argument_parser.py +6 -3
  7. pkgs/filesystem_utils/_blob_session.py +8 -1
  8. pkgs/type_spec/emit_python.py +9 -3
  9. pkgs/type_spec/emit_typescript_util.py +16 -1
  10. pkgs/type_spec/parts/base.py.prepart +4 -0
  11. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  12. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +294 -0
  13. pkgs/type_spec/value_spec/convert_type.py +13 -0
  14. uncountable/core/client.py +7 -4
  15. uncountable/integration/executors/generic_upload_executor.py +3 -2
  16. uncountable/integration/job.py +24 -1
  17. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +3 -2
  18. uncountable/integration/scan_profiles.py +1 -1
  19. uncountable/integration/scheduler.py +4 -3
  20. uncountable/integration/secret_retrieval/retrieve_secret.py +1 -1
  21. uncountable/types/__init__.py +2 -0
  22. uncountable/types/api/batch/execute_batch.py +4 -4
  23. uncountable/types/api/batch/execute_batch_load_async.py +2 -2
  24. uncountable/types/api/chemical/convert_chemical_formats.py +3 -3
  25. uncountable/types/api/condition_parameters/upsert_condition_match.py +4 -3
  26. uncountable/types/api/entity/create_entities.py +3 -3
  27. uncountable/types/api/entity/create_entity.py +3 -3
  28. uncountable/types/api/entity/create_or_update_entity.py +3 -2
  29. uncountable/types/api/entity/get_entities_data.py +3 -3
  30. uncountable/types/api/entity/grant_entity_permissions.py +3 -2
  31. uncountable/types/api/entity/list_entities.py +4 -4
  32. uncountable/types/api/entity/lock_entity.py +3 -2
  33. uncountable/types/api/entity/lookup_entity.py +5 -5
  34. uncountable/types/api/entity/resolve_entity_ids.py +3 -3
  35. uncountable/types/api/entity/set_entity_field_values.py +3 -2
  36. uncountable/types/api/entity/set_values.py +3 -2
  37. uncountable/types/api/entity/transition_entity_phase.py +5 -4
  38. uncountable/types/api/entity/unlock_entity.py +3 -2
  39. uncountable/types/api/equipment/associate_equipment_input.py +2 -2
  40. uncountable/types/api/field_options/upsert_field_options.py +4 -3
  41. uncountable/types/api/files/download_file.py +4 -3
  42. uncountable/types/api/id_source/list_id_source.py +3 -3
  43. uncountable/types/api/id_source/match_id_source.py +3 -3
  44. uncountable/types/api/input_groups/get_input_group_names.py +3 -3
  45. uncountable/types/api/inputs/create_inputs.py +4 -4
  46. uncountable/types/api/inputs/get_input_data.py +6 -6
  47. uncountable/types/api/inputs/get_input_names.py +3 -3
  48. uncountable/types/api/inputs/get_inputs_data.py +6 -6
  49. uncountable/types/api/inputs/set_input_attribute_values.py +3 -3
  50. uncountable/types/api/inputs/set_input_category.py +3 -2
  51. uncountable/types/api/inputs/set_input_subcategories.py +3 -2
  52. uncountable/types/api/inputs/set_intermediate_type.py +3 -2
  53. uncountable/types/api/material_families/update_entity_material_families.py +2 -2
  54. uncountable/types/api/outputs/get_output_data.py +6 -6
  55. uncountable/types/api/outputs/get_output_names.py +3 -3
  56. uncountable/types/api/outputs/resolve_output_conditions.py +5 -5
  57. uncountable/types/api/permissions/set_core_permissions.py +7 -6
  58. uncountable/types/api/project/get_projects.py +3 -3
  59. uncountable/types/api/project/get_projects_data.py +3 -3
  60. uncountable/types/api/recipe_links/create_recipe_link.py +3 -2
  61. uncountable/types/api/recipe_links/remove_recipe_link.py +3 -2
  62. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +3 -3
  63. uncountable/types/api/recipes/add_recipe_to_project.py +3 -2
  64. uncountable/types/api/recipes/add_time_series_data.py +4 -3
  65. uncountable/types/api/recipes/archive_recipes.py +3 -2
  66. uncountable/types/api/recipes/associate_recipe_as_input.py +3 -2
  67. uncountable/types/api/recipes/associate_recipe_as_lot.py +3 -2
  68. uncountable/types/api/recipes/clear_recipe_outputs.py +3 -2
  69. uncountable/types/api/recipes/create_recipe.py +2 -2
  70. uncountable/types/api/recipes/create_recipes.py +4 -4
  71. uncountable/types/api/recipes/disassociate_recipe_as_input.py +3 -2
  72. uncountable/types/api/recipes/edit_recipe_inputs.py +17 -16
  73. uncountable/types/api/recipes/get_column_calculation_values.py +3 -3
  74. uncountable/types/api/recipes/get_curve.py +2 -2
  75. uncountable/types/api/recipes/get_recipe_calculations.py +3 -3
  76. uncountable/types/api/recipes/get_recipe_links.py +2 -2
  77. uncountable/types/api/recipes/get_recipe_names.py +3 -3
  78. uncountable/types/api/recipes/get_recipe_output_metadata.py +3 -3
  79. uncountable/types/api/recipes/get_recipes_data.py +11 -11
  80. uncountable/types/api/recipes/lock_recipes.py +4 -3
  81. uncountable/types/api/recipes/remove_recipe_from_project.py +3 -2
  82. uncountable/types/api/recipes/set_recipe_inputs.py +3 -3
  83. uncountable/types/api/recipes/set_recipe_metadata.py +3 -2
  84. uncountable/types/api/recipes/set_recipe_output_annotations.py +6 -6
  85. uncountable/types/api/recipes/set_recipe_output_file.py +3 -3
  86. uncountable/types/api/recipes/set_recipe_outputs.py +5 -5
  87. uncountable/types/api/recipes/set_recipe_tags.py +6 -6
  88. uncountable/types/api/recipes/unarchive_recipes.py +3 -2
  89. uncountable/types/api/recipes/unlock_recipes.py +3 -2
  90. uncountable/types/api/runsheet/__init__.py +1 -0
  91. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  92. uncountable/types/api/triggers/run_trigger.py +3 -2
  93. uncountable/types/api/uploader/invoke_uploader.py +2 -2
  94. uncountable/types/async_batch_processor.py +34 -0
  95. uncountable/types/async_batch_t.py +6 -5
  96. uncountable/types/auth_retrieval_t.py +4 -3
  97. uncountable/types/base_t.py +4 -0
  98. uncountable/types/calculations_t.py +1 -1
  99. uncountable/types/chemical_structure_t.py +2 -1
  100. uncountable/types/client_base.py +21 -0
  101. uncountable/types/client_config_t.py +2 -1
  102. uncountable/types/curves_t.py +2 -2
  103. uncountable/types/data.py +2 -2
  104. uncountable/types/data_t.py +42 -32
  105. uncountable/types/entity_t.py +3 -3
  106. uncountable/types/experiment_groups_t.py +1 -1
  107. uncountable/types/field_values_t.py +20 -20
  108. uncountable/types/fields_t.py +1 -1
  109. uncountable/types/generic_upload_t.py +7 -6
  110. uncountable/types/id_source_t.py +5 -4
  111. uncountable/types/identifier_t.py +3 -3
  112. uncountable/types/input_attributes_t.py +1 -1
  113. uncountable/types/inputs_t.py +1 -1
  114. uncountable/types/integration_server_t.py +2 -1
  115. uncountable/types/job_definition_t.py +14 -13
  116. uncountable/types/outputs_t.py +1 -1
  117. uncountable/types/overrides_t.py +3 -2
  118. uncountable/types/phases_t.py +1 -1
  119. uncountable/types/queued_job_t.py +7 -7
  120. uncountable/types/recipe_identifiers_t.py +3 -3
  121. uncountable/types/recipe_links_t.py +1 -1
  122. uncountable/types/recipe_metadata_t.py +3 -3
  123. uncountable/types/recipe_output_metadata_t.py +1 -1
  124. uncountable/types/recipe_tags_t.py +1 -1
  125. uncountable/types/recipe_workflow_steps_t.py +5 -4
  126. uncountable/types/recipes_t.py +2 -1
  127. uncountable/types/response_t.py +2 -1
  128. uncountable/types/secret_retrieval_t.py +4 -3
  129. uncountable/types/units_t.py +1 -1
  130. uncountable/types/users_t.py +1 -1
  131. uncountable/types/webhook_job_t.py +4 -3
  132. uncountable/types/workflows_t.py +2 -2
  133. {uncountablepythonsdk-0.0.111.dist-info → uncountablepythonsdk-0.0.113.dist-info}/METADATA +2 -1
  134. {uncountablepythonsdk-0.0.111.dist-info → uncountablepythonsdk-0.0.113.dist-info}/RECORD +136 -131
  135. {uncountablepythonsdk-0.0.111.dist-info → uncountablepythonsdk-0.0.113.dist-info}/WHEEL +1 -1
  136. {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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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.111
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"