UncountablePythonSDK 0.0.8__py3-none-any.whl → 0.0.92__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 (312) hide show
  1. UncountablePythonSDK-0.0.92.dist-info/METADATA +61 -0
  2. UncountablePythonSDK-0.0.92.dist-info/RECORD +301 -0
  3. {UncountablePythonSDK-0.0.8.dist-info → UncountablePythonSDK-0.0.92.dist-info}/WHEEL +1 -1
  4. {UncountablePythonSDK-0.0.8.dist-info → UncountablePythonSDK-0.0.92.dist-info}/top_level.txt +1 -1
  5. docs/.gitignore +1 -0
  6. docs/conf.py +57 -0
  7. docs/index.md +13 -0
  8. docs/justfile +12 -0
  9. docs/quickstart.md +19 -0
  10. docs/requirements.txt +7 -0
  11. docs/static/favicons/android-chrome-192x192.png +0 -0
  12. docs/static/favicons/android-chrome-512x512.png +0 -0
  13. docs/static/favicons/apple-touch-icon.png +0 -0
  14. docs/static/favicons/browserconfig.xml +9 -0
  15. docs/static/favicons/favicon-16x16.png +0 -0
  16. docs/static/favicons/favicon-32x32.png +0 -0
  17. docs/static/favicons/manifest.json +18 -0
  18. docs/static/favicons/mstile-150x150.png +0 -0
  19. docs/static/favicons/safari-pinned-tab.svg +32 -0
  20. docs/static/logo_blue.png +0 -0
  21. examples/async_batch.py +35 -0
  22. examples/create_entity.py +22 -17
  23. examples/download_files.py +26 -0
  24. examples/edit_recipe_inputs.py +50 -0
  25. examples/integration-server/jobs/materials_auto/example_cron.py +18 -0
  26. examples/integration-server/jobs/materials_auto/example_wh.py +15 -0
  27. examples/integration-server/jobs/materials_auto/profile.yaml +43 -0
  28. examples/integration-server/pyproject.toml +224 -0
  29. examples/invoke_uploader.py +26 -0
  30. examples/set_recipe_metadata_file.py +40 -0
  31. examples/set_recipe_output_file_sdk.py +26 -0
  32. examples/upload_files.py +18 -0
  33. pkgs/argument_parser/__init__.py +5 -0
  34. pkgs/argument_parser/_is_enum.py +1 -6
  35. pkgs/argument_parser/argument_parser.py +232 -76
  36. pkgs/argument_parser/case_convert.py +4 -3
  37. pkgs/filesystem_utils/__init__.py +20 -0
  38. pkgs/filesystem_utils/_blob_session.py +137 -0
  39. pkgs/filesystem_utils/_gdrive_session.py +309 -0
  40. pkgs/filesystem_utils/_local_session.py +69 -0
  41. pkgs/filesystem_utils/_s3_session.py +117 -0
  42. pkgs/filesystem_utils/_sftp_session.py +147 -0
  43. pkgs/filesystem_utils/file_type_utils.py +91 -0
  44. pkgs/filesystem_utils/filesystem_session.py +39 -0
  45. pkgs/py.typed +0 -0
  46. pkgs/serialization/__init__.py +8 -1
  47. pkgs/serialization/annotation.py +64 -0
  48. pkgs/serialization/missing_sentry.py +1 -1
  49. pkgs/serialization/opaque_key.py +1 -1
  50. pkgs/serialization/serial_alias.py +47 -0
  51. pkgs/serialization/serial_class.py +65 -50
  52. pkgs/serialization/serial_generic.py +16 -0
  53. pkgs/serialization/serial_union.py +84 -0
  54. pkgs/serialization/yaml.py +57 -0
  55. pkgs/serialization_util/__init__.py +7 -7
  56. pkgs/serialization_util/_get_type_for_serialization.py +1 -3
  57. pkgs/serialization_util/convert_to_snakecase.py +27 -0
  58. pkgs/serialization_util/dataclasses.py +14 -0
  59. pkgs/serialization_util/serialization_helpers.py +116 -74
  60. pkgs/strenum_compat/strenum_compat.py +1 -9
  61. pkgs/type_spec/actions_registry/__init__.py +0 -0
  62. pkgs/type_spec/actions_registry/__main__.py +126 -0
  63. pkgs/type_spec/actions_registry/emit_typescript.py +182 -0
  64. pkgs/type_spec/builder.py +475 -89
  65. pkgs/type_spec/config.py +24 -19
  66. pkgs/type_spec/emit_io_ts.py +5 -2
  67. pkgs/type_spec/emit_open_api.py +266 -32
  68. pkgs/type_spec/emit_open_api_util.py +32 -13
  69. pkgs/type_spec/emit_python.py +599 -151
  70. pkgs/type_spec/emit_typescript.py +74 -273
  71. pkgs/type_spec/emit_typescript_util.py +239 -5
  72. pkgs/type_spec/load_types.py +55 -10
  73. pkgs/type_spec/open_api_util.py +30 -41
  74. pkgs/type_spec/parts/base.py.prepart +4 -3
  75. pkgs/type_spec/type_info/emit_type_info.py +178 -16
  76. pkgs/type_spec/util.py +11 -11
  77. pkgs/type_spec/value_spec/__main__.py +3 -3
  78. pkgs/type_spec/value_spec/convert_type.py +8 -1
  79. pkgs/type_spec/value_spec/emit_python.py +13 -4
  80. uncountable/__init__.py +1 -2
  81. uncountable/core/__init__.py +12 -2
  82. uncountable/core/async_batch.py +37 -0
  83. uncountable/core/client.py +293 -43
  84. uncountable/core/environment.py +41 -0
  85. uncountable/core/file_upload.py +135 -0
  86. uncountable/core/types.py +17 -0
  87. uncountable/integration/__init__.py +0 -0
  88. uncountable/integration/cli.py +49 -0
  89. uncountable/integration/construct_client.py +51 -0
  90. uncountable/integration/cron.py +29 -0
  91. uncountable/integration/db/__init__.py +0 -0
  92. uncountable/integration/db/connect.py +18 -0
  93. uncountable/integration/db/session.py +25 -0
  94. uncountable/integration/entrypoint.py +13 -0
  95. uncountable/integration/executors/__init__.py +0 -0
  96. uncountable/integration/executors/executors.py +148 -0
  97. uncountable/integration/executors/generic_upload_executor.py +284 -0
  98. uncountable/integration/executors/script_executor.py +25 -0
  99. uncountable/integration/job.py +87 -0
  100. uncountable/integration/queue_runner/__init__.py +0 -0
  101. uncountable/integration/queue_runner/command_server/__init__.py +24 -0
  102. uncountable/integration/queue_runner/command_server/command_client.py +68 -0
  103. uncountable/integration/queue_runner/command_server/command_server.py +64 -0
  104. uncountable/integration/queue_runner/command_server/protocol/__init__.py +0 -0
  105. uncountable/integration/queue_runner/command_server/protocol/command_server.proto +22 -0
  106. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.py +40 -0
  107. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2.pyi +38 -0
  108. uncountable/integration/queue_runner/command_server/protocol/command_server_pb2_grpc.py +129 -0
  109. uncountable/integration/queue_runner/command_server/types.py +52 -0
  110. uncountable/integration/queue_runner/datastore/__init__.py +3 -0
  111. uncountable/integration/queue_runner/datastore/datastore_sqlite.py +93 -0
  112. uncountable/integration/queue_runner/datastore/interface.py +19 -0
  113. uncountable/integration/queue_runner/datastore/model.py +17 -0
  114. uncountable/integration/queue_runner/job_scheduler.py +163 -0
  115. uncountable/integration/queue_runner/queue_runner.py +26 -0
  116. uncountable/integration/queue_runner/types.py +7 -0
  117. uncountable/integration/queue_runner/worker.py +119 -0
  118. uncountable/integration/scan_profiles.py +67 -0
  119. uncountable/integration/scheduler.py +150 -0
  120. uncountable/integration/secret_retrieval/__init__.py +3 -0
  121. uncountable/integration/secret_retrieval/retrieve_secret.py +93 -0
  122. uncountable/integration/server.py +117 -0
  123. uncountable/integration/telemetry.py +209 -0
  124. uncountable/integration/webhook_server/entrypoint.py +170 -0
  125. uncountable/types/__init__.py +136 -20
  126. uncountable/types/api/batch/execute_batch.py +15 -7
  127. uncountable/types/api/batch/execute_batch_load_async.py +42 -0
  128. uncountable/types/api/chemical/__init__.py +1 -0
  129. uncountable/types/api/chemical/convert_chemical_formats.py +63 -0
  130. uncountable/types/api/entity/create_entities.py +23 -11
  131. uncountable/types/api/entity/create_entity.py +21 -12
  132. uncountable/types/api/entity/get_entities_data.py +18 -8
  133. uncountable/types/api/entity/grant_entity_permissions.py +48 -0
  134. uncountable/types/api/entity/list_entities.py +27 -12
  135. uncountable/types/api/entity/lock_entity.py +45 -0
  136. uncountable/types/api/entity/resolve_entity_ids.py +17 -7
  137. uncountable/types/api/entity/set_entity_field_values.py +44 -0
  138. uncountable/types/api/entity/set_values.py +14 -7
  139. uncountable/types/api/entity/transition_entity_phase.py +80 -0
  140. uncountable/types/api/entity/unlock_entity.py +44 -0
  141. uncountable/types/api/equipment/__init__.py +1 -0
  142. uncountable/types/api/equipment/associate_equipment_input.py +44 -0
  143. uncountable/types/api/field_options/__init__.py +1 -0
  144. uncountable/types/api/field_options/upsert_field_options.py +55 -0
  145. uncountable/types/api/files/__init__.py +1 -0
  146. uncountable/types/api/files/download_file.py +77 -0
  147. uncountable/types/api/id_source/__init__.py +1 -0
  148. uncountable/types/api/id_source/list_id_source.py +56 -0
  149. uncountable/types/api/id_source/match_id_source.py +54 -0
  150. uncountable/types/api/input_groups/get_input_group_names.py +16 -6
  151. uncountable/types/api/inputs/create_inputs.py +24 -11
  152. uncountable/types/api/inputs/get_input_data.py +32 -13
  153. uncountable/types/api/inputs/get_input_names.py +18 -8
  154. uncountable/types/api/inputs/get_inputs_data.py +29 -10
  155. uncountable/types/api/inputs/set_input_attribute_values.py +16 -9
  156. uncountable/types/api/inputs/set_input_category.py +44 -0
  157. uncountable/types/api/inputs/set_input_subcategories.py +45 -0
  158. uncountable/types/api/inputs/set_intermediate_type.py +50 -0
  159. uncountable/types/api/material_families/__init__.py +1 -0
  160. uncountable/types/api/material_families/update_entity_material_families.py +48 -0
  161. uncountable/types/api/outputs/get_output_data.py +32 -16
  162. uncountable/types/api/outputs/get_output_names.py +18 -8
  163. uncountable/types/api/outputs/resolve_output_conditions.py +23 -10
  164. uncountable/types/api/permissions/__init__.py +1 -0
  165. uncountable/types/api/permissions/set_core_permissions.py +105 -0
  166. uncountable/types/api/project/get_projects.py +17 -7
  167. uncountable/types/api/project/get_projects_data.py +21 -11
  168. uncountable/types/api/recipe_links/__init__.py +1 -0
  169. uncountable/types/api/recipe_links/create_recipe_link.py +46 -0
  170. uncountable/types/api/recipe_links/remove_recipe_link.py +45 -0
  171. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +18 -8
  172. uncountable/types/api/recipes/add_recipe_to_project.py +42 -0
  173. uncountable/types/api/recipes/archive_recipes.py +42 -0
  174. uncountable/types/api/recipes/associate_recipe_as_input.py +44 -0
  175. uncountable/types/api/recipes/associate_recipe_as_lot.py +43 -0
  176. uncountable/types/api/recipes/clear_recipe_outputs.py +42 -0
  177. uncountable/types/api/recipes/create_recipe.py +51 -0
  178. uncountable/types/api/recipes/create_recipes.py +25 -12
  179. uncountable/types/api/recipes/disassociate_recipe_as_input.py +42 -0
  180. uncountable/types/api/recipes/edit_recipe_inputs.py +283 -0
  181. uncountable/types/api/recipes/get_column_calculation_values.py +58 -0
  182. uncountable/types/api/recipes/get_curve.py +15 -7
  183. uncountable/types/api/recipes/get_recipe_calculations.py +17 -10
  184. uncountable/types/api/recipes/get_recipe_links.py +13 -6
  185. uncountable/types/api/recipes/get_recipe_names.py +16 -6
  186. uncountable/types/api/recipes/get_recipe_output_metadata.py +14 -7
  187. uncountable/types/api/recipes/get_recipes_data.py +63 -38
  188. uncountable/types/api/recipes/lock_recipes.py +63 -0
  189. uncountable/types/api/recipes/remove_recipe_from_project.py +42 -0
  190. uncountable/types/api/recipes/set_recipe_inputs.py +19 -10
  191. uncountable/types/api/recipes/set_recipe_metadata.py +43 -0
  192. uncountable/types/api/recipes/set_recipe_output_annotations.py +115 -0
  193. uncountable/types/api/recipes/set_recipe_output_file.py +56 -0
  194. uncountable/types/api/recipes/set_recipe_outputs.py +26 -12
  195. uncountable/types/api/recipes/set_recipe_tags.py +109 -0
  196. uncountable/types/api/recipes/unarchive_recipes.py +41 -0
  197. uncountable/types/api/recipes/unlock_recipes.py +50 -0
  198. uncountable/types/api/triggers/__init__.py +1 -0
  199. uncountable/types/api/triggers/run_trigger.py +43 -0
  200. uncountable/types/api/uploader/__init__.py +1 -0
  201. uncountable/types/api/uploader/invoke_uploader.py +47 -0
  202. uncountable/types/async_batch.py +13 -0
  203. uncountable/types/async_batch_processor.py +384 -0
  204. uncountable/types/async_batch_t.py +97 -0
  205. uncountable/types/async_jobs.py +9 -0
  206. uncountable/types/async_jobs_t.py +53 -0
  207. uncountable/types/auth_retrieval.py +12 -0
  208. uncountable/types/auth_retrieval_t.py +75 -0
  209. uncountable/types/base.py +5 -78
  210. uncountable/types/base_t.py +85 -0
  211. uncountable/types/calculations.py +3 -18
  212. uncountable/types/calculations_t.py +27 -0
  213. uncountable/types/chemical_structure.py +8 -0
  214. uncountable/types/chemical_structure_t.py +28 -0
  215. uncountable/types/client_base.py +1093 -54
  216. uncountable/types/client_config.py +8 -0
  217. uncountable/types/client_config_t.py +26 -0
  218. uncountable/types/curves.py +5 -42
  219. uncountable/types/curves_t.py +51 -0
  220. uncountable/types/entity.py +8 -269
  221. uncountable/types/entity_t.py +393 -0
  222. uncountable/types/experiment_groups.py +3 -18
  223. uncountable/types/experiment_groups_t.py +27 -0
  224. uncountable/types/field_values.py +17 -60
  225. uncountable/types/field_values_t.py +204 -0
  226. uncountable/types/fields.py +3 -19
  227. uncountable/types/fields_t.py +28 -0
  228. uncountable/types/generic_upload.py +15 -0
  229. uncountable/types/generic_upload_t.py +119 -0
  230. uncountable/types/id_source.py +12 -0
  231. uncountable/types/id_source_t.py +68 -0
  232. uncountable/types/identifier.py +11 -0
  233. uncountable/types/identifier_t.py +63 -0
  234. uncountable/types/input_attributes.py +3 -24
  235. uncountable/types/input_attributes_t.py +30 -0
  236. uncountable/types/inputs.py +6 -56
  237. uncountable/types/inputs_t.py +83 -0
  238. uncountable/types/integration_server.py +9 -0
  239. uncountable/types/integration_server_t.py +42 -0
  240. uncountable/types/job_definition.py +27 -0
  241. uncountable/types/job_definition_t.py +260 -0
  242. uncountable/types/outputs.py +3 -21
  243. uncountable/types/outputs_t.py +30 -0
  244. uncountable/types/overrides.py +10 -0
  245. uncountable/types/overrides_t.py +49 -0
  246. uncountable/types/permissions.py +8 -0
  247. uncountable/types/permissions_t.py +46 -0
  248. uncountable/types/phases.py +3 -18
  249. uncountable/types/phases_t.py +27 -0
  250. uncountable/types/post_base.py +8 -0
  251. uncountable/types/post_base_t.py +30 -0
  252. uncountable/types/queued_job.py +16 -0
  253. uncountable/types/queued_job_t.py +123 -0
  254. uncountable/types/recipe_identifiers.py +12 -0
  255. uncountable/types/recipe_identifiers_t.py +76 -0
  256. uncountable/types/recipe_inputs.py +9 -0
  257. uncountable/types/recipe_inputs_t.py +30 -0
  258. uncountable/types/recipe_links.py +4 -45
  259. uncountable/types/recipe_links_t.py +54 -0
  260. uncountable/types/recipe_metadata.py +5 -45
  261. uncountable/types/recipe_metadata_t.py +58 -0
  262. uncountable/types/recipe_output_metadata.py +3 -19
  263. uncountable/types/recipe_output_metadata_t.py +28 -0
  264. uncountable/types/recipe_tags.py +3 -18
  265. uncountable/types/recipe_tags_t.py +27 -0
  266. uncountable/types/recipe_workflow_steps.py +14 -0
  267. uncountable/types/recipe_workflow_steps_t.py +95 -0
  268. uncountable/types/recipes.py +8 -0
  269. uncountable/types/recipes_t.py +25 -0
  270. uncountable/types/response.py +3 -20
  271. uncountable/types/response_t.py +26 -0
  272. uncountable/types/secret_retrieval.py +12 -0
  273. uncountable/types/secret_retrieval_t.py +75 -0
  274. uncountable/types/units.py +3 -18
  275. uncountable/types/units_t.py +27 -0
  276. uncountable/types/users.py +3 -19
  277. uncountable/types/users_t.py +28 -0
  278. uncountable/types/webhook_job.py +9 -0
  279. uncountable/types/webhook_job_t.py +37 -0
  280. uncountable/types/workflows.py +4 -27
  281. uncountable/types/workflows_t.py +39 -0
  282. UncountablePythonSDK-0.0.8.dist-info/METADATA +0 -27
  283. UncountablePythonSDK-0.0.8.dist-info/RECORD +0 -134
  284. examples/recipe-import/importer.py +0 -39
  285. type_spec/external/api/batch/execute_batch.yaml +0 -56
  286. type_spec/external/api/entity/create_entities.yaml +0 -33
  287. type_spec/external/api/entity/create_entity.yaml +0 -39
  288. type_spec/external/api/entity/get_entities_data.yaml +0 -29
  289. type_spec/external/api/entity/list_entities.yaml +0 -52
  290. type_spec/external/api/entity/resolve_entity_ids.yaml +0 -29
  291. type_spec/external/api/entity/set_values.yaml +0 -18
  292. type_spec/external/api/input_groups/get_input_group_names.yaml +0 -29
  293. type_spec/external/api/inputs/create_inputs.yaml +0 -48
  294. type_spec/external/api/inputs/get_input_data.yaml +0 -95
  295. type_spec/external/api/inputs/get_input_names.yaml +0 -38
  296. type_spec/external/api/inputs/get_inputs_data.yaml +0 -82
  297. type_spec/external/api/inputs/set_input_attribute_values.yaml +0 -33
  298. type_spec/external/api/outputs/get_output_data.yaml +0 -92
  299. type_spec/external/api/outputs/get_output_names.yaml +0 -35
  300. type_spec/external/api/outputs/resolve_output_conditions.yaml +0 -50
  301. type_spec/external/api/project/get_projects.yaml +0 -42
  302. type_spec/external/api/project/get_projects_data.yaml +0 -50
  303. type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +0 -41
  304. type_spec/external/api/recipes/create_recipes.yaml +0 -47
  305. type_spec/external/api/recipes/get_curve.yaml +0 -18
  306. type_spec/external/api/recipes/get_recipe_calculations.yaml +0 -39
  307. type_spec/external/api/recipes/get_recipe_links.yaml +0 -26
  308. type_spec/external/api/recipes/get_recipe_names.yaml +0 -29
  309. type_spec/external/api/recipes/get_recipe_output_metadata.yaml +0 -36
  310. type_spec/external/api/recipes/get_recipes_data.yaml +0 -238
  311. type_spec/external/api/recipes/set_recipe_inputs.yaml +0 -36
  312. type_spec/external/api/recipes/set_recipe_outputs.yaml +0 -52
@@ -1,16 +1,16 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
2
  # flake8: noqa: F821
3
- # ruff: noqa: E402
3
+ # ruff: noqa: E402 Q003
4
4
  # fmt: off
5
5
  # isort: skip_file
6
6
  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
- from ... import base as base_t
13
- from ... import units as units_t
12
+ from ... import base_t
13
+ from ... import units_t
14
14
 
15
15
  __all__: list[str] = [
16
16
  "Arguments",
@@ -28,28 +28,35 @@ ENDPOINT_PATH = "api/external/outputs/external_get_output_data"
28
28
 
29
29
 
30
30
  # DO NOT MODIFY -- This file is generated by type_spec
31
- @dataclass(kw_only=True)
31
+ @serial_class(
32
+ named_type_path="sdk.api.outputs.get_output_data.Arguments",
33
+ )
34
+ @dataclasses.dataclass(kw_only=True)
32
35
  class Arguments:
33
36
  material_family_id: base_t.ObjectId
34
- output_ids: typing.Optional[list[base_t.ObjectId]] = None
35
- offset: typing.Optional[int] = None
36
- limit: typing.Optional[int] = None
37
+ output_ids: list[base_t.ObjectId] | None = None
38
+ offset: int | None = None
39
+ limit: int | None = None
37
40
 
38
41
 
39
42
  # DO NOT MODIFY -- This file is generated by type_spec
40
43
  @serial_class(
44
+ named_type_path="sdk.api.outputs.get_output_data.OutputAttrVal",
41
45
  unconverted_values={"quantity_json"},
42
46
  to_string_values={"quantity_dec"},
43
47
  )
44
- @dataclass(kw_only=True)
48
+ @dataclasses.dataclass(kw_only=True)
45
49
  class OutputAttrVal:
46
50
  attribute_id: base_t.ObjectId
47
- quantity_dec: Decimal
48
51
  quantity_json: base_t.JsonValue
52
+ quantity_dec: Decimal | None = None
49
53
 
50
54
 
51
55
  # DO NOT MODIFY -- This file is generated by type_spec
52
- @dataclass(kw_only=True)
56
+ @serial_class(
57
+ named_type_path="sdk.api.outputs.get_output_data.SimpleOutputAttr",
58
+ )
59
+ @dataclasses.dataclass(kw_only=True)
53
60
  class SimpleOutputAttr:
54
61
  attribute_id: base_t.ObjectId
55
62
  name: str
@@ -57,25 +64,34 @@ class SimpleOutputAttr:
57
64
 
58
65
 
59
66
  # DO NOT MODIFY -- This file is generated by type_spec
60
- @dataclass(kw_only=True)
67
+ @serial_class(
68
+ named_type_path="sdk.api.outputs.get_output_data.SimpleOutputGlobalCategory",
69
+ )
70
+ @dataclasses.dataclass(kw_only=True)
61
71
  class SimpleOutputGlobalCategory:
62
72
  category_id: base_t.ObjectId
63
73
  name: str
64
74
 
65
75
 
66
76
  # DO NOT MODIFY -- This file is generated by type_spec
67
- @dataclass(kw_only=True)
77
+ @serial_class(
78
+ named_type_path="sdk.api.outputs.get_output_data.FullOutput",
79
+ )
80
+ @dataclasses.dataclass(kw_only=True)
68
81
  class FullOutput:
69
82
  output_id: base_t.ObjectId
70
83
  name: str
71
84
  quantity_type: str
72
85
  attributes: list[OutputAttrVal]
73
- global_category_id: base_t.ObjectId
74
- unit_id: base_t.ObjectId
86
+ global_category_id: typing.Optional[base_t.ObjectId]
87
+ unit_id: typing.Optional[base_t.ObjectId]
75
88
 
76
89
 
77
90
  # DO NOT MODIFY -- This file is generated by type_spec
78
- @dataclass(kw_only=True)
91
+ @serial_class(
92
+ named_type_path="sdk.api.outputs.get_output_data.Data",
93
+ )
94
+ @dataclasses.dataclass(kw_only=True)
79
95
  class Data:
80
96
  outputs: list[FullOutput]
81
97
  attrs: list[SimpleOutputAttr]
@@ -1,14 +1,15 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
2
  # flake8: noqa: F821
3
- # ruff: noqa: E402
3
+ # ruff: noqa: E402 Q003
4
4
  # fmt: off
5
5
  # isort: skip_file
6
6
  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
11
- from ... import base as base_t
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from ... import base_t
12
13
 
13
14
  __all__: list[str] = [
14
15
  "Arguments",
@@ -23,22 +24,31 @@ ENDPOINT_PATH = "api/external/outputs/external_get_output_names"
23
24
 
24
25
 
25
26
  # DO NOT MODIFY -- This file is generated by type_spec
26
- @dataclass(kw_only=True)
27
+ @serial_class(
28
+ named_type_path="sdk.api.outputs.get_output_names.Arguments",
29
+ )
30
+ @dataclasses.dataclass(kw_only=True)
27
31
  class Arguments:
28
32
  material_family_id: base_t.ObjectId
29
- offset: typing.Optional[int] = None
30
- limit: typing.Optional[int] = None
33
+ offset: int | None = None
34
+ limit: int | None = None
31
35
 
32
36
 
33
37
  # DO NOT MODIFY -- This file is generated by type_spec
34
- @dataclass(kw_only=True)
38
+ @serial_class(
39
+ named_type_path="sdk.api.outputs.get_output_names.OutputWithName",
40
+ )
41
+ @dataclasses.dataclass(kw_only=True)
35
42
  class OutputWithName:
36
43
  output_id: base_t.ObjectId
37
44
  name: str
38
45
 
39
46
 
40
47
  # DO NOT MODIFY -- This file is generated by type_spec
41
- @dataclass(kw_only=True)
48
+ @serial_class(
49
+ named_type_path="sdk.api.outputs.get_output_names.Data",
50
+ )
51
+ @dataclasses.dataclass(kw_only=True)
42
52
  class Data:
43
53
  outputs: list[OutputWithName]
44
54
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,15 +1,15 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
2
  # flake8: noqa: F821
3
- # ruff: noqa: E402
3
+ # ruff: noqa: E402 Q003
4
4
  # fmt: off
5
5
  # isort: skip_file
6
6
  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
- from ... import base as base_t
12
+ from ... import base_t
13
13
 
14
14
  __all__: list[str] = [
15
15
  "Arguments",
@@ -28,36 +28,49 @@ ENDPOINT_PATH = "api/external/outputs/external_resolve_output_conditions"
28
28
 
29
29
  # DO NOT MODIFY -- This file is generated by type_spec
30
30
  @serial_class(
31
+ named_type_path="sdk.api.outputs.resolve_output_conditions.ConditionParameterValueRecord",
31
32
  to_string_values={"value_numeric"},
32
33
  )
33
- @dataclass(kw_only=True)
34
+ @dataclasses.dataclass(kw_only=True)
34
35
  class ConditionParameterValueRecord:
35
36
  condition_parameter_id: base_t.ObjectId
36
- value_numeric: typing.Optional[Decimal] = None
37
- value_string: typing.Optional[str] = None
37
+ value_numeric: Decimal | None = None
38
+ value_string: str | None = None
38
39
 
39
40
 
40
41
  # DO NOT MODIFY -- This file is generated by type_spec
41
- @dataclass(kw_only=True)
42
+ @serial_class(
43
+ named_type_path="sdk.api.outputs.resolve_output_conditions.ConditionRequest",
44
+ )
45
+ @dataclasses.dataclass(kw_only=True)
42
46
  class ConditionRequest:
43
47
  conditions: list[ConditionParameterValueRecord]
44
48
 
45
49
 
46
50
  # DO NOT MODIFY -- This file is generated by type_spec
47
- @dataclass(kw_only=True)
51
+ @serial_class(
52
+ named_type_path="sdk.api.outputs.resolve_output_conditions.Arguments",
53
+ )
54
+ @dataclasses.dataclass(kw_only=True)
48
55
  class Arguments:
49
56
  requested_conditions: list[ConditionRequest]
50
57
 
51
58
 
52
59
  # DO NOT MODIFY -- This file is generated by type_spec
53
- @dataclass(kw_only=True)
60
+ @serial_class(
61
+ named_type_path="sdk.api.outputs.resolve_output_conditions.ConditionResponse",
62
+ )
63
+ @dataclasses.dataclass(kw_only=True)
54
64
  class ConditionResponse:
55
65
  conditions: list[ConditionParameterValueRecord]
56
66
  output_condition_id: base_t.ObjectId
57
67
 
58
68
 
59
69
  # DO NOT MODIFY -- This file is generated by type_spec
60
- @dataclass(kw_only=True)
70
+ @serial_class(
71
+ named_type_path="sdk.api.outputs.resolve_output_conditions.Data",
72
+ )
73
+ @dataclasses.dataclass(kw_only=True)
61
74
  class Data:
62
75
  resolved_conditions: list[ConditionResponse]
63
76
 
@@ -0,0 +1 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,105 @@
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 pkgs.serialization import serial_class
12
+ from pkgs.serialization import serial_alias_annotation
13
+ from ... import identifier_t
14
+ from ... import permissions_t
15
+ from ... import post_base_t
16
+
17
+ __all__: list[str] = [
18
+ "Arguments",
19
+ "Data",
20
+ "ENDPOINT_METHOD",
21
+ "ENDPOINT_PATH",
22
+ "PermissionsScope",
23
+ "PermissionsScopeAllMaterialFamilies",
24
+ "PermissionsScopeMaterialFamily",
25
+ "PermissionsScopeProject",
26
+ "PermissionsScopeRecipe",
27
+ ]
28
+
29
+ ENDPOINT_METHOD = "POST"
30
+ ENDPOINT_PATH = "api/external/permissions/external_set_core_permissions"
31
+
32
+
33
+ # DO NOT MODIFY -- This file is generated by type_spec
34
+ @serial_class(
35
+ named_type_path="sdk.api.permissions.set_core_permissions.PermissionsScopeProject",
36
+ parse_require={"type"},
37
+ )
38
+ @dataclasses.dataclass(kw_only=True)
39
+ class PermissionsScopeProject:
40
+ type: typing.Literal["project"] = "project"
41
+ project_key: identifier_t.IdentifierKey
42
+
43
+
44
+ # DO NOT MODIFY -- This file is generated by type_spec
45
+ @serial_class(
46
+ named_type_path="sdk.api.permissions.set_core_permissions.PermissionsScopeRecipe",
47
+ parse_require={"type"},
48
+ )
49
+ @dataclasses.dataclass(kw_only=True)
50
+ class PermissionsScopeRecipe:
51
+ type: typing.Literal["recipe"] = "recipe"
52
+ recipe_key: identifier_t.IdentifierKey
53
+
54
+
55
+ # DO NOT MODIFY -- This file is generated by type_spec
56
+ @serial_class(
57
+ named_type_path="sdk.api.permissions.set_core_permissions.PermissionsScopeMaterialFamily",
58
+ parse_require={"type"},
59
+ )
60
+ @dataclasses.dataclass(kw_only=True)
61
+ class PermissionsScopeMaterialFamily:
62
+ type: typing.Literal["material_family"] = "material_family"
63
+ material_family_key: identifier_t.IdentifierKey
64
+
65
+
66
+ # DO NOT MODIFY -- This file is generated by type_spec
67
+ @serial_class(
68
+ named_type_path="sdk.api.permissions.set_core_permissions.PermissionsScopeAllMaterialFamilies",
69
+ parse_require={"type"},
70
+ )
71
+ @dataclasses.dataclass(kw_only=True)
72
+ class PermissionsScopeAllMaterialFamilies:
73
+ type: typing.Literal["all_material_families"] = "all_material_families"
74
+
75
+
76
+ # DO NOT MODIFY -- This file is generated by type_spec
77
+ PermissionsScope = typing.Annotated[
78
+ typing.Union[PermissionsScopeProject, PermissionsScopeRecipe, PermissionsScopeMaterialFamily, PermissionsScopeAllMaterialFamilies],
79
+ serial_alias_annotation(
80
+ named_type_path="sdk.api.permissions.set_core_permissions.PermissionsScope",
81
+ ),
82
+ ]
83
+
84
+
85
+ # DO NOT MODIFY -- This file is generated by type_spec
86
+ @serial_class(
87
+ named_type_path="sdk.api.permissions.set_core_permissions.Arguments",
88
+ )
89
+ @dataclasses.dataclass(kw_only=True)
90
+ class Arguments:
91
+ scope: PermissionsScope
92
+ permissions_types: list[permissions_t.CorePermissionType]
93
+ update_type: post_base_t.UpdateType
94
+ user_group_ids: list[int] | None = None
95
+ user_ids: list[int] | None = None
96
+
97
+
98
+ # DO NOT MODIFY -- This file is generated by type_spec
99
+ @serial_class(
100
+ named_type_path="sdk.api.permissions.set_core_permissions.Data",
101
+ )
102
+ @dataclasses.dataclass(kw_only=True)
103
+ class Data:
104
+ pass
105
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,15 +1,16 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
2
  # flake8: noqa: F821
3
- # ruff: noqa: E402
3
+ # ruff: noqa: E402 Q003
4
4
  # fmt: off
5
5
  # isort: skip_file
6
6
  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
11
- from ... import base as base_t
12
- from ... import phases as phases_t
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from ... import base_t
13
+ from ... import phases_t
13
14
 
14
15
  __all__: list[str] = [
15
16
  "Arguments",
@@ -24,14 +25,20 @@ ENDPOINT_PATH = "api/external/project/external_get_projects"
24
25
 
25
26
 
26
27
  # DO NOT MODIFY -- This file is generated by type_spec
27
- @dataclass(kw_only=True)
28
+ @serial_class(
29
+ named_type_path="sdk.api.project.get_projects.Arguments",
30
+ )
31
+ @dataclasses.dataclass(kw_only=True)
28
32
  class Arguments:
29
33
  all_material_families: bool
30
34
  material_family_id: typing.Optional[base_t.ObjectId]
31
35
 
32
36
 
33
37
  # DO NOT MODIFY -- This file is generated by type_spec
34
- @dataclass(kw_only=True)
38
+ @serial_class(
39
+ named_type_path="sdk.api.project.get_projects.Project",
40
+ )
41
+ @dataclasses.dataclass(kw_only=True)
35
42
  class Project:
36
43
  id: base_t.ObjectId
37
44
  name: str
@@ -41,7 +48,10 @@ class Project:
41
48
 
42
49
 
43
50
  # DO NOT MODIFY -- This file is generated by type_spec
44
- @dataclass(kw_only=True)
51
+ @serial_class(
52
+ named_type_path="sdk.api.project.get_projects.Data",
53
+ )
54
+ @dataclasses.dataclass(kw_only=True)
45
55
  class Data:
46
56
  projects: list[Project]
47
57
  phases: list[phases_t.Phase]
@@ -1,17 +1,18 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
2
  # flake8: noqa: F821
3
- # ruff: noqa: E402
3
+ # ruff: noqa: E402 Q003
4
4
  # fmt: off
5
5
  # isort: skip_file
6
6
  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
11
- from ... import base as base_t
12
- from ... import field_values as field_values_t
13
- from ... import fields as fields_t
14
- from ... import phases as phases_t
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from ... import base_t
13
+ from ... import field_values_t
14
+ from ... import fields_t
15
+ from ... import phases_t
15
16
 
16
17
  __all__: list[str] = [
17
18
  "Arguments",
@@ -26,15 +27,21 @@ ENDPOINT_PATH = "api/external/project/external_get_projects_data"
26
27
 
27
28
 
28
29
  # DO NOT MODIFY -- This file is generated by type_spec
29
- @dataclass(kw_only=True)
30
+ @serial_class(
31
+ named_type_path="sdk.api.project.get_projects_data.Arguments",
32
+ )
33
+ @dataclasses.dataclass(kw_only=True)
30
34
  class Arguments:
31
35
  project_ids: list[base_t.ObjectId]
32
- offset: typing.Optional[typing.Optional[int]] = None
33
- limit: typing.Optional[typing.Optional[int]] = None
36
+ offset: typing.Optional[int] | None = None
37
+ limit: typing.Optional[int] | None = None
34
38
 
35
39
 
36
40
  # DO NOT MODIFY -- This file is generated by type_spec
37
- @dataclass(kw_only=True)
41
+ @serial_class(
42
+ named_type_path="sdk.api.project.get_projects_data.ProjectDetailed",
43
+ )
44
+ @dataclasses.dataclass(kw_only=True)
38
45
  class ProjectDetailed:
39
46
  id: base_t.ObjectId
40
47
  name: str
@@ -45,7 +52,10 @@ class ProjectDetailed:
45
52
 
46
53
 
47
54
  # DO NOT MODIFY -- This file is generated by type_spec
48
- @dataclass(kw_only=True)
55
+ @serial_class(
56
+ named_type_path="sdk.api.project.get_projects_data.Data",
57
+ )
58
+ @dataclasses.dataclass(kw_only=True)
49
59
  class Data:
50
60
  projects: list[ProjectDetailed]
51
61
  phases: list[phases_t.Phase]
@@ -0,0 +1 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,46 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 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 pkgs.serialization import serial_class
12
+ from ... import async_batch_t
13
+ from ... import identifier_t
14
+ from ... import recipe_links_t
15
+
16
+ __all__: list[str] = [
17
+ "Arguments",
18
+ "Data",
19
+ "ENDPOINT_METHOD",
20
+ "ENDPOINT_PATH",
21
+ ]
22
+
23
+ ENDPOINT_METHOD = "POST"
24
+ ENDPOINT_PATH = "api/external/recipe_links/create_recipe_link"
25
+
26
+
27
+ # DO NOT MODIFY -- This file is generated by type_spec
28
+ @serial_class(
29
+ named_type_path="sdk.api.recipe_links.create_recipe_link.Arguments",
30
+ )
31
+ @dataclasses.dataclass(kw_only=True)
32
+ class Arguments:
33
+ recipe_from_key: identifier_t.IdentifierKey
34
+ recipe_to_key: identifier_t.IdentifierKey
35
+ link_type: typing.Union[typing.Literal[recipe_links_t.RecipeLinkType.CHILD], typing.Literal[recipe_links_t.RecipeLinkType.CONTROL], typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]]
36
+ name: str
37
+
38
+
39
+ # DO NOT MODIFY -- This file is generated by type_spec
40
+ @serial_class(
41
+ named_type_path="sdk.api.recipe_links.create_recipe_link.Data",
42
+ )
43
+ @dataclasses.dataclass(kw_only=True)
44
+ class Data(async_batch_t.AsyncBatchActionReturn):
45
+ pass
46
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,45 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402 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 pkgs.serialization import serial_class
12
+ from ... import async_batch_t
13
+ from ... import identifier_t
14
+ from ... import recipe_links_t
15
+
16
+ __all__: list[str] = [
17
+ "Arguments",
18
+ "Data",
19
+ "ENDPOINT_METHOD",
20
+ "ENDPOINT_PATH",
21
+ ]
22
+
23
+ ENDPOINT_METHOD = "POST"
24
+ ENDPOINT_PATH = "api/external/recipe_links/remove_recipe_link"
25
+
26
+
27
+ # DO NOT MODIFY -- This file is generated by type_spec
28
+ @serial_class(
29
+ named_type_path="sdk.api.recipe_links.remove_recipe_link.Arguments",
30
+ )
31
+ @dataclasses.dataclass(kw_only=True)
32
+ class Arguments:
33
+ recipe_from_key: identifier_t.IdentifierKey
34
+ recipe_to_key: identifier_t.IdentifierKey
35
+ link_type: typing.Union[typing.Literal[recipe_links_t.RecipeLinkType.CHILD], typing.Literal[recipe_links_t.RecipeLinkType.CONTROL], typing.Literal[recipe_links_t.RecipeLinkType.USER_LINK]]
36
+
37
+
38
+ # DO NOT MODIFY -- This file is generated by type_spec
39
+ @serial_class(
40
+ named_type_path="sdk.api.recipe_links.remove_recipe_link.Data",
41
+ )
42
+ @dataclasses.dataclass(kw_only=True)
43
+ class Data(async_batch_t.AsyncBatchActionReturn):
44
+ pass
45
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,14 +1,15 @@
1
1
  # DO NOT MODIFY -- This file is generated by type_spec
2
2
  # flake8: noqa: F821
3
- # ruff: noqa: E402
3
+ # ruff: noqa: E402 Q003
4
4
  # fmt: off
5
5
  # isort: skip_file
6
6
  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
11
- from ... import base as base_t
10
+ import dataclasses
11
+ from pkgs.serialization import serial_class
12
+ from ... import base_t
12
13
 
13
14
  __all__: list[str] = [
14
15
  "Arguments",
@@ -23,16 +24,22 @@ ENDPOINT_PATH = "api/external/recipe_metadata/external_get_recipe_metadata_data"
23
24
 
24
25
 
25
26
  # DO NOT MODIFY -- This file is generated by type_spec
26
- @dataclass(kw_only=True)
27
+ @serial_class(
28
+ named_type_path="sdk.api.recipe_metadata.get_recipe_metadata_data.Arguments",
29
+ )
30
+ @dataclasses.dataclass(kw_only=True)
27
31
  class Arguments:
28
32
  material_family_id: base_t.ObjectId
29
33
  recipe_metadata_ids: typing.Optional[list[base_t.ObjectId]]
30
- offset: typing.Optional[typing.Optional[int]] = None
31
- limit: typing.Optional[typing.Optional[int]] = None
34
+ offset: typing.Optional[int] | None = None
35
+ limit: typing.Optional[int] | None = None
32
36
 
33
37
 
34
38
  # DO NOT MODIFY -- This file is generated by type_spec
35
- @dataclass(kw_only=True)
39
+ @serial_class(
40
+ named_type_path="sdk.api.recipe_metadata.get_recipe_metadata_data.FullRecipeMetadataField",
41
+ )
42
+ @dataclasses.dataclass(kw_only=True)
36
43
  class FullRecipeMetadataField:
37
44
  recipe_metadata_id: base_t.ObjectId
38
45
  name: str
@@ -40,7 +47,10 @@ class FullRecipeMetadataField:
40
47
 
41
48
 
42
49
  # DO NOT MODIFY -- This file is generated by type_spec
43
- @dataclass(kw_only=True)
50
+ @serial_class(
51
+ named_type_path="sdk.api.recipe_metadata.get_recipe_metadata_data.Data",
52
+ )
53
+ @dataclasses.dataclass(kw_only=True)
44
54
  class Data:
45
55
  recipe_metadata: list[FullRecipeMetadataField]
46
56
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,42 @@
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 pkgs.serialization import serial_class
12
+ from ... import identifier_t
13
+
14
+ __all__: list[str] = [
15
+ "Arguments",
16
+ "Data",
17
+ "ENDPOINT_METHOD",
18
+ "ENDPOINT_PATH",
19
+ ]
20
+
21
+ ENDPOINT_METHOD = "POST"
22
+ ENDPOINT_PATH = "api/external/recipes/add_recipe_to_project"
23
+
24
+
25
+ # DO NOT MODIFY -- This file is generated by type_spec
26
+ @serial_class(
27
+ named_type_path="sdk.api.recipes.add_recipe_to_project.Arguments",
28
+ )
29
+ @dataclasses.dataclass(kw_only=True)
30
+ class Arguments:
31
+ recipe_key: identifier_t.IdentifierKey
32
+ project_key: identifier_t.IdentifierKey
33
+
34
+
35
+ # DO NOT MODIFY -- This file is generated by type_spec
36
+ @serial_class(
37
+ named_type_path="sdk.api.recipes.add_recipe_to_project.Data",
38
+ )
39
+ @dataclasses.dataclass(kw_only=True)
40
+ class Data:
41
+ pass
42
+ # DO NOT MODIFY -- This file is generated by type_spec