UncountablePythonSDK 0.0.7__py3-none-any.whl → 0.0.9__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 (95) hide show
  1. {UncountablePythonSDK-0.0.7.dist-info → UncountablePythonSDK-0.0.9.dist-info}/METADATA +4 -2
  2. UncountablePythonSDK-0.0.9.dist-info/RECORD +145 -0
  3. pkgs/argument_parser/argument_parser.py +2 -2
  4. pkgs/serialization/missing_sentry.py +1 -1
  5. pkgs/serialization_util/serialization_helpers.py +3 -0
  6. pkgs/type_spec/emit_open_api.py +34 -17
  7. pkgs/type_spec/emit_open_api_util.py +4 -9
  8. pkgs/type_spec/emit_python.py +8 -5
  9. pkgs/type_spec/open_api_util.py +13 -12
  10. type_spec/external/api/entity/create_entities.yaml +1 -1
  11. type_spec/external/api/entity/create_entity.yaml +1 -1
  12. type_spec/external/api/entity/get_entities_data.yaml +4 -30
  13. type_spec/external/api/entity/list_entities.yaml +4 -14
  14. type_spec/external/api/entity/resolve_entity_ids.yaml +2 -2
  15. type_spec/external/api/entity/set_values.yaml +3 -30
  16. type_spec/external/api/input_groups/get_input_group_names.yaml +2 -2
  17. type_spec/external/api/inputs/create_inputs.yaml +6 -19
  18. type_spec/external/api/inputs/get_input_data.yaml +11 -24
  19. type_spec/external/api/inputs/get_input_names.yaml +4 -4
  20. type_spec/external/api/inputs/get_inputs_data.yaml +7 -20
  21. type_spec/external/api/inputs/set_input_attribute_values.yaml +3 -7
  22. type_spec/external/api/outputs/get_output_data.yaml +9 -20
  23. type_spec/external/api/outputs/get_output_names.yaml +2 -2
  24. type_spec/external/api/project/get_projects.yaml +6 -16
  25. type_spec/external/api/project/get_projects_data.yaml +10 -46
  26. type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml +5 -5
  27. type_spec/external/api/recipes/create_recipes.yaml +5 -18
  28. type_spec/external/api/recipes/get_curve.yaml +2 -34
  29. type_spec/external/api/recipes/get_recipe_calculations.yaml +7 -17
  30. type_spec/external/api/recipes/get_recipe_links.yaml +1 -1
  31. type_spec/external/api/recipes/get_recipe_names.yaml +2 -2
  32. type_spec/external/api/recipes/get_recipe_output_metadata.yaml +4 -17
  33. type_spec/external/api/recipes/get_recipes_data.yaml +31 -165
  34. type_spec/external/api/recipes/set_recipe_inputs.yaml +3 -3
  35. type_spec/external/api/recipes/set_recipe_outputs.yaml +4 -8
  36. uncountable/integration/__init__.py +0 -0
  37. uncountable/integration/construct_client.py +30 -0
  38. uncountable/integration/cron.py +29 -0
  39. uncountable/integration/db/__init__.py +0 -0
  40. uncountable/integration/db/connect.py +8 -0
  41. uncountable/integration/entrypoint.py +41 -0
  42. uncountable/integration/executors/__init__.py +0 -0
  43. uncountable/integration/executors/script_executor.py +18 -0
  44. uncountable/integration/job.py +39 -0
  45. uncountable/integration/server.py +86 -0
  46. uncountable/integration/types.py +89 -0
  47. uncountable/types/__init__.py +30 -0
  48. uncountable/types/api/entity/create_entities.py +2 -1
  49. uncountable/types/api/entity/create_entity.py +1 -1
  50. uncountable/types/api/entity/get_entities_data.py +6 -26
  51. uncountable/types/api/entity/list_entities.py +5 -12
  52. uncountable/types/api/entity/resolve_entity_ids.py +4 -2
  53. uncountable/types/api/entity/set_values.py +7 -29
  54. uncountable/types/api/input_groups/get_input_group_names.py +3 -2
  55. uncountable/types/api/inputs/create_inputs.py +8 -20
  56. uncountable/types/api/inputs/get_input_data.py +12 -25
  57. uncountable/types/api/inputs/get_input_names.py +5 -4
  58. uncountable/types/api/inputs/get_inputs_data.py +8 -21
  59. uncountable/types/api/inputs/set_input_attribute_values.py +5 -7
  60. uncountable/types/api/outputs/get_output_data.py +10 -17
  61. uncountable/types/api/outputs/get_output_names.py +3 -2
  62. uncountable/types/api/project/get_projects.py +8 -14
  63. uncountable/types/api/project/get_projects_data.py +13 -40
  64. uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py +6 -5
  65. uncountable/types/api/recipes/create_recipes.py +6 -18
  66. uncountable/types/api/recipes/get_curve.py +4 -26
  67. uncountable/types/api/recipes/get_recipe_calculations.py +8 -15
  68. uncountable/types/api/recipes/get_recipe_links.py +2 -1
  69. uncountable/types/api/recipes/get_recipe_names.py +3 -2
  70. uncountable/types/api/recipes/get_recipe_output_metadata.py +5 -13
  71. uncountable/types/api/recipes/get_recipes_data.py +36 -122
  72. uncountable/types/api/recipes/set_recipe_inputs.py +4 -3
  73. uncountable/types/api/recipes/set_recipe_outputs.py +7 -8
  74. uncountable/types/calculations.py +23 -0
  75. uncountable/types/client_base.py +43 -43
  76. uncountable/types/curves.py +47 -0
  77. uncountable/types/entity.py +4 -1
  78. uncountable/types/experiment_groups.py +23 -0
  79. uncountable/types/field_values.py +37 -0
  80. uncountable/types/fields.py +24 -0
  81. uncountable/types/input_attributes.py +29 -0
  82. uncountable/types/inputs.py +61 -0
  83. uncountable/types/outputs.py +26 -0
  84. uncountable/types/phases.py +23 -0
  85. uncountable/types/recipe_links.py +3 -2
  86. uncountable/types/recipe_metadata.py +50 -0
  87. uncountable/types/recipe_output_metadata.py +24 -0
  88. uncountable/types/recipe_tags.py +23 -0
  89. uncountable/types/response.py +25 -0
  90. uncountable/types/units.py +23 -0
  91. uncountable/types/users.py +24 -0
  92. uncountable/types/workflows.py +32 -0
  93. UncountablePythonSDK-0.0.7.dist-info/RECORD +0 -119
  94. {UncountablePythonSDK-0.0.7.dist-info → UncountablePythonSDK-0.0.9.dist-info}/WHEEL +0 -0
  95. {UncountablePythonSDK-0.0.7.dist-info → UncountablePythonSDK-0.0.9.dist-info}/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: UncountablePythonSDK
3
- Version: 0.0.7
3
+ Version: 0.0.9
4
4
  Summary: Uncountable SDK
5
5
  Project-URL: Homepage, https://github.com/uncountableinc/uncountable-python-sdk
6
6
  Project-URL: Repository, https://github.com/uncountableinc/uncountable-python-sdk.git
@@ -16,7 +16,9 @@ Classifier: Topic :: Utilities
16
16
  Classifier: Typing :: Typed
17
17
  Requires-Python: >=3.11
18
18
  Description-Content-Type: text/markdown
19
- Requires-Dist: requests >=2.31.0
19
+ Requires-Dist: requests ==2.31.0
20
+ Requires-Dist: SQLAlchemy ==2.0.29
21
+ Requires-Dist: APScheduler ==3.10.4
20
22
  Provides-Extra: test
21
23
  Requires-Dist: mypy >=1.8.1 ; extra == 'test'
22
24
  Requires-Dist: ruff >=0.2.1 ; extra == 'test'
@@ -0,0 +1,145 @@
1
+ examples/create_entity.py,sha256=0wpH-FvEgZmmlgkqL7tY7wAX6wvHdPQbMMJJvhagBok,622
2
+ examples/recipe-import/importer.py,sha256=baD71xuNibxDTe3bGHsMEIZEf9Xtb-IumBNpCEV0RZU,1134
3
+ pkgs/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
4
+ pkgs/argument_parser/__init__.py,sha256=CsQ6QoPKSLLRVl-z6URAmPkiUL9ZPZoV4rJHgy_-RjA,385
5
+ pkgs/argument_parser/_is_enum.py,sha256=JQPlVIW0z-N9Qux61TQXaqP3lIHEhOOGwe9--JcM4Ro,393
6
+ pkgs/argument_parser/_is_namedtuple.py,sha256=Rjc1bKanIPPogl3qG5JPBxglG1TqWYOo1nxxhBASQWY,265
7
+ pkgs/argument_parser/argument_parser.py,sha256=TC6cP6OQeLyzYU0m56f9BXSuCcR67FgyRlOa6OZyjgk,14445
8
+ pkgs/argument_parser/case_convert.py,sha256=J9wahIE-P95LvTqn4M4gDUx_RXeiW2SRo9i_1bz1E6A,558
9
+ pkgs/serialization/__init__.py,sha256=quvXMSl1szddLTr4Yxo9KA9oBMoeX7qGpFkkAplFBbY,603
10
+ pkgs/serialization/missing_sentry.py,sha256=aM_9KxbCk9dVvXvcOKgkIQBqFWvLhv8QlIUCiuFEXMo,806
11
+ pkgs/serialization/opaque_key.py,sha256=FIfXEE0DA1U8R_taFbQ1RCoTSgehrPjP06-qvo-GeNQ,177
12
+ pkgs/serialization/serial_class.py,sha256=xTFf5E94bLTcDEQxS0xvc1QZUS6ntQeRqbiuSw12aRI,5182
13
+ pkgs/serialization_util/__init__.py,sha256=4vX5j1pvd1NkznSVqwWqunVyOvQtLCgVuwRjVwDk7qg,447
14
+ pkgs/serialization_util/_get_type_for_serialization.py,sha256=DSqvDAcf9pHCnDiTF9m4xkvQ38Bsq1i4mSoiJlQWaQc,1209
15
+ pkgs/serialization_util/serialization_helpers.py,sha256=hVujmwH1nrvZlyaCPvrP2zhEqKfEfNnDV7yeF8vUW5Q,5109
16
+ pkgs/strenum_compat/__init__.py,sha256=wXRFeNvBm8RU6dy1PFJ5sRLgUIEeH_DVR95Sv5qpGbk,59
17
+ pkgs/strenum_compat/strenum_compat.py,sha256=vGJlrMZpOqiGXvv21IbS0amdB2xQ2CdYKvnfEfHLr8E,156
18
+ pkgs/type_spec/__init__.py,sha256=h5DmJTca4QVV10sZR1x0-MlkZfuGYDfapR3zHvXfzto,19
19
+ pkgs/type_spec/__main__.py,sha256=5bJaX9Y_-FavP0qwzhk-z-V97UY7uaezJTa1zhO_HHQ,1048
20
+ pkgs/type_spec/builder.py,sha256=Pl3UzHYgci3XRYsJ-pEsrdKu26mrJeLQv66OS2KePGc,38993
21
+ pkgs/type_spec/config.py,sha256=wXALehQr_CcteOY_KbeI3rtmGgqVzHcveAhgKCDfQoQ,4934
22
+ pkgs/type_spec/emit_io_ts.py,sha256=gCEfS81w_ifqjLVJ3_cpy9Gq03o6H5nEsh35WAkqGGE,5606
23
+ pkgs/type_spec/emit_open_api.py,sha256=dnGazdVBjdEWQ4WK8Ujq966quRZY2TyQ05PGR48Md2I,17461
24
+ pkgs/type_spec/emit_open_api_util.py,sha256=xnzPOuPO8Pbhf6xf1tkHUKgXs1n-jH-lWFac8pOtd4I,1882
25
+ pkgs/type_spec/emit_python.py,sha256=ixJ5aXzrpeGuNyuX3pfGRSWgUWgRNegX3ltgwqrmQJA,35580
26
+ pkgs/type_spec/emit_typescript.py,sha256=6tlzvyHc7iIEic01AtjYWuzy7Ac3KijtXRQ3IQSN7JE,18670
27
+ pkgs/type_spec/emit_typescript_util.py,sha256=MZMigIsYIYOXLjJqp-DSRYsztWbIKd9QQEmYRRqnGQ4,894
28
+ pkgs/type_spec/load_types.py,sha256=LMIkrk0n-Kh4I4CUOBzuboYtsAHBYuMrL9d2hkU83f4,2184
29
+ pkgs/type_spec/open_api_util.py,sha256=kOxDc1P4dgjWRxOQNNRtayUEHiHcxbc4OGzBsCWsKsM,7462
30
+ pkgs/type_spec/test.py,sha256=4ueujBq-pEgnX3Z69HyPmD-bullFXmpixcpVzfOkhP4,489
31
+ pkgs/type_spec/util.py,sha256=pTV9EB4_M0tucWwape9_1m5maIi3UKPw44SA_Mc8KNA,4856
32
+ pkgs/type_spec/parts/base.py.prepart,sha256=2RsjF9nTwERb7M0LKsPjGbN5cL2QMwMVt4QHpUPPM70,2147
33
+ pkgs/type_spec/parts/base.ts.prepart,sha256=2FJJvpg2olCcavxj0nbYWdwKl6KeScour2JjSvN42l8,1001
34
+ pkgs/type_spec/type_info/__main__.py,sha256=pmVjVqXyVh8vKTNCTFgz80Sg74C5BKToP3E6GS-X_So,857
35
+ pkgs/type_spec/type_info/emit_type_info.py,sha256=xWcZsgdEwApqqvtinZXyyBM61FZ9rmP9oybKapz8xN4,7692
36
+ pkgs/type_spec/value_spec/__init__.py,sha256=Z-grlcZtxAfEXhPHsK0nD7PFLGsv4eqvunaPN7_TA84,83
37
+ pkgs/type_spec/value_spec/__main__.py,sha256=syggR7J5MjFiULgPKcwb1T9u6eEyJUm9UlkIwP8V5IU,8300
38
+ pkgs/type_spec/value_spec/convert_type.py,sha256=SAYyEV6orQJJbkXSE4hhtOQJ2vKUXJCKPeYPrB8G9oA,2272
39
+ pkgs/type_spec/value_spec/emit_python.py,sha256=M9NyHi-akTw4cUsHCEK7rsFirb8ngYThiIW7xh2xSko,6943
40
+ pkgs/type_spec/value_spec/types.py,sha256=a2zxbbCRWepY1l8OtjeCDKgBKFPFHVgV99oP6pTtaro,441
41
+ type_spec/external/api/batch/execute_batch.yaml,sha256=gpdSev3sLEC_cMVSZdj-9bc_XDFDqdPdOII9Ojme2N8,1170
42
+ type_spec/external/api/entity/create_entities.yaml,sha256=9IsqkW6W2JhoraIkeNTV1JqZ5uF98u0gtFX9imHy038,1058
43
+ type_spec/external/api/entity/create_entity.yaml,sha256=EFMeXrDskAizL4-6DKnC1boBCYvyHyt75ZMyoQmAhzE,1253
44
+ type_spec/external/api/entity/get_entities_data.yaml,sha256=3XujG7bOpuBQlfFrYtG3L4fBk7LsmdSekmP9iU0zjF0,796
45
+ type_spec/external/api/entity/list_entities.yaml,sha256=H2YVv6il-XVKd_7IipZqauTDvWCrvHok7z47bDH2sI4,1798
46
+ type_spec/external/api/entity/resolve_entity_ids.yaml,sha256=Zf3OhAohwLJO7wWj0e-sK5lhIsXlD8A5Bu3OGjY4-tA,732
47
+ type_spec/external/api/entity/set_values.yaml,sha256=_UDxSk09Ke0KDABt8ldOScC2CLrbAhBPArZvno5iD4I,422
48
+ type_spec/external/api/input_groups/get_input_group_names.yaml,sha256=LYgnm2Or7ZWCzDGjl53Y1PcHvej8G7Mpp5H96Z4UZCg,913
49
+ type_spec/external/api/inputs/create_inputs.yaml,sha256=pX8jatpve4iJxK7kYw7SBlQXlVHJVfLDCOrDdpn8Gsw,1561
50
+ type_spec/external/api/inputs/get_input_data.yaml,sha256=kjX3VE0y2DxxfUk0J2kjnufSFVAbk_3v28EPuHBhvRE,3825
51
+ type_spec/external/api/inputs/get_input_names.yaml,sha256=AgGcenh6wEbmhmx8i5CY-0hY0q5geZ04ECayE9Hr0Xw,1522
52
+ type_spec/external/api/inputs/get_inputs_data.yaml,sha256=9wKwnOXC_KokThWnz5Me5RzIcGlxffwcKJtgFow-kvU,2368
53
+ type_spec/external/api/inputs/set_input_attribute_values.yaml,sha256=RpOtVIWBlOp_Nd5Xp67IaQmCzGnLkNwFKQDi4WD8oX4,1021
54
+ type_spec/external/api/outputs/get_output_data.yaml,sha256=ABaKme64kFCZ-A11AUM5ARQs0Pb9f71atWx-QMYFNZs,3485
55
+ type_spec/external/api/outputs/get_output_names.yaml,sha256=IqEYCOHeyHIu45Lf37sfzn-o_0VFk0u_Bqsb0NKHPzw,1334
56
+ type_spec/external/api/outputs/resolve_output_conditions.yaml,sha256=lGrG6XPGiQtHx24GccPcO18xxAoMynTSC_2WwxCjFrc,1640
57
+ type_spec/external/api/project/get_projects.yaml,sha256=pQXGGPHenmFWYUuzEmZ-ORf0_d6lpQkTrXXMRrEqvDI,1676
58
+ type_spec/external/api/project/get_projects_data.yaml,sha256=8xQoyL8HlAropfZPYYcQ-W4fO4yuqueAWTKxRzTXAa0,1981
59
+ type_spec/external/api/recipe_metadata/get_recipe_metadata_data.yaml,sha256=mJs82Ci8XSp2ng0W9MKqoeYwIjjgaVYmC5MWFmWFkR8,1759
60
+ type_spec/external/api/recipes/create_recipes.yaml,sha256=eXMlXRpB5TFt1mUTECBa4aAIG3KrxYT2mJ5vxmZ9Q3A,1503
61
+ type_spec/external/api/recipes/get_curve.yaml,sha256=QFRFst1EJ6T13G9R07kTiz-wvfxgDKbwHbmjgcvEaNc,568
62
+ type_spec/external/api/recipes/get_recipe_calculations.yaml,sha256=ZE7PzfWrjS7TiO4q7iyCwEj5In8GwO6fFIYGqUlTEXo,1240
63
+ type_spec/external/api/recipes/get_recipe_links.yaml,sha256=Vwm0OVWl3VvDaI7chY_oZQqD8xZ1u09iFWKkZKn1ITo,766
64
+ type_spec/external/api/recipes/get_recipe_names.yaml,sha256=4tqcVj-xLeEu0lhdm8NpLYmAvfkmq08GZ0Mr59I5nLI,896
65
+ type_spec/external/api/recipes/get_recipe_output_metadata.yaml,sha256=YImW94JXVKR6Wz_7R7sRbhD9Ul51Ba-j-x9vJB__AAU,1216
66
+ type_spec/external/api/recipes/get_recipes_data.yaml,sha256=motc7yhI104V1TsMD9W_WdeTKNWLQwcuOeftAWAxnpE,11541
67
+ type_spec/external/api/recipes/set_recipe_inputs.yaml,sha256=LH5qcKZfwO3Sk6YARENa08DP1h1wwPirA8cvXPqAhvo,1449
68
+ type_spec/external/api/recipes/set_recipe_outputs.yaml,sha256=Oe8XGYXbPNmrbEDXk3qucfS1L3P9TnXI5cxaNAl6x5A,1875
69
+ uncountable/__init__.py,sha256=281cC2hs8pbrD0jVKMol-tbWSh7Zcsc8oRT42dKteyE,102
70
+ uncountable/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
71
+ uncountable/core/__init__.py,sha256=GCXRRhhYv-yKzqKjAij7GcNiOr90BBbgdhhpusWtmUc,100
72
+ uncountable/core/client.py,sha256=jcJBGwe31fOqfGiUJzW_KMcfE0hax55jgVVliALBNLQ,4160
73
+ uncountable/integration/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
74
+ uncountable/integration/construct_client.py,sha256=Ojdj6Mh5orAjXZLxb6SzvH4zRmkvqp6nHF_8Ph7h1ho,896
75
+ uncountable/integration/cron.py,sha256=QZP4yvxdGUZsOH5wtxZzqja_0UBHL4lwERzEHGTR-E0,917
76
+ uncountable/integration/entrypoint.py,sha256=31QJO6pFDvPR8k5Bi7RSm-IUI5kXj_VHdz4XZW3j5DI,1363
77
+ uncountable/integration/job.py,sha256=orPmhLWs5mB4U8XweIb1Pa3fUKKE89yUnHXLkHy7KOs,699
78
+ uncountable/integration/server.py,sha256=VfbJLFqHl6cQAL8e2EOmrtSRfruskQ89h_2Mu3EMeOI,2998
79
+ uncountable/integration/types.py,sha256=n9idu2_qHOA5CQdE6NK8HS6aZ8ugTZKTfTTnm4sy8tI,2066
80
+ uncountable/integration/db/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
81
+ uncountable/integration/db/connect.py,sha256=iI9e8a2hfbFP-dvH0MGLsrG-RpM0dHKCL-oCLkah9hs,181
82
+ uncountable/integration/executors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
83
+ uncountable/integration/executors/script_executor.py,sha256=l_mniGlS9Ni6FdmspN7bvMWVocOaXKCo8FM9SFW8n8c,600
84
+ uncountable/types/__init__.py,sha256=SbBDFhHu5iqnvnYjWCBOkjg3_mXuaBHEGfnq021wfHw,3873
85
+ uncountable/types/base.py,sha256=7yMC3sCQ13wd92896Ga2XbZffCqq98SKv09rFGb1ulg,2682
86
+ uncountable/types/calculations.py,sha256=16J-KKMp-I8ZQUkYNmKCHfAn6DGb99cFinALcDIdGHY,562
87
+ uncountable/types/client_base.py,sha256=fEpoCxiBEmfdLUYEV1z2IVpm1K65LtHUdZoC10AMsAQ,21085
88
+ uncountable/types/curves.py,sha256=qYyRntMmFNonEwTrGhquMLbgMqjyP1moQflNTP0FMec,1308
89
+ uncountable/types/entity.py,sha256=NjMZrqBwQ7sZe_oUuJqy9IEG7dWZmFMkQQXJ0_odcnA,11637
90
+ uncountable/types/experiment_groups.py,sha256=ZBEk06F4n98Jz3oEA09WaDmw5rqPs7iVAm_Ysr4gc_o,599
91
+ uncountable/types/field_values.py,sha256=2unBAeBqQPqLQKaL6nGpnDDksZ-5MZepgEF3sgy6oOk,1670
92
+ uncountable/types/fields.py,sha256=eGtZ6axTYGFxLmPAyri2LwlcR4SZ2sX2c6QDX0ybKz0,570
93
+ uncountable/types/input_attributes.py,sha256=u-JABoZ-Ij1Ynq5g6MxOgRdQeYbM7OnGP2q_N7KuVdw,826
94
+ uncountable/types/inputs.py,sha256=q7fNGaSKIk3R6uXCEhSQpiHvXu82YcK3oZHDI7bxE88,1597
95
+ uncountable/types/outputs.py,sha256=hSUlu41sisYKIZpPrj1G1DRfKm6hsKNcd1eNKFYb-4w,671
96
+ uncountable/types/phases.py,sha256=eaqwQlSRC2Ug7YFL0gqLbg3wDDHeRvBOhcABG7khW8c,550
97
+ uncountable/types/recipe_links.py,sha256=RldSV7SdeBYa0bx02DzMg4jfPdgrlMRE40T16Fdy8u4,1406
98
+ uncountable/types/recipe_metadata.py,sha256=NpRnz9QO2t21eTyf-M9_HBdQzcd55OgFM1dx6ZEg22w,1341
99
+ uncountable/types/recipe_output_metadata.py,sha256=XJA8R1r4NTzyR_DhMkmH4ZtYD-vqpvBMji9Be8OcFmo,613
100
+ uncountable/types/recipe_tags.py,sha256=lYpksHAxXCcIjZKR7JoZOTH2cBSovwxZaHwjZy_yqiQ,581
101
+ uncountable/types/response.py,sha256=ZI0CG7ZxBM2k5_W-6mNMU3UlB0p1i-0nrwOvsMaS-vU,620
102
+ uncountable/types/units.py,sha256=_kZ7KkXIbRiY2fOdkTsbJBpWRah5TCC2WWiG05e-1DA,565
103
+ uncountable/types/users.py,sha256=SUjNHBDcImKnnE7IN096Wfr1fmjNjCkQ7yQgKUPffz8,588
104
+ uncountable/types/workflows.py,sha256=JJKM0SeDqAMA2oxwzlG1c1FxeSBI7E49duoITcUrEZo,825
105
+ uncountable/types/api/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
106
+ uncountable/types/api/batch/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
107
+ uncountable/types/api/batch/execute_batch.py,sha256=cCZo_akwJR4_ET6oOBChdlrCQlxUw8V9i8tDpv7JTIc,1696
108
+ uncountable/types/api/entity/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
109
+ uncountable/types/api/entity/create_entities.py,sha256=jjVeLmX6bKzIpnSZ0WtdVxcmA4K3ytodOgtjN_QewEU,1446
110
+ uncountable/types/api/entity/create_entity.py,sha256=tZEldeG0l7-nTcrzTw3RcAXwKh0_I4MuB-7EalUg8mE,1616
111
+ uncountable/types/api/entity/get_entities_data.py,sha256=XjrJGZucIn1TYUlDLRnRA0JTQw-vXHIAT-m0H9hk37A,1170
112
+ uncountable/types/api/entity/list_entities.py,sha256=_bIIZJj3N0E6YiHgqzfCOKxD1fQW6biWJQMp5wIVbBw,1514
113
+ uncountable/types/api/entity/resolve_entity_ids.py,sha256=AidGpPmI9ATDv0E7vd9LDOl3n3beGxUlRojh5uZrkl4,1086
114
+ uncountable/types/api/entity/set_values.py,sha256=LcYrKQm5ItYLK1Vx7rRq5i6jkMLDhfEBhF0FD1GowQs,958
115
+ uncountable/types/api/input_groups/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
116
+ uncountable/types/api/input_groups/get_input_group_names.py,sha256=LdHWWEfVNGys6Tudienjich56Zz4bj7uXznpyYitCYA,1033
117
+ uncountable/types/api/inputs/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
118
+ uncountable/types/api/inputs/create_inputs.py,sha256=ykXjqKoE8WOy5N47jcjDVzSdiZx9GlB0FcTyuJdn8FU,1675
119
+ uncountable/types/api/inputs/get_input_data.py,sha256=RrgmS4QORMrm1HTNey-A3zzCdYdkmTbokVYPTI_bjPo,2178
120
+ uncountable/types/api/inputs/get_input_names.py,sha256=8vUA9maZdogngeYbr-DpifNrokJ16BgDN5LQvTrEvSc,1153
121
+ uncountable/types/api/inputs/get_inputs_data.py,sha256=sqZ6xEjzQqRQYMaKXLGWR8WPhWbO6J6zZT8zSTEer84,1841
122
+ uncountable/types/api/inputs/set_input_attribute_values.py,sha256=yvWgIVzl818ewhUA4v3ldSBfmZKngdWTtFn7fqk-dOE,1341
123
+ uncountable/types/api/outputs/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
124
+ uncountable/types/api/outputs/get_output_data.py,sha256=CpYlXNGWWNTiMgDPBRwucSseSrX4gnLuLIp2ljiONrI,2216
125
+ uncountable/types/api/outputs/get_output_names.py,sha256=Id_ApombSzzFdq5rD4uOfWIKzthic6KBAeyqcrhsx18,1086
126
+ uncountable/types/api/outputs/resolve_output_conditions.py,sha256=XZqUseXcGhApHmPm-2u7a37Y4blLRxoPoLhvYlBfCpI,1799
127
+ uncountable/types/api/project/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
128
+ uncountable/types/api/project/get_projects.py,sha256=dMPq8CHxE4k1Vs42TmC4dp9b1jYp0TPlkICacAqrwXQ,1235
129
+ uncountable/types/api/project/get_projects_data.py,sha256=HtUI5YN7S24v7o2VvNBWZkYFnGjFqJzBNoV0ojRx39E,1491
130
+ uncountable/types/api/recipe_metadata/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
131
+ uncountable/types/api/recipe_metadata/get_recipe_metadata_data.py,sha256=el6Pn5XqExX66ZEEHM8CHPxnyXSMZPdfdvLBz86sAVY,1267
132
+ uncountable/types/api/recipes/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
133
+ uncountable/types/api/recipes/create_recipes.py,sha256=qwIYa8hfcjY7_VOFt9lxmVtJ-HOJqQN3GDNSbZsRCZU,1544
134
+ uncountable/types/api/recipes/get_curve.py,sha256=lF8MDmBfxm_cIuDxhE80viSFNbcPEkgYkadNFeuI5e4,854
135
+ uncountable/types/api/recipes/get_recipe_calculations.py,sha256=eQmkdZzCEuq8S2f_kf_7GPvDLX1pTnY1CRmkK0SkMCI,1472
136
+ uncountable/types/api/recipes/get_recipe_links.py,sha256=hk5dfQjv7yU2r-S9b8vwWEJLPHqU0-M6SFiTLMR3fVk,985
137
+ uncountable/types/api/recipes/get_recipe_names.py,sha256=uCpXZq5oWjr9a_Vf-yYPaVS72XOlLHgAlju6KHeQ3UA,986
138
+ uncountable/types/api/recipes/get_recipe_output_metadata.py,sha256=L9s2ykPP4pd02Pc98LDisY8bgV8CToS6t6fXKTWqGRw,1464
139
+ uncountable/types/api/recipes/get_recipes_data.py,sha256=dOKokz6rJp3AiqNrF8rAZFlmJSs3ejdNIJhwKw0Utr0,5317
140
+ uncountable/types/api/recipes/set_recipe_inputs.py,sha256=sHEwPocBucWRnnoX7nbNaFqdflxFkqdjuVydNezqluY,1326
141
+ uncountable/types/api/recipes/set_recipe_outputs.py,sha256=QYq39TNchQ80ET1C77OE9fwhbu_HmIoEDmrQJHkkCu0,1609
142
+ UncountablePythonSDK-0.0.9.dist-info/METADATA,sha256=KWYgT-7XZt_BwkAVhAQZ5cCqKl2WWddal0a6Va16YmI,1196
143
+ UncountablePythonSDK-0.0.9.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
144
+ UncountablePythonSDK-0.0.9.dist-info/top_level.txt,sha256=8ga1DCSWt4Uc_XJ5cR0QrDQuyoeo2uoSzaAJdQT2KBo,36
145
+ UncountablePythonSDK-0.0.9.dist-info/RECORD,,
@@ -407,5 +407,5 @@ class CachedParser(typing.Generic[T]):
407
407
  return self.parse_storage(yaml.safe_load(data_in))
408
408
 
409
409
  def parse_yaml_resource(self, package: resources.Package, resource: str) -> T:
410
- raw_data = resources.read_text(package, resource)
411
- return self.parse_storage(yaml.safe_load(raw_data))
410
+ with resources.open_text(package, resource) as fp:
411
+ return self.parse_storage(yaml.safe_load(fp))
@@ -26,5 +26,5 @@ MISSING_SENTRY = MissingSentryType()
26
26
  MissingType = Union[MissingSentryType, ClassT]
27
27
 
28
28
 
29
- def coalesce_missing_sentry(value: MissingType[ClassT]) -> ClassT | None:
29
+ def coalesce_missing_sentry(value: MissingType[ClassT]) -> Optional[ClassT]:
30
30
  return None if isinstance(value, MissingSentryType) else value
@@ -1,4 +1,5 @@
1
1
  import datetime
2
+ import enum
2
3
  from decimal import Decimal
3
4
  from typing import (
4
5
  TYPE_CHECKING,
@@ -33,6 +34,8 @@ else:
33
34
  def key_convert_to_camelcase(o: Any) -> Any:
34
35
  if isinstance(o, OpaqueKey):
35
36
  return o
37
+ if isinstance(o, enum.Enum):
38
+ return o.value
36
39
  if isinstance(o, str):
37
40
  return snake_to_camel_case(o)
38
41
  return o
@@ -141,6 +141,18 @@ def _serialize_global_context(ctx: EmitOpenAPIGlobalContext) -> str:
141
141
  return yaml.dump(oa_root, sort_keys=False)
142
142
 
143
143
 
144
+ def _emit_endpoint_parameters(typ: OpenAPIType | None) -> dict[str, list[dict[str, str]]]:
145
+ if not isinstance(typ, OpenAPIObjectType):
146
+ return {}
147
+
148
+ return {
149
+ "parameters": [
150
+ {"$ref": f"#/components/schema/Arguments/{prop_name}"}
151
+ for prop_name in typ.properties
152
+ ]
153
+ }
154
+
155
+
144
156
  def _emit_namespace(
145
157
  gctx: EmitOpenAPIGlobalContext,
146
158
  ctx: EmitOpenAPIContext,
@@ -159,23 +171,28 @@ def _emit_namespace(
159
171
  if ctx.endpoint is not None:
160
172
  endpoint = ctx.endpoint
161
173
 
174
+ argument_type = ctx.types.get("Arguments")
162
175
  oa_endpoint = dict()
163
- oa_endpoint[endpoint.method] = {
164
- "tags": endpoint.tags,
165
- "summary": endpoint.summary,
166
- "description": endpoint.description,
167
- "parameters": {"$ref": "#/components/schema/Arguments"},
168
- "responses": {
169
- "200": {
170
- "description": "OK",
171
- "content": {
172
- "application/json": {
173
- "schema": {"$ref": "#/components/schema/Data"}
174
- }
175
- },
176
- }
177
- },
178
- }
176
+ oa_endpoint[endpoint.method] = (
177
+ {
178
+ "tags": endpoint.tags,
179
+ "summary": endpoint.summary,
180
+ "description": endpoint.description,
181
+ }
182
+ | _emit_endpoint_parameters(argument_type)
183
+ | {
184
+ "responses": {
185
+ "200": {
186
+ "description": "OK",
187
+ "content": {
188
+ "application/json": {
189
+ "schema": {"$ref": "#/components/schema/Data"}
190
+ }
191
+ },
192
+ }
193
+ },
194
+ }
195
+ )
179
196
  oa_components["endpoint"] = oa_endpoint
180
197
 
181
198
  types = ctx.types
@@ -460,5 +477,5 @@ def open_api_type(
460
477
  ctx.namespaces.add(stype.namespace)
461
478
  # external namespace resolution
462
479
  return OpenAPIRefType(
463
- source=f"{resolve_namespace_ref(ctx, stype.namespace, config=config)}/{stype.name}"
480
+ source=f"{resolve_namespace_ref(source_path=ctx.namespace.path, ref_path=stype.namespace.path, ref='/components/schema')}/{stype.name}"
464
481
  )
@@ -9,7 +9,6 @@ from dataclasses import dataclass, field
9
9
  from typing import TypeAlias
10
10
 
11
11
  from . import builder
12
- from .config import OpenAPIConfig
13
12
  from .open_api_util import OpenAPIType
14
13
 
15
14
  MODIFY_NOTICE = "# DO NOT MODIFY -- This file is generated by type_spec"
@@ -75,12 +74,8 @@ class EmitOpenAPIContext:
75
74
 
76
75
 
77
76
  def resolve_namespace_ref(
78
- ctx: EmitOpenAPIContext,
79
- namespace: builder.SpecNamespace,
80
- *,
81
- config: OpenAPIConfig,
77
+ *, source_path: list[str], ref_path: list[str], ref: str
82
78
  ) -> str:
83
- # TODO: Handle namespaces not in root directory
84
- if len(ctx.namespace.path) == 1:
85
- return f"{namespace.name}.yaml#/components/schema"
86
- return f"{config.static_url_path}/common/{namespace.name}.yaml#/components/schema"
79
+ to_root = "/".join(".." for _ in source_path)
80
+ location = "/".join(ref_path)
81
+ return f"{to_root}/common/{location}.yaml#{ref}"
@@ -335,14 +335,15 @@ def _emit_namespace(ctx: Context, namespace: builder.SpecNamespace) -> None:
335
335
 
336
336
 
337
337
  def _validate_supports_handler_generation(
338
- stype: builder.SpecTypeDefn, name: str
338
+ stype: builder.SpecTypeDefn, name: str, supports_inheritance: bool = False
339
339
  ) -> builder.SpecTypeDefnObject:
340
340
  assert isinstance(
341
341
  stype, builder.SpecTypeDefnObject
342
342
  ), f"External api {name} must be an object"
343
- assert (
344
- stype.base is None or stype.base.is_base
345
- ), f"Inheritance not supporterd in external api {name}"
343
+ if not supports_inheritance:
344
+ assert (
345
+ stype.base is None or stype.base.is_base
346
+ ), f"Inheritance not supported in external api {name}"
346
347
  return stype
347
348
 
348
349
 
@@ -359,7 +360,9 @@ def _emit_endpoint_invocation_function(
359
360
  data_type = namespace.types["Data"]
360
361
 
361
362
  arguments_type = _validate_supports_handler_generation(arguments_type, "arguments")
362
- data_type = _validate_supports_handler_generation(data_type, "response")
363
+ data_type = _validate_supports_handler_generation(
364
+ data_type, "response", supports_inheritance=True
365
+ )
363
366
 
364
367
  endpoint_method_stype = builder.SpecTypeDefnObject(
365
368
  namespace=arguments_type.namespace, name=ENDPOINT_METHOD
@@ -13,9 +13,10 @@ class OpenAPIType(ABC):
13
13
  self.nullable = nullable
14
14
 
15
15
  @abstractmethod
16
- def asdict(self) -> dict[str, object]: ...
16
+ def asdict(self) -> dict[str, object]:
17
+ pass
17
18
 
18
- def asarguments(self) -> list[dict[str, object]]:
19
+ def asarguments(self) -> dict[str, dict[str, object]]:
19
20
  raise UnsupportedOperation
20
21
 
21
22
  def add_addl_info(self, emitted: dict[str, object]) -> dict[str, object]:
@@ -147,8 +148,8 @@ class OpenAPIFreeFormObjectType(OpenAPIType):
147
148
  def asdict(self) -> dict[str, object]:
148
149
  return self.add_addl_info({"type": "object"})
149
150
 
150
- def asarguments(self) -> list[dict[str, object]]:
151
- return []
151
+ def asarguments(self) -> dict[str, dict[str, object]]:
152
+ return {}
152
153
 
153
154
 
154
155
  class OpenAPIObjectType(OpenAPIType):
@@ -185,17 +186,17 @@ class OpenAPIObjectType(OpenAPIType):
185
186
  },
186
187
  })
187
188
 
188
- def asarguments(self) -> list[dict[str, object]]:
189
- argument_types: list[dict[str, object]] = []
189
+ def asarguments(self) -> dict[str, dict[str, object]]:
190
+ argument_types: dict[str, dict[str, object]] = {}
190
191
  for property_name, property_type in self.properties.items():
191
192
  desc = self.property_desc.get(property_name)
192
- argument_types.append({
193
+ argument_types[property_name] = {
193
194
  "name": property_name,
194
195
  "in": "query",
195
196
  "schema": property_type.asdict(),
196
197
  "required": not property_type.nullable,
197
198
  "description": desc or "",
198
- })
199
+ }
199
200
  return argument_types
200
201
 
201
202
 
@@ -219,11 +220,11 @@ class OpenAPIUnionType(OpenAPIType):
219
220
  # TODO: use parents description and nullable
220
221
  return {"oneOf": [base_type.asdict() for base_type in self.base_types]}
221
222
 
222
- def asarguments(self) -> list[dict[str, object]]:
223
+ def asarguments(self) -> dict[str, dict[str, object]]:
223
224
  # TODO handle inheritence (allOf and refs); need to inline here...
224
225
  # for now skip this endpoint
225
226
 
226
- return []
227
+ return {}
227
228
 
228
229
 
229
230
  class OpenAPIIntersectionType(OpenAPIType):
@@ -246,8 +247,8 @@ class OpenAPIIntersectionType(OpenAPIType):
246
247
  # TODO: use parents description and nullable
247
248
  return {"allOf": [base_type.asdict() for base_type in self.base_types]}
248
249
 
249
- def asarguments(self) -> list[dict[str, object]]:
250
+ def asarguments(self) -> dict[str, dict[str, object]]:
250
251
  # TODO handle inheritence (allOf and refs); need to inline here...
251
252
  # for now skip this endpoint
252
253
 
253
- return []
254
+ return {}
@@ -16,7 +16,7 @@ Arguments:
16
16
  type: Object
17
17
  properties:
18
18
  definition_id:
19
- type: Integer
19
+ type: ObjectId
20
20
  desc: "Definition id for the entities to create"
21
21
  entity_type:
22
22
  type: Union<Literal<entity.EntityType.lab_request>, Literal<entity.EntityType.approval>, Literal<entity.EntityType.custom_entity>, Literal<entity.EntityType.task>, Literal<entity.EntityType.project>>
@@ -23,7 +23,7 @@ Arguments:
23
23
  type: Object
24
24
  properties:
25
25
  definition_id:
26
- type: Integer
26
+ type: ObjectId
27
27
  desc: "Definition id of the entity to create"
28
28
  entity_type:
29
29
  type: Union<Literal<entity.EntityType.lab_request>, Literal<entity.EntityType.approval>, Literal<entity.EntityType.custom_entity>, Literal<entity.EntityType.task>, Literal<entity.EntityType.project>>
@@ -8,45 +8,19 @@ Arguments:
8
8
  type: Object
9
9
  properties:
10
10
  entity_ids:
11
- type: List<Integer>
11
+ type: List<ObjectId>
12
12
  desc: "Ids of the entity to retrieve"
13
13
  entity_type:
14
- type: String
14
+ type: entity.EntityType
15
15
  desc: "The type of the entities requested, e.g. lab_request or approval"
16
16
 
17
- EntityFieldValue:
18
- type: Object
19
- properties:
20
- field_id:
21
- type: Integer
22
- desc: "A unique identifier of the field"
23
- field_ref_name:
24
- type: String
25
- desc: "A unique identifer string for the field"
26
- row_index:
27
- type: Optional<Integer>
28
- desc: "The index in the table for the field"
29
- value:
30
- type: JsonValue
31
- desc: "The value for the field"
32
-
33
- Entity:
34
- type: Object
35
- properties:
36
- id:
37
- type: Integer
38
- desc: "A unique identifier for the entity. Used in conjunction with entity type"
39
- type:
40
- type: String
41
- desc: "The type of entity"
42
-
43
17
  EntityDetails:
44
18
  type: Object
45
19
  properties:
46
20
  entity:
47
- type: Entity
21
+ type: entity.Entity
48
22
  field_values:
49
- type: List<EntityFieldValue>
23
+ type: List<field_values.FieldRefIdNameValue>
50
24
 
51
25
  Data:
52
26
  type: Object
@@ -8,7 +8,7 @@ Arguments:
8
8
  type: Object
9
9
  properties:
10
10
  entity_type:
11
- type: String
11
+ type: entity.EntityType
12
12
  desc: "The type of the entities requested, e.g. lab_request, recipe"
13
13
  config_reference:
14
14
  type: String
@@ -16,28 +16,18 @@ Arguments:
16
16
  attributes?:
17
17
  type: Dict<OpaqueKey, JsonValue>
18
18
  desc: "Attributes to pass to the configuration for parameterizing filters"
19
- offset:
19
+ offset?:
20
20
  type: Optional<Integer>
21
21
  desc: "Used for pagination. Pagination is done based on the sorting of the config"
22
- limit:
22
+ limit?:
23
23
  type: Optional<Integer>
24
24
  desc: "The number of data points to return. If not filled in, it will be set to 100, and cannot be set higher than 100"
25
25
 
26
- Entity:
27
- type: Object
28
- properties:
29
- id:
30
- type: Integer
31
- desc: "A unique identifier for the entity. Used in conjunction with entity type"
32
- type:
33
- type: String
34
- desc: "The type of entity"
35
-
36
26
  EntityResult:
37
27
  type: Object
38
28
  properties:
39
29
  entity:
40
- type: Entity
30
+ type: entity.Entity
41
31
  desc: "The entity represented by the record"
42
32
  column_values:
43
33
  type: List<JsonValue>
@@ -8,10 +8,10 @@ Arguments:
8
8
  type: Object
9
9
  properties:
10
10
  entity_ids:
11
- type: List<Union<String, Integer>>
11
+ type: List<Union<String, ObjectId>>
12
12
  desc: "Ids of the entity to retrieve"
13
13
  entity_type:
14
- type: String
14
+ type: entity.EntityType
15
15
  desc: "The type of the entities requested"
16
16
 
17
17
  EntityNames:
@@ -5,41 +5,14 @@ $endpoint:
5
5
  function: main.site.app.external.entity.set_values.set_values
6
6
  desc: "Sets field values for an entity"
7
7
 
8
- EntityFieldValues:
9
- type: Object
10
- properties:
11
- field_ref_name:
12
- type: String
13
- desc: "A unique identifer string for the field"
14
- row_index?:
15
- type: Optional<Integer>
16
- desc: "The index in the table for the field"
17
- value:
18
- type: JsonValue
19
- desc: "The value for the field"
20
-
21
- Entity:
22
- type: Object
23
- properties:
24
- id:
25
- type: Integer
26
- desc: "A unique identifier for the entity. Used in conjunction with entity type"
27
- type:
28
- type: String
29
- desc: "The type of entity"
30
-
31
8
  Arguments:
32
9
  type: Object
33
10
  properties:
34
11
  entity:
35
- type: Entity
12
+ type: entity.Entity
36
13
  values:
37
- type: List<EntityFieldValues>
14
+ type: List<field_values.ArgumentValueRefName>
38
15
 
39
16
  Data:
40
- type: Object
17
+ type: response.Response
41
18
  properties:
42
- status:
43
- type: Literal<'ok'>
44
- default: "ok"
45
- desc: "'ok' indicates the post request was successful"
@@ -9,14 +9,14 @@ Arguments:
9
9
  type: Object
10
10
  properties:
11
11
  material_family_id:
12
- type: Integer
12
+ type: ObjectId
13
13
  desc: "Required: The Material Family ID to get the input groups from."
14
14
 
15
15
  SimpleInputGroup:
16
16
  type: Object
17
17
  properties:
18
18
  input_group_id:
19
- type: Integer
19
+ type: ObjectId
20
20
  desc: "The unique integer ID of the input group. Used for joining and identification elsewhere"
21
21
  name:
22
22
  type: String
@@ -19,39 +19,26 @@ InputToCreate:
19
19
  name:
20
20
  type: String
21
21
  material_family_ids:
22
- type: List<Integer>
22
+ type: List<ObjectId>
23
23
  desc: "The list of material families to add the ingredient to. This must be non-empty"
24
24
  quantity_type:
25
- type: Union<Literal<'numeric'>, Literal<'text'>>
25
+ type: Union<Literal<inputs.IngredientQuantityType.numeric>, Literal<inputs.IngredientQuantityType.text>>
26
26
  desc: "The quantity type of the input. Always numeric for standard inputs"
27
27
  type:
28
- type: Union<Literal<'ingredient'>, Literal<'process_parameter'>>
28
+ type: Union<Literal<inputs.IngredientType.ingredient>, Literal<inputs.IngredientType.process_parameter>>
29
29
  desc: "The type of the input, E.g. ingredient, process parameter"
30
30
  attributes?:
31
- type: List<InputAttributeValue>
31
+ type: List<input_attributes.InputAttributeValue>
32
32
  desc: "The attributes of the input"
33
33
  category_id?:
34
- type: Integer
34
+ type: ObjectId
35
35
  desc: The unique identifier for the category to set for the input
36
36
 
37
- InputAttributeValue:
38
- type: Object
39
- properties:
40
- attribute_id:
41
- type: Integer
42
- desc: "A unique identifier for the attribute."
43
- quantity_dec?:
44
- type: Decimal
45
- desc: "The value for the metadata, if it is of numeric type"
46
- quantity_json?:
47
- type: JsonValue
48
- desc: "The value for the metadata, if it is not of numeric type"
49
-
50
37
  InputSimple:
51
38
  type: Object
52
39
  properties:
53
40
  input_id:
54
- type: Integer
41
+ type: ObjectId
55
42
  desc: "A unique identifier for the id"
56
43
 
57
44
  Data: