UncountablePythonSDK 0.0.52__py3-none-any.whl → 0.0.131__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 (316) hide show
  1. docs/conf.py +54 -7
  2. docs/index.md +107 -4
  3. docs/integration_examples/create_ingredient.md +43 -0
  4. docs/integration_examples/create_output.md +56 -0
  5. docs/integration_examples/index.md +6 -0
  6. docs/justfile +2 -2
  7. docs/requirements.txt +6 -4
  8. examples/async_batch.py +3 -3
  9. examples/basic_auth.py +7 -0
  10. examples/create_entity.py +3 -1
  11. examples/create_ingredient_sdk.py +34 -0
  12. examples/download_files.py +26 -0
  13. examples/edit_recipe_inputs.py +4 -2
  14. examples/integration-server/jobs/materials_auto/concurrent_cron.py +11 -0
  15. examples/integration-server/jobs/materials_auto/example_cron.py +21 -0
  16. examples/integration-server/jobs/materials_auto/example_http.py +47 -0
  17. examples/integration-server/jobs/materials_auto/example_instrument.py +100 -0
  18. examples/integration-server/jobs/materials_auto/example_parse.py +140 -0
  19. examples/integration-server/jobs/materials_auto/example_predictions.py +61 -0
  20. examples/integration-server/jobs/materials_auto/example_runsheet_wh.py +39 -0
  21. examples/integration-server/jobs/materials_auto/example_wh.py +23 -0
  22. examples/integration-server/jobs/materials_auto/profile.yaml +104 -0
  23. examples/integration-server/pyproject.toml +224 -0
  24. examples/invoke_uploader.py +4 -1
  25. examples/oauth.py +7 -0
  26. examples/set_recipe_metadata_file.py +40 -0
  27. examples/set_recipe_output_file_sdk.py +26 -0
  28. examples/upload_files.py +1 -2
  29. pkgs/argument_parser/__init__.py +9 -0
  30. pkgs/argument_parser/_is_namedtuple.py +3 -0
  31. pkgs/argument_parser/argument_parser.py +217 -70
  32. pkgs/filesystem_utils/__init__.py +1 -0
  33. pkgs/filesystem_utils/_blob_session.py +144 -0
  34. pkgs/filesystem_utils/_gdrive_session.py +10 -7
  35. pkgs/filesystem_utils/_s3_session.py +15 -13
  36. pkgs/filesystem_utils/_sftp_session.py +11 -7
  37. pkgs/filesystem_utils/file_type_utils.py +30 -10
  38. pkgs/py.typed +0 -0
  39. pkgs/serialization/__init__.py +7 -2
  40. pkgs/serialization/annotation.py +64 -0
  41. pkgs/serialization/missing_sentry.py +1 -1
  42. pkgs/serialization/opaque_key.py +1 -1
  43. pkgs/serialization/serial_alias.py +47 -0
  44. pkgs/serialization/serial_class.py +47 -26
  45. pkgs/serialization/serial_generic.py +16 -0
  46. pkgs/serialization/serial_union.py +17 -14
  47. pkgs/serialization/yaml.py +4 -1
  48. pkgs/serialization_util/__init__.py +6 -0
  49. pkgs/serialization_util/dataclasses.py +14 -0
  50. pkgs/serialization_util/serialization_helpers.py +15 -5
  51. pkgs/type_spec/actions_registry/__main__.py +0 -4
  52. pkgs/type_spec/actions_registry/emit_typescript.py +5 -5
  53. pkgs/type_spec/builder.py +354 -119
  54. pkgs/type_spec/builder_types.py +9 -0
  55. pkgs/type_spec/config.py +51 -11
  56. pkgs/type_spec/cross_output_links.py +99 -0
  57. pkgs/type_spec/emit_io_ts.py +1 -1
  58. pkgs/type_spec/emit_open_api.py +127 -36
  59. pkgs/type_spec/emit_open_api_util.py +5 -6
  60. pkgs/type_spec/emit_python.py +329 -121
  61. pkgs/type_spec/emit_typescript.py +117 -256
  62. pkgs/type_spec/emit_typescript_util.py +291 -2
  63. pkgs/type_spec/load_types.py +18 -4
  64. pkgs/type_spec/non_discriminated_union_exceptions.py +14 -0
  65. pkgs/type_spec/open_api_util.py +29 -4
  66. pkgs/type_spec/parts/base.py.prepart +13 -10
  67. pkgs/type_spec/parts/base.ts.prepart +4 -0
  68. pkgs/type_spec/type_info/__main__.py +3 -1
  69. pkgs/type_spec/type_info/emit_type_info.py +124 -29
  70. pkgs/type_spec/ui_entry_actions/__init__.py +4 -0
  71. pkgs/type_spec/ui_entry_actions/generate_ui_entry_actions.py +308 -0
  72. pkgs/type_spec/util.py +4 -4
  73. pkgs/type_spec/value_spec/__main__.py +26 -9
  74. pkgs/type_spec/value_spec/convert_type.py +21 -1
  75. pkgs/type_spec/value_spec/emit_python.py +25 -7
  76. pkgs/type_spec/value_spec/types.py +1 -1
  77. uncountable/core/async_batch.py +1 -1
  78. uncountable/core/client.py +142 -39
  79. uncountable/core/environment.py +41 -0
  80. uncountable/core/file_upload.py +52 -18
  81. uncountable/integration/cli.py +142 -0
  82. uncountable/integration/construct_client.py +8 -8
  83. uncountable/integration/cron.py +11 -37
  84. uncountable/integration/db/connect.py +12 -2
  85. uncountable/integration/db/session.py +25 -0
  86. uncountable/integration/entrypoint.py +8 -37
  87. uncountable/integration/executors/executors.py +125 -2
  88. uncountable/integration/executors/generic_upload_executor.py +87 -29
  89. uncountable/integration/executors/script_executor.py +3 -3
  90. uncountable/integration/http_server/__init__.py +5 -0
  91. uncountable/integration/http_server/types.py +69 -0
  92. uncountable/integration/job.py +242 -12
  93. uncountable/integration/queue_runner/__init__.py +0 -0
  94. uncountable/integration/queue_runner/command_server/__init__.py +28 -0
  95. uncountable/integration/queue_runner/command_server/command_client.py +133 -0
  96. uncountable/integration/queue_runner/command_server/command_server.py +142 -0
  97. uncountable/integration/queue_runner/command_server/constants.py +4 -0
  98. uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  99. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +58 -0
  100. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +57 -0
  101. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +114 -0
  102. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +264 -0
  103. uncountable/integration/queue_runner/command_server/types.py +75 -0
  104. uncountable/integration/queue_runner/datastore/__init__.py +3 -0
  105. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +250 -0
  106. uncountable/integration/queue_runner/datastore/interface.py +29 -0
  107. uncountable/integration/queue_runner/datastore/model.py +24 -0
  108. uncountable/integration/queue_runner/job_scheduler.py +200 -0
  109. uncountable/integration/queue_runner/queue_runner.py +34 -0
  110. uncountable/integration/queue_runner/types.py +7 -0
  111. uncountable/integration/queue_runner/worker.py +116 -0
  112. uncountable/integration/scan_profiles.py +67 -0
  113. uncountable/integration/scheduler.py +199 -0
  114. uncountable/integration/secret_retrieval/retrieve_secret.py +26 -4
  115. uncountable/integration/server.py +94 -69
  116. uncountable/integration/telemetry.py +150 -34
  117. uncountable/integration/webhook_server/entrypoint.py +97 -0
  118. uncountable/types/__init__.py +78 -1
  119. uncountable/types/api/batch/execute_batch.py +13 -6
  120. uncountable/types/api/batch/execute_batch_load_async.py +9 -3
  121. uncountable/types/api/chemical/convert_chemical_formats.py +17 -5
  122. uncountable/types/api/condition_parameters/__init__.py +1 -0
  123. uncountable/types/api/condition_parameters/upsert_condition_match.py +72 -0
  124. uncountable/types/api/entity/create_entities.py +19 -7
  125. uncountable/types/api/entity/create_entity.py +17 -8
  126. uncountable/types/api/entity/create_or_update_entity.py +48 -0
  127. uncountable/types/api/entity/export_entities.py +59 -0
  128. uncountable/types/api/entity/get_entities_data.py +13 -4
  129. uncountable/types/api/entity/grant_entity_permissions.py +48 -0
  130. uncountable/types/api/entity/list_aggregate.py +79 -0
  131. uncountable/types/api/entity/list_entities.py +42 -10
  132. uncountable/types/api/entity/lock_entity.py +11 -4
  133. uncountable/types/api/entity/lookup_entity.py +116 -0
  134. uncountable/types/api/entity/resolve_entity_ids.py +15 -6
  135. uncountable/types/api/entity/set_entity_field_values.py +44 -0
  136. uncountable/types/api/entity/set_values.py +10 -3
  137. uncountable/types/api/entity/transition_entity_phase.py +22 -7
  138. uncountable/types/api/entity/unlock_entity.py +10 -3
  139. uncountable/types/api/equipment/associate_equipment_input.py +9 -3
  140. uncountable/types/api/field_options/upsert_field_options.py +17 -7
  141. uncountable/types/api/files/__init__.py +1 -0
  142. uncountable/types/api/files/download_file.py +77 -0
  143. uncountable/types/api/id_source/list_id_source.py +16 -7
  144. uncountable/types/api/id_source/match_id_source.py +14 -5
  145. uncountable/types/api/input_groups/get_input_group_names.py +13 -4
  146. uncountable/types/api/inputs/create_inputs.py +23 -9
  147. uncountable/types/api/inputs/get_input_data.py +30 -12
  148. uncountable/types/api/inputs/get_input_names.py +16 -7
  149. uncountable/types/api/inputs/get_inputs_data.py +25 -7
  150. uncountable/types/api/inputs/set_input_attribute_values.py +12 -6
  151. uncountable/types/api/inputs/set_input_category.py +12 -5
  152. uncountable/types/api/inputs/set_input_subcategories.py +10 -3
  153. uncountable/types/api/inputs/set_intermediate_type.py +11 -4
  154. uncountable/types/api/integrations/__init__.py +1 -0
  155. uncountable/types/api/integrations/publish_realtime_data.py +41 -0
  156. uncountable/types/api/integrations/push_notification.py +49 -0
  157. uncountable/types/api/integrations/register_sockets_token.py +41 -0
  158. uncountable/types/api/listing/__init__.py +1 -0
  159. uncountable/types/api/listing/fetch_listing.py +58 -0
  160. uncountable/types/api/material_families/update_entity_material_families.py +10 -4
  161. uncountable/types/api/notebooks/__init__.py +1 -0
  162. uncountable/types/api/notebooks/add_notebook_content.py +119 -0
  163. uncountable/types/api/outputs/get_output_data.py +28 -13
  164. uncountable/types/api/outputs/get_output_names.py +15 -6
  165. uncountable/types/api/outputs/get_output_organization.py +173 -0
  166. uncountable/types/api/outputs/resolve_output_conditions.py +20 -8
  167. uncountable/types/api/permissions/set_core_permissions.py +26 -10
  168. uncountable/types/api/project/get_projects.py +16 -7
  169. uncountable/types/api/project/get_projects_data.py +17 -8
  170. uncountable/types/api/recipe_links/create_recipe_link.py +12 -5
  171. uncountable/types/api/recipe_links/remove_recipe_link.py +11 -4
  172. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +16 -7
  173. uncountable/types/api/recipes/add_recipe_to_project.py +10 -3
  174. uncountable/types/api/recipes/add_time_series_data.py +64 -0
  175. uncountable/types/api/recipes/archive_recipes.py +11 -4
  176. uncountable/types/api/recipes/associate_recipe_as_input.py +12 -5
  177. uncountable/types/api/recipes/associate_recipe_as_lot.py +10 -3
  178. uncountable/types/api/recipes/clear_recipe_outputs.py +42 -0
  179. uncountable/types/api/recipes/create_mix_order.py +44 -0
  180. uncountable/types/api/recipes/create_recipe.py +15 -9
  181. uncountable/types/api/recipes/create_recipes.py +21 -9
  182. uncountable/types/api/recipes/disassociate_recipe_as_input.py +10 -3
  183. uncountable/types/api/recipes/edit_recipe_inputs.py +134 -22
  184. uncountable/types/api/recipes/get_column_calculation_values.py +57 -0
  185. uncountable/types/api/recipes/get_curve.py +11 -5
  186. uncountable/types/api/recipes/get_recipe_calculations.py +13 -7
  187. uncountable/types/api/recipes/get_recipe_links.py +10 -4
  188. uncountable/types/api/recipes/get_recipe_names.py +13 -4
  189. uncountable/types/api/recipes/get_recipe_output_metadata.py +12 -6
  190. uncountable/types/api/recipes/get_recipes_data.py +87 -33
  191. uncountable/types/api/recipes/lock_recipes.py +19 -8
  192. uncountable/types/api/recipes/remove_recipe_from_project.py +10 -3
  193. uncountable/types/api/recipes/set_recipe_inputs.py +16 -10
  194. uncountable/types/api/recipes/set_recipe_metadata.py +10 -3
  195. uncountable/types/api/recipes/set_recipe_output_annotations.py +24 -12
  196. uncountable/types/api/recipes/set_recipe_output_file.py +55 -0
  197. uncountable/types/api/recipes/set_recipe_outputs.py +35 -12
  198. uncountable/types/api/recipes/set_recipe_tags.py +26 -9
  199. uncountable/types/api/recipes/set_recipe_total.py +59 -0
  200. uncountable/types/api/recipes/unarchive_recipes.py +10 -3
  201. uncountable/types/api/recipes/unlock_recipes.py +14 -6
  202. uncountable/types/api/runsheet/__init__.py +1 -0
  203. uncountable/types/api/runsheet/complete_async_upload.py +41 -0
  204. uncountable/types/api/triggers/run_trigger.py +11 -4
  205. uncountable/types/api/uploader/complete_async_parse.py +46 -0
  206. uncountable/types/api/uploader/invoke_uploader.py +13 -6
  207. uncountable/types/api/user/__init__.py +1 -0
  208. uncountable/types/api/user/get_current_user_info.py +40 -0
  209. uncountable/types/async_batch.py +2 -1
  210. uncountable/types/async_batch_processor.py +618 -18
  211. uncountable/types/async_batch_t.py +54 -7
  212. uncountable/types/async_jobs.py +8 -0
  213. uncountable/types/async_jobs_t.py +52 -0
  214. uncountable/types/auth_retrieval.py +11 -0
  215. uncountable/types/auth_retrieval_t.py +75 -0
  216. uncountable/types/base.py +0 -1
  217. uncountable/types/base_t.py +13 -11
  218. uncountable/types/calculations.py +0 -1
  219. uncountable/types/calculations_t.py +5 -2
  220. uncountable/types/chemical_structure.py +0 -1
  221. uncountable/types/chemical_structure_t.py +6 -5
  222. uncountable/types/client_base.py +751 -70
  223. uncountable/types/client_config.py +1 -1
  224. uncountable/types/client_config_t.py +17 -3
  225. uncountable/types/curves.py +0 -1
  226. uncountable/types/curves_t.py +10 -7
  227. uncountable/types/data.py +12 -0
  228. uncountable/types/data_t.py +103 -0
  229. uncountable/types/entity.py +4 -1
  230. uncountable/types/entity_t.py +125 -7
  231. uncountable/types/experiment_groups.py +0 -1
  232. uncountable/types/experiment_groups_t.py +5 -2
  233. uncountable/types/exports.py +8 -0
  234. uncountable/types/exports_t.py +34 -0
  235. uncountable/types/field_values.py +19 -1
  236. uncountable/types/field_values_t.py +246 -9
  237. uncountable/types/fields.py +0 -1
  238. uncountable/types/fields_t.py +5 -2
  239. uncountable/types/generic_upload.py +6 -1
  240. uncountable/types/generic_upload_t.py +88 -9
  241. uncountable/types/id_source.py +0 -1
  242. uncountable/types/id_source_t.py +26 -7
  243. uncountable/types/identifier.py +0 -1
  244. uncountable/types/identifier_t.py +13 -5
  245. uncountable/types/input_attributes.py +0 -1
  246. uncountable/types/input_attributes_t.py +4 -4
  247. uncountable/types/inputs.py +1 -1
  248. uncountable/types/inputs_t.py +24 -4
  249. uncountable/types/integration_server.py +8 -0
  250. uncountable/types/integration_server_t.py +46 -0
  251. uncountable/types/integration_session.py +10 -0
  252. uncountable/types/integration_session_t.py +60 -0
  253. uncountable/types/integrations.py +10 -0
  254. uncountable/types/integrations_t.py +62 -0
  255. uncountable/types/job_definition.py +4 -6
  256. uncountable/types/job_definition_t.py +96 -65
  257. uncountable/types/listing.py +9 -0
  258. uncountable/types/listing_t.py +51 -0
  259. uncountable/types/notices.py +8 -0
  260. uncountable/types/notices_t.py +37 -0
  261. uncountable/types/notifications.py +11 -0
  262. uncountable/types/notifications_t.py +74 -0
  263. uncountable/types/outputs.py +0 -1
  264. uncountable/types/outputs_t.py +6 -3
  265. uncountable/types/overrides.py +9 -0
  266. uncountable/types/overrides_t.py +49 -0
  267. uncountable/types/permissions.py +0 -1
  268. uncountable/types/permissions_t.py +1 -2
  269. uncountable/types/phases.py +0 -1
  270. uncountable/types/phases_t.py +5 -2
  271. uncountable/types/post_base.py +0 -1
  272. uncountable/types/post_base_t.py +1 -2
  273. uncountable/types/queued_job.py +17 -0
  274. uncountable/types/queued_job_t.py +140 -0
  275. uncountable/types/recipe_identifiers.py +0 -1
  276. uncountable/types/recipe_identifiers_t.py +21 -8
  277. uncountable/types/recipe_inputs.py +0 -1
  278. uncountable/types/recipe_inputs_t.py +1 -2
  279. uncountable/types/recipe_links.py +0 -1
  280. uncountable/types/recipe_links_t.py +7 -4
  281. uncountable/types/recipe_metadata.py +0 -1
  282. uncountable/types/recipe_metadata_t.py +14 -9
  283. uncountable/types/recipe_output_metadata.py +0 -1
  284. uncountable/types/recipe_output_metadata_t.py +5 -2
  285. uncountable/types/recipe_tags.py +0 -1
  286. uncountable/types/recipe_tags_t.py +5 -2
  287. uncountable/types/recipe_workflow_steps.py +0 -1
  288. uncountable/types/recipe_workflow_steps_t.py +14 -7
  289. uncountable/types/recipes.py +0 -1
  290. uncountable/types/recipes_t.py +6 -2
  291. uncountable/types/response.py +0 -1
  292. uncountable/types/response_t.py +3 -2
  293. uncountable/types/secret_retrieval.py +0 -1
  294. uncountable/types/secret_retrieval_t.py +13 -7
  295. uncountable/types/sockets.py +20 -0
  296. uncountable/types/sockets_t.py +169 -0
  297. uncountable/types/structured_filters.py +25 -0
  298. uncountable/types/structured_filters_t.py +248 -0
  299. uncountable/types/units.py +0 -1
  300. uncountable/types/units_t.py +5 -2
  301. uncountable/types/uploader.py +24 -0
  302. uncountable/types/uploader_t.py +222 -0
  303. uncountable/types/users.py +0 -1
  304. uncountable/types/users_t.py +5 -2
  305. uncountable/types/webhook_job.py +9 -0
  306. uncountable/types/webhook_job_t.py +48 -0
  307. uncountable/types/workflows.py +0 -1
  308. uncountable/types/workflows_t.py +10 -4
  309. uncountablepythonsdk-0.0.131.dist-info/METADATA +64 -0
  310. uncountablepythonsdk-0.0.131.dist-info/RECORD +363 -0
  311. {UncountablePythonSDK-0.0.52.dist-info → uncountablepythonsdk-0.0.131.dist-info}/WHEEL +1 -1
  312. UncountablePythonSDK-0.0.52.dist-info/METADATA +0 -56
  313. UncountablePythonSDK-0.0.52.dist-info/RECORD +0 -246
  314. docs/quickstart.md +0 -19
  315. uncountable/core/version.py +0 -11
  316. {UncountablePythonSDK-0.0.52.dist-info → uncountablepythonsdk-0.0.131.dist-info}/top_level.txt +0 -0
