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