@@ -0,0 +1,34 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # ruff: noqa: E402 Q003
3
+ # fmt: off
4
+ # isort: skip_file
5
+ from __future__ import annotations
6
+ import typing # noqa: F401
7
+ import datetime # noqa: F401
8
+ from decimal import Decimal # noqa: F401
9
+ from enum import StrEnum
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from . import base_t
13
+
14
+ __all__: list[str] = [
15
+ "ExportType",
16
+ "ListingExportUserTimezone",
17
+ ]
18
+
19
+
20
+ # DO NOT MODIFY -- This file is generated by type_spec
21
+ @serial_class(
22
+ named_type_path="sdk.exports.ListingExportUserTimezone",
23
+ )
24
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
25
+ class ListingExportUserTimezone:
26
+ timezone_name: str
27
+
28
+
29
+ # DO NOT MODIFY -- This file is generated by type_spec
30
+ class ExportType(StrEnum):
31
+ EXCEL = "excel"
32
+ PDF = "pdf"
33
+ JSON = "json"
34
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # isort: skip_file
@@ -8,4 +7,23 @@ from .field_values_t import FieldRefNameValue as FieldRefNameValue
8
7
  from .field_values_t import FieldRefIdNameValue as FieldRefIdNameValue
9
8
  from .field_values_t import ArgumentValueRefName as ArgumentValueRefName
10
9
  from .field_values_t import ArgumentValueId as ArgumentValueId
10
+ from .field_values_t import FieldValueType as FieldValueType
11
+ from .field_values_t import FieldValueBase as FieldValueBase
12
+ from .field_values_t import FieldValueFiles as FieldValueFiles
13
+ from .field_values_t import ValueResolution as ValueResolution
14
+ from .field_values_t import FieldValueFieldOption as FieldValueFieldOption
15
+ from .field_values_t import FieldValueFieldOptions as FieldValueFieldOptions
16
+ from .field_values_t import FieldValueId as FieldValueId
17
+ from .field_values_t import FieldValueIds as FieldValueIds
18
+ from .field_values_t import FieldValueText as FieldValueText
19
+ from .field_values_t import FieldValueTexts as FieldValueTexts
20
+ from .field_values_t import FieldValueBoolean as FieldValueBoolean
21
+ from .field_values_t import FieldValueNumeric as FieldValueNumeric
22
+ from .field_values_t import FieldValueBatchReference as FieldValueBatchReference
23
+ from .field_values_t import FieldValueNull as FieldValueNull
24
+ from .field_values_t import FieldValueNotes as FieldValueNotes
25
+ from .field_values_t import FieldValueDate as FieldValueDate
26
+ from .field_values_t import FieldValueDatetime as FieldValueDatetime
27
+ from .field_values_t import FieldValue as FieldValue
28
+ from .field_values_t import FieldArgumentValue as FieldArgumentValue
11
29
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -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,59 +6,297 @@ from __future__ import annotations
7
6
  import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
9
+ from enum import StrEnum
10
10
  import dataclasses
11
11
  from pkgs.serialization import serial_class
12
+ from pkgs.serialization import serial_union_annotation
12
13
  from . import base_t
14
+ from . import entity_t
15
+ from . import identifier_t
13
16
 
14
17
  __all__: list[str] = [
15
18
  "ArgumentValueId",
16
19
  "ArgumentValueRefName",
20
+ "FieldArgumentValue",
17
21
  "FieldRefIdNameValue",
18
22
  "FieldRefNameValue",
23
+ "FieldValue",
24
+ "FieldValueBase",
25
+ "FieldValueBatchReference",
26
+ "FieldValueBoolean",
27
+ "FieldValueDate",
28
+ "FieldValueDatetime",
29
+ "FieldValueFieldOption",
30
+ "FieldValueFieldOptions",
31
+ "FieldValueFiles",
32
+ "FieldValueId",
33
+ "FieldValueIds",
34
+ "FieldValueNotes",
35
+ "FieldValueNull",
36
+ "FieldValueNumeric",
37
+ "FieldValueText",
38
+ "FieldValueTexts",
39
+ "FieldValueType",
40
+ "ValueResolution",
19
41
  ]
20
42
 
21
43
 
22
44
  # DO NOT MODIFY -- This file is generated by type_spec
23
45
  @serial_class(
46
+ named_type_path="sdk.field_values.FieldRefNameValue",
24
47
  unconverted_values={"value"},
25
48
  )
26
- @dataclasses.dataclass(kw_only=True)
49
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
27
50
  class FieldRefNameValue:
28
51
  field_ref_name: str
29
52
  value: base_t.JsonValue
30
- row_index: typing.Optional[typing.Optional[int]] = None
53
+ row_index: int | None = None
31
54
 
32
55
 
33
56
  # DO NOT MODIFY -- This file is generated by type_spec
34
57
  @serial_class(
58
+ named_type_path="sdk.field_values.FieldRefIdNameValue",
35
59
  unconverted_values={"value"},
36
60
  )
37
- @dataclasses.dataclass(kw_only=True)
61
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
38
62
  class FieldRefIdNameValue:
39
63
  field_id: base_t.ObjectId
40
64
  field_ref_name: str
41
65
  value: base_t.JsonValue
42
- row_index: typing.Optional[typing.Optional[int]] = None
66
+ row_index: int | None = None
43
67
 
44
68
 
45
69
  # DO NOT MODIFY -- This file is generated by type_spec
46
70
  @serial_class(
71
+ named_type_path="sdk.field_values.ArgumentValueRefName",
47
72
  unconverted_values={"value"},
48
73
  )
49
- @dataclasses.dataclass(kw_only=True)
74
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
50
75
  class ArgumentValueRefName:
51
76
  field_ref_name: str
52
77
  value: base_t.JsonValue
53
- row_index: typing.Optional[typing.Optional[int]] = None
78
+ row_index: int | None = None
54
79
 
55
80
 
56
81
  # DO NOT MODIFY -- This file is generated by type_spec
57
82
  @serial_class(
83
+ named_type_path="sdk.field_values.ArgumentValueId",
58
84
  unconverted_values={"value"},
59
85
  )
60
- @dataclasses.dataclass(kw_only=True)
86
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
61
87
  class ArgumentValueId:
62
88
  field_id: base_t.ObjectId
63
89
  value: base_t.JsonValue
64
- row_index: typing.Optional[typing.Optional[int]] = None
90
+ row_index: int | None = None
91
+
92
+
93
+ # DO NOT MODIFY -- This file is generated by type_spec
94
+ class FieldValueType(StrEnum):
95
+ FILES = "files"
96
+ TEXT = "text"
97
+ TEXTS = "texts"
98
+ ID = "id"
99
+ IDS = "ids"
100
+ BOOLEAN = "boolean"
101
+ NUMERIC = "numeric"
102
+ BATCH_REFERENCE = "batch_reference"
103
+ FIELD_OPTION = "field_option"
104
+ FIELD_OPTIONS = "field_options"
105
+ NULL_VALUE = "null_value"
106
+ NOTES = "notes"
107
+ DATE = "date"
108
+ DATETIME = "datetime"
109
+
110
+
111
+ # DO NOT MODIFY -- This file is generated by type_spec
112
+ @serial_class(
113
+ named_type_path="sdk.field_values.FieldValueBase",
114
+ )
115
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
116
+ class FieldValueBase:
117
+ type: FieldValueType
118
+
119
+
120
+ # DO NOT MODIFY -- This file is generated by type_spec
121
+ @serial_class(
122
+ named_type_path="sdk.field_values.FieldValueFiles",
123
+ parse_require={"type"},
124
+ )
125
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
126
+ class FieldValueFiles(FieldValueBase):
127
+ type: typing.Literal[FieldValueType.FILES] = FieldValueType.FILES
128
+ file_ids: list[base_t.ObjectId]
129
+
130
+
131
+ # DO NOT MODIFY -- This file is generated by type_spec
132
+ class ValueResolution(StrEnum):
133
+ DIRECT = "direct"
134
+ LABEL = "label"
135
+
136
+
137
+ # DO NOT MODIFY -- This file is generated by type_spec
138
+ @serial_class(
139
+ named_type_path="sdk.field_values.FieldValueFieldOption",
140
+ parse_require={"type"},
141
+ )
142
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
143
+ class FieldValueFieldOption(FieldValueBase):
144
+ type: typing.Literal[FieldValueType.FIELD_OPTION] = FieldValueType.FIELD_OPTION
145
+ value: str
146
+ value_resolution: ValueResolution = ValueResolution.DIRECT
147
+
148
+
149
+ # DO NOT MODIFY -- This file is generated by type_spec
150
+ @serial_class(
151
+ named_type_path="sdk.field_values.FieldValueFieldOptions",
152
+ parse_require={"type"},
153
+ )
154
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
155
+ class FieldValueFieldOptions(FieldValueBase):
156
+ type: typing.Literal[FieldValueType.FIELD_OPTIONS] = FieldValueType.FIELD_OPTIONS
157
+ value: list[str]
158
+ value_resolution: ValueResolution = ValueResolution.DIRECT
159
+
160
+
161
+ # DO NOT MODIFY -- This file is generated by type_spec
162
+ @serial_class(
163
+ named_type_path="sdk.field_values.FieldValueId",
164
+ parse_require={"type"},
165
+ )
166
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
167
+ class FieldValueId(FieldValueBase):
168
+ type: typing.Literal[FieldValueType.ID] = FieldValueType.ID
169
+ entity_type: entity_t.EntityType
170
+ identifier_key: identifier_t.IdentifierKey
171
+
172
+
173
+ # DO NOT MODIFY -- This file is generated by type_spec
174
+ @serial_class(
175
+ named_type_path="sdk.field_values.FieldValueIds",
176
+ parse_require={"type"},
177
+ )
178
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
179
+ class FieldValueIds(FieldValueBase):
180
+ type: typing.Literal[FieldValueType.IDS] = FieldValueType.IDS
181
+ entity_type: entity_t.EntityType
182
+ identifier_keys: list[identifier_t.IdentifierKey]
183
+
184
+
185
+ # DO NOT MODIFY -- This file is generated by type_spec
186
+ @serial_class(
187
+ named_type_path="sdk.field_values.FieldValueText",
188
+ parse_require={"type"},
189
+ )
190
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
191
+ class FieldValueText(FieldValueBase):
192
+ type: typing.Literal[FieldValueType.TEXT] = FieldValueType.TEXT
193
+ value: str
194
+
195
+
196
+ # DO NOT MODIFY -- This file is generated by type_spec
197
+ @serial_class(
198
+ named_type_path="sdk.field_values.FieldValueTexts",
199
+ parse_require={"type"},
200
+ )
201
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
202
+ class FieldValueTexts(FieldValueBase):
203
+ type: typing.Literal[FieldValueType.TEXTS] = FieldValueType.TEXTS
204
+ value: list[str]
205
+
206
+
207
+ # DO NOT MODIFY -- This file is generated by type_spec
208
+ @serial_class(
209
+ named_type_path="sdk.field_values.FieldValueBoolean",
210
+ parse_require={"type"},
211
+ )
212
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
213
+ class FieldValueBoolean(FieldValueBase):
214
+ type: typing.Literal[FieldValueType.BOOLEAN] = FieldValueType.BOOLEAN
215
+ value: bool
216
+
217
+
218
+ # DO NOT MODIFY -- This file is generated by type_spec
219
+ @serial_class(
220
+ named_type_path="sdk.field_values.FieldValueNumeric",
221
+ to_string_values={"value"},
222
+ parse_require={"type"},
223
+ )
224
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
225
+ class FieldValueNumeric(FieldValueBase):
226
+ type: typing.Literal[FieldValueType.NUMERIC] = FieldValueType.NUMERIC
227
+ value: Decimal
228
+
229
+
230
+ # DO NOT MODIFY -- This file is generated by type_spec
231
+ @serial_class(
232
+ named_type_path="sdk.field_values.FieldValueBatchReference",
233
+ parse_require={"type"},
234
+ )
235
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
236
+ class FieldValueBatchReference(FieldValueBase):
237
+ type: typing.Literal[FieldValueType.BATCH_REFERENCE] = FieldValueType.BATCH_REFERENCE
238
+ reference_key: identifier_t.IdentifierKeyBatchReference
239
+ data_key: str
240
+
241
+
242
+ # DO NOT MODIFY -- This file is generated by type_spec
243
+ @serial_class(
244
+ named_type_path="sdk.field_values.FieldValueNull",
245
+ parse_require={"type"},
246
+ )
247
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
248
+ class FieldValueNull(FieldValueBase):
249
+ type: typing.Literal[FieldValueType.NULL_VALUE] = FieldValueType.NULL_VALUE
250
+
251
+
252
+ # DO NOT MODIFY -- This file is generated by type_spec
253
+ @serial_class(
254
+ named_type_path="sdk.field_values.FieldValueNotes",
255
+ parse_require={"type"},
256
+ )
257
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
258
+ class FieldValueNotes(FieldValueBase):
259
+ type: typing.Literal[FieldValueType.NOTES] = FieldValueType.NOTES
260
+ value: str
261
+
262
+
263
+ # DO NOT MODIFY -- This file is generated by type_spec
264
+ @serial_class(
265
+ named_type_path="sdk.field_values.FieldValueDate",
266
+ parse_require={"type"},
267
+ )
268
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
269
+ class FieldValueDate(FieldValueBase):
270
+ type: typing.Literal[FieldValueType.DATE] = FieldValueType.DATE
271
+ value: datetime.date
272
+
273
+
274
+ # DO NOT MODIFY -- This file is generated by type_spec
275
+ @serial_class(
276
+ named_type_path="sdk.field_values.FieldValueDatetime",
277
+ parse_require={"type"},
278
+ )
279
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
280
+ class FieldValueDatetime(FieldValueBase):
281
+ type: typing.Literal[FieldValueType.DATETIME] = FieldValueType.DATETIME
282
+ value: datetime.datetime
283
+
284
+
285
+ # DO NOT MODIFY -- This file is generated by type_spec
286
+ FieldValue = typing.Annotated[
287
+ FieldValueFiles | FieldValueId | FieldValueIds | FieldValueText | FieldValueTexts | FieldValueBoolean | FieldValueNumeric | FieldValueBatchReference | FieldValueFieldOption | FieldValueFieldOptions | FieldValueNull | FieldValueNotes | FieldValueDate | FieldValueDatetime,
288
+ serial_union_annotation(
289
+ named_type_path="sdk.field_values.FieldValue",
290
+ ),
291
+ ]
292
+
293
+
294
+ # DO NOT MODIFY -- This file is generated by type_spec
295
+ @serial_class(
296
+ named_type_path="sdk.field_values.FieldArgumentValue",
297
+ )
298
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
299
+ class FieldArgumentValue:
300
+ field_key: identifier_t.IdentifierKey
301
+ value: FieldValue
65
302
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # isort: skip_file
@@ -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
@@ -8,6 +7,7 @@ import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
9
  import dataclasses
10
+ from pkgs.serialization import serial_class
11
11
  from . import base_t
12
12
 
13
13
  __all__: list[str] = [
@@ -16,7 +16,10 @@ __all__: list[str] = [
16
16
 
17
17
 
18
18
  # DO NOT MODIFY -- This file is generated by type_spec
19
- @dataclasses.dataclass(kw_only=True)
19
+ @serial_class(
20
+ named_type_path="sdk.fields.Field",
21
+ )
22
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
20
23
  class Field:
21
24
  id: base_t.ObjectId
22
25
  name: str
@@ -1,9 +1,14 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # isort: skip_file
5
4
  # DO NOT MODIFY -- This file is generated by type_spec
6
5
  # Kept only for SDK backwards compatibility
7
6
  from .generic_upload_t import GenericRemoteDirectoryScope as GenericRemoteDirectoryScope
7
+ from .generic_upload_t import UploadDestinationType as UploadDestinationType
8
+ from .generic_upload_t import UploadDestinationBase as UploadDestinationBase
9
+ from .generic_upload_t import UploadDestinationProject as UploadDestinationProject
10
+ from .generic_upload_t import UploadDestinationMaterialFamily as UploadDestinationMaterialFamily
11
+ from .generic_upload_t import UploadDestinationRecipe as UploadDestinationRecipe
12
+ from .generic_upload_t import UploadDestination as UploadDestination
8
13
  from .generic_upload_t import GenericUploadStrategy as GenericUploadStrategy
9
14
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -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,34 +6,114 @@ from __future__ import annotations
7
6
  import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
9
+ from enum import StrEnum
10
10
  import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from pkgs.serialization import serial_union_annotation
13
+ from . import base_t
11
14
  from . import identifier_t
12
15
 
13
16
  __all__: list[str] = [
14
17
  "GenericRemoteDirectoryScope",
15
18
  "GenericUploadStrategy",
19
+ "UploadDestination",
20
+ "UploadDestinationBase",
21
+ "UploadDestinationMaterialFamily",
22
+ "UploadDestinationProject",
23
+ "UploadDestinationRecipe",
24
+ "UploadDestinationType",
16
25
  ]
17
26
 
18
27
 
19
28
  # DO NOT MODIFY -- This file is generated by type_spec
20
- @dataclasses.dataclass(kw_only=True)
29
+ @serial_class(
30
+ named_type_path="sdk.generic_upload.GenericRemoteDirectoryScope",
31
+ )
32
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
21
33
  class GenericRemoteDirectoryScope:
22
34
  src_path: str
23
35
  success_archive_path: str
24
36
  failure_archive_path: str
25
37
  recursive: bool
26
38
  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
39
+ valid_file_extensions: list[str] | None = None
40
+ filename_regex: str | None = None
41
+ max_files: int | None = None
42
+ detection_keyword: str | None = None
43
+ delimiter: str | None = None
32
44
 
33
45
 
34
46
  # DO NOT MODIFY -- This file is generated by type_spec
35
- @dataclasses.dataclass(kw_only=True)
47
+ class UploadDestinationType(StrEnum):
48
+ PROJECT = "project"
49
+ MATERIAL_FAMILY = "material_family"
50
+ RECIPE = "recipe"
51
+
52
+
53
+ # DO NOT MODIFY -- This file is generated by type_spec
54
+ @serial_class(
55
+ named_type_path="sdk.generic_upload.UploadDestinationBase",
56
+ )
57
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
58
+ class UploadDestinationBase:
59
+ type: UploadDestinationType
60
+
61
+
62
+ # DO NOT MODIFY -- This file is generated by type_spec
63
+ @serial_class(
64
+ named_type_path="sdk.generic_upload.UploadDestinationProject",
65
+ parse_require={"type"},
66
+ )
67
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
68
+ class UploadDestinationProject(UploadDestinationBase):
69
+ type: typing.Literal[UploadDestinationType.PROJECT] = UploadDestinationType.PROJECT
70
+ project_key: identifier_t.IdentifierKey
71
+
72
+
73
+ # DO NOT MODIFY -- This file is generated by type_spec
74
+ @serial_class(
75
+ named_type_path="sdk.generic_upload.UploadDestinationMaterialFamily",
76
+ parse_require={"type"},
77
+ )
78
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
79
+ class UploadDestinationMaterialFamily(UploadDestinationBase):
80
+ type: typing.Literal[UploadDestinationType.MATERIAL_FAMILY] = UploadDestinationType.MATERIAL_FAMILY
81
+ material_family_key: identifier_t.IdentifierKey
82
+
83
+
84
+ # DO NOT MODIFY -- This file is generated by type_spec
85
+ @serial_class(
86
+ named_type_path="sdk.generic_upload.UploadDestinationRecipe",
87
+ parse_require={"type"},
88
+ )
89
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
90
+ class UploadDestinationRecipe(UploadDestinationBase):
91
+ type: typing.Literal[UploadDestinationType.RECIPE] = UploadDestinationType.RECIPE
92
+ recipe_key: identifier_t.IdentifierKey
93
+
94
+
95
+ # DO NOT MODIFY -- This file is generated by type_spec
96
+ UploadDestination = typing.Annotated[
97
+ UploadDestinationProject | UploadDestinationMaterialFamily | UploadDestinationRecipe,
98
+ serial_union_annotation(
99
+ named_type_path="sdk.generic_upload.UploadDestination",
100
+ discriminator="type",
101
+ discriminator_map={
102
+ "project": UploadDestinationProject,
103
+ "material_family": UploadDestinationMaterialFamily,
104
+ "recipe": UploadDestinationRecipe,
105
+ },
106
+ ),
107
+ ]
108
+
109
+
110
+ # DO NOT MODIFY -- This file is generated by type_spec
111
+ @serial_class(
112
+ named_type_path="sdk.generic_upload.GenericUploadStrategy",
113
+ )
114
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
36
115
  class GenericUploadStrategy:
37
116
  uploader_key: identifier_t.IdentifierKey
38
- material_family_keys: list[identifier_t.IdentifierKey]
117
+ destinations: list[UploadDestination]
39
118
  skip_moving_files: bool = False
40
119
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # isort: skip_file
@@ -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
@@ -8,6 +7,9 @@ import typing # noqa: F401
8
7
  import datetime # noqa: F401
9
8
  from decimal import Decimal # noqa: F401
10
9
  import dataclasses
10
+ from pkgs.serialization import serial_class
11
+ from pkgs.serialization import serial_alias_annotation
12
+ from . import base_t
11
13
  from . import entity_t
12
14
 
13
15
  __all__: list[str] = [
@@ -20,30 +22,47 @@ __all__: list[str] = [
20
22
 
21
23
 
22
24
  # DO NOT MODIFY -- This file is generated by type_spec
23
- @dataclasses.dataclass(kw_only=True)
25
+ @serial_class(
26
+ named_type_path="sdk.id_source.IdSourceSpecBase",
27
+ )
28
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
24
29
  class IdSourceSpecBase:
25
30
  pass
26
31
 
27
32
 
28
33
  # DO NOT MODIFY -- This file is generated by type_spec
29
- @dataclasses.dataclass(kw_only=True)
34
+ @serial_class(
35
+ named_type_path="sdk.id_source.IdSourceSpecEntity",
36
+ )
37
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
30
38
  class IdSourceSpecEntity(IdSourceSpecBase):
31
39
  entity_type: entity_t.EntityType
32
40
 
33
41
 
34
42
  # DO NOT MODIFY -- This file is generated by type_spec
35
- @dataclasses.dataclass(kw_only=True)
43
+ @serial_class(
44
+ named_type_path="sdk.id_source.IdSourceSpecCustomEntity",
45
+ )
46
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
36
47
  class IdSourceSpecCustomEntity(IdSourceSpecBase):
37
48
  definition_ref_name: str
38
49
 
39
50
 
40
51
  # DO NOT MODIFY -- This file is generated by type_spec
41
- @dataclasses.dataclass(kw_only=True)
52
+ @serial_class(
53
+ named_type_path="sdk.id_source.IdSourceSpecFieldOptions",
54
+ )
55
+ @dataclasses.dataclass(slots=base_t.ENABLE_SLOTS, kw_only=True) # type: ignore[literal-required]
42
56
  class IdSourceSpecFieldOptions(IdSourceSpecBase):
43
57
  set_ref_name: str
44
- subset_ref_name: typing.Optional[str] = None
58
+ subset_ref_name: str | None = None
45
59
 
46
60
 
47
61
  # DO NOT MODIFY -- This file is generated by type_spec
48
- IdSourceSpec = typing.Union[IdSourceSpecEntity, IdSourceSpecCustomEntity, IdSourceSpecFieldOptions]
62
+ IdSourceSpec = typing.Annotated[
63
+ IdSourceSpecEntity | IdSourceSpecCustomEntity | IdSourceSpecFieldOptions,
64
+ serial_alias_annotation(
65
+ named_type_path="sdk.id_source.IdSourceSpec",
66
+ ),
67
+ ]
49
68
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,4 +1,3 @@
1
- # flake8: noqa: F821
2
1
  # ruff: noqa: E402 Q003
3
2
  # fmt: off
4
3
  # isort: skip_file