UncountablePythonSDK 0.0.5__py3-none-any.whl → 0.0.7__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 (71) hide show
  1. {UncountablePythonSDK-0.0.5.dist-info → UncountablePythonSDK-0.0.7.dist-info}/METADATA +1 -1
  2. UncountablePythonSDK-0.0.7.dist-info/RECORD +119 -0
  3. {UncountablePythonSDK-0.0.5.dist-info → UncountablePythonSDK-0.0.7.dist-info}/WHEEL +1 -1
  4. pkgs/type_spec/builder.py +0 -61
  5. pkgs/type_spec/config.py +3 -0
  6. pkgs/type_spec/emit_open_api.py +33 -22
  7. pkgs/type_spec/emit_open_api_util.py +6 -2
  8. pkgs/type_spec/emit_python.py +3 -2
  9. type_spec/external/api/entity/create_entities.yaml +33 -0
  10. type_spec/external/api/entity/{external_create_entity.yaml → create_entity.yaml} +4 -14
  11. type_spec/external/api/entity/{external_get_entities_data.yaml → get_entities_data.yaml} +6 -6
  12. type_spec/external/api/entity/{external_list_entities.yaml → list_entities.yaml} +6 -6
  13. type_spec/external/api/entity/{external_resolve_entity_ids.yaml → resolve_entity_ids.yaml} +2 -2
  14. type_spec/external/api/entity/{external_set_values.yaml → set_values.yaml} +4 -4
  15. type_spec/external/api/input_groups/{external_get_input_group_names.yaml → get_input_group_names.yaml} +2 -2
  16. type_spec/external/api/inputs/{external_create_inputs.yaml → create_inputs.yaml} +4 -4
  17. type_spec/external/api/inputs/{external_get_input_data.yaml → get_input_data.yaml} +10 -10
  18. type_spec/external/api/inputs/{external_get_input_names.yaml → get_input_names.yaml} +2 -2
  19. type_spec/external/api/inputs/{external_get_inputs_data.yaml → get_inputs_data.yaml} +10 -10
  20. type_spec/external/api/inputs/{external_set_input_attribute_values.yaml → set_input_attribute_values.yaml} +2 -2
  21. type_spec/external/api/outputs/{external_get_output_data.yaml → get_output_data.yaml} +10 -10
  22. type_spec/external/api/outputs/{external_get_output_names.yaml → get_output_names.yaml} +2 -2
  23. type_spec/external/api/project/{external_get_projects.yaml → get_projects.yaml} +4 -4
  24. type_spec/external/api/project/{external_get_projects_data.yaml → get_projects_data.yaml} +8 -8
  25. type_spec/external/api/recipe_metadata/{external_get_recipe_metadata_data.yaml → get_recipe_metadata_data.yaml} +2 -2
  26. type_spec/external/api/recipes/{external_create_recipes.yaml → create_recipes.yaml} +6 -6
  27. type_spec/external/api/recipes/{external_get_curve.yaml → get_curve.yaml} +5 -5
  28. type_spec/external/api/recipes/{external_get_recipe_calculations.yaml → get_recipe_calculations.yaml} +4 -4
  29. type_spec/external/api/recipes/get_recipe_links.yaml +26 -0
  30. type_spec/external/api/recipes/{external_get_recipe_names.yaml → get_recipe_names.yaml} +2 -2
  31. type_spec/external/api/recipes/{external_get_recipe_output_metadata.yaml → get_recipe_output_metadata.yaml} +4 -4
  32. type_spec/external/api/recipes/{external_get_recipes_data.yaml → get_recipes_data.yaml} +38 -38
  33. uncountable/types/__init__.py +60 -54
  34. uncountable/types/api/entity/{external_create_entities.py → create_entities.py} +5 -25
  35. uncountable/types/api/entity/{external_create_entity.py → create_entity.py} +7 -13
  36. uncountable/types/api/entity/{external_get_entities_data.py → get_entities_data.py} +9 -9
  37. uncountable/types/api/entity/{external_list_entities.py → list_entities.py} +9 -9
  38. uncountable/types/api/entity/{external_resolve_entity_ids.py → resolve_entity_ids.py} +3 -3
  39. uncountable/types/api/entity/{external_set_values.py → set_values.py} +6 -6
  40. uncountable/types/api/input_groups/{external_get_input_group_names.py → get_input_group_names.py} +3 -3
  41. uncountable/types/api/inputs/{external_create_inputs.py → create_inputs.py} +6 -6
  42. uncountable/types/api/inputs/{external_get_input_data.py → get_input_data.py} +15 -15
  43. uncountable/types/api/inputs/{external_get_input_names.py → get_input_names.py} +3 -3
  44. uncountable/types/api/inputs/{external_get_inputs_data.py → get_inputs_data.py} +15 -15
  45. uncountable/types/api/inputs/{external_set_input_attribute_values.py → set_input_attribute_values.py} +3 -3
  46. uncountable/types/api/outputs/{external_get_output_data.py → get_output_data.py} +15 -15
  47. uncountable/types/api/outputs/{external_get_output_names.py → get_output_names.py} +3 -3
  48. uncountable/types/api/project/{external_get_projects.py → get_projects.py} +6 -6
  49. uncountable/types/api/project/{external_get_projects_data.py → get_projects_data.py} +12 -12
  50. uncountable/types/api/recipe_metadata/{external_get_recipe_metadata_data.py → get_recipe_metadata_data.py} +3 -3
  51. uncountable/types/api/recipes/{external_create_recipes.py → create_recipes.py} +9 -9
  52. uncountable/types/api/recipes/{external_get_curve.py → get_curve.py} +7 -7
  53. uncountable/types/api/recipes/{external_get_recipe_calculations.py → get_recipe_calculations.py} +6 -6
  54. uncountable/types/api/recipes/get_recipe_links.py +36 -0
  55. uncountable/types/api/recipes/{external_get_recipe_names.py → get_recipe_names.py} +3 -3
  56. uncountable/types/api/recipes/{external_get_recipe_output_metadata.py → get_recipe_output_metadata.py} +6 -6
  57. uncountable/types/api/recipes/{external_get_recipes_data.py → get_recipes_data.py} +57 -57
  58. uncountable/types/client_base.py +220 -217
  59. uncountable/types/entity.py +271 -0
  60. uncountable/types/field_values.py +28 -0
  61. uncountable/types/{api/recipes/external_get_recipe_links.py → recipe_links.py} +4 -25
  62. UncountablePythonSDK-0.0.5.dist-info/RECORD +0 -116
  63. type_spec/external/api/entity/external_create_entities.yaml +0 -55
  64. type_spec/external/api/recipes/external_get_recipe_links.yaml +0 -61
  65. {UncountablePythonSDK-0.0.5.dist-info → UncountablePythonSDK-0.0.7.dist-info}/top_level.txt +0 -0
  66. /type_spec/external/api/outputs/{external_resolve_output_conditions.yaml → resolve_output_conditions.yaml} +0 -0
  67. /type_spec/external/api/recipes/{external_set_recipe_inputs.yaml → set_recipe_inputs.yaml} +0 -0
  68. /type_spec/external/api/recipes/{external_set_recipe_outputs.yaml → set_recipe_outputs.yaml} +0 -0
  69. /uncountable/types/api/outputs/{external_resolve_output_conditions.py → resolve_output_conditions.py} +0 -0
  70. /uncountable/types/api/recipes/{external_set_recipe_inputs.py → set_recipe_inputs.py} +0 -0
  71. /uncountable/types/api/recipes/{external_set_recipe_outputs.py → set_recipe_outputs.py} +0 -0
@@ -0,0 +1,271 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
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
+ from dataclasses import dataclass
12
+ from pkgs.serialization import serial_string_enum
13
+
14
+ __all__: list[str] = [
15
+ "Entity",
16
+ "EntityType",
17
+ ]
18
+
19
+
20
+ # DO NOT MODIFY -- This file is generated by type_spec
21
+ @serial_string_enum(
22
+ labels={
23
+ "analytical_method": "Analytical Method",
24
+ "analytical_method_category": "Analytical Method Category",
25
+ "annotation_type": "Annotation Type",
26
+ "approval": "Approval",
27
+ "calculation": "Calculation",
28
+ "calendar": "Calendar",
29
+ "calendar_event": "Calendar Event",
30
+ "certification": "Certification",
31
+ "comment": "Comment",
32
+ "comment_thread": "Comment Thread",
33
+ "condition_parameter": "Condition Parameter",
34
+ "condition_parameter_mat_family": "Condition Parameter Material Family",
35
+ "constraint": "Constraint",
36
+ "constraint_set": "Constraint Set",
37
+ "curve_settings": "Curve Settings",
38
+ "custom_entity": "Custom Entity",
39
+ "doe_run": "Suggest Experiments",
40
+ "entities_viewed": "Entities Viewed",
41
+ "entity_field": "Field",
42
+ "entity_field_audit_log": "Entity Field Audit Log",
43
+ "entity_phase_event": "Entity Phase Event",
44
+ "entity_tag": "Entity Tag",
45
+ "equipment": "Equipment",
46
+ "equipment_type": "Equipment Type",
47
+ "experiment_group": "Experiment Group",
48
+ "experiment_group_type": "Experiment Group Type",
49
+ "favorite_link": "Favorite Link",
50
+ "field_option_set": "Field Option Set",
51
+ "file_folder": "File Folder",
52
+ "file_folder_membership": "File Folder Membership",
53
+ "goal": "Goal",
54
+ "ingredient": "Ingredient",
55
+ "ingredient_attribute": "Ingredient Attribute",
56
+ "ingredient_attribute_category": "Ingredient Attribute Category",
57
+ "ingredient_category": "Ingredient Category",
58
+ "ingredient_category_all": "Ingredient Category",
59
+ "ingredient_lot": "Ingredient Lot",
60
+ "ingredient_role": "Ingredient Role",
61
+ "ingredient_tag": "Ingredient Subcategory",
62
+ "input_group": "Input Group",
63
+ "inv_local_locations": "Inventory Location",
64
+ "inventory_amount": "Inventory Amount",
65
+ "lab_location": "Lab Location",
66
+ "lab_request": "Lab Request",
67
+ "license": "License",
68
+ "maintenance_schedule": "Maintenance Schedule",
69
+ "material_family": "Material Family",
70
+ "ml_job": "Batch Processing Job",
71
+ "naming_scheme": "Naming Scheme",
72
+ "naming_counter": "Naming Counter",
73
+ "notebook": "Notebook",
74
+ "notebook_cell": "Notebook Cell",
75
+ "output": "Output",
76
+ "output_calculation_entity_mapping": "Output Calculation Entity Mapping",
77
+ "output_category_all": "Output Category",
78
+ "output_condition": "Output Condition",
79
+ "output_default_condition": "Output Default Condition",
80
+ "output_condition_parameter": "Output Condition Parameter",
81
+ "output_condition_parameter_analytical_method_category": "Output Condition Parameter Analytical Method Category",
82
+ "output_condition_parameter_analytical_method": "Output Condition Parameter Analytical Method",
83
+ "output_group": "Output Group",
84
+ "recipe_output_metadata": "Recipe Output Metadata",
85
+ "permission": "Permission",
86
+ "phase_workflow": "Phase Workflow",
87
+ "predictive_model": "Predictive Model",
88
+ "product": "Product",
89
+ "project": "Project",
90
+ "recipe": "Experiment",
91
+ "recipe_calculation": "Recipe Calculation",
92
+ "recipe_permission_view": "Recipe Permission View",
93
+ "recipe_project": "Recipe Project",
94
+ "recipe_check": "Experiment Check",
95
+ "recipe_export": "Recipe Export",
96
+ "recipe_ingredients_compounded": "Recipe Ingredients Compounded",
97
+ "recipe_ingredients_compounded_calculation": "Recipe Ingredients Compounded Caclulation",
98
+ "recipe_step": "Recipe Step",
99
+ "recipe_tag": "Recipe Tag",
100
+ "recipe_metadata": "Experiment Metadata",
101
+ "review": "Review",
102
+ "review_entity_user_status": "Review Entity User Status",
103
+ "review_user": "Review User",
104
+ "rlw_phase": "Phase",
105
+ "rlw_trigger_set": "Trigger Set",
106
+ "safety_data_sheet": "Safety Data Sheet",
107
+ "scheduled_notification": "Scheduled Notification",
108
+ "specs": "Spec",
109
+ "split_template": "Split Template",
110
+ "structured_loading_user_config": "List Config",
111
+ "task": "Task",
112
+ "task_board": "Task Board",
113
+ "template": "Template",
114
+ "timesheet_entry": "Timesheet Entry",
115
+ "training_run": "Analyze Experiment",
116
+ "training_set": "Training Set",
117
+ "units": "Units",
118
+ "user_favorite": "User Favorite",
119
+ "user": "User",
120
+ "user_certification": "User Certification",
121
+ "user_group": "User Group",
122
+ "user_list_set": "User List Set",
123
+ "webhook": "Webhook",
124
+ "webhook_event": "Webhook Event",
125
+ "workflow": "Workflow",
126
+ "workflow_step": "Workflow Step",
127
+ "workflow_variant": "Workflow Variant",
128
+ "platform_notification": "Platform Notification",
129
+ "inventory_location_type": "Inventory Location Type",
130
+ "entity_definition": "Entity Definition",
131
+ "phase_transition": "Phase Transition",
132
+ "public_data_entity_link": "Public Data Entity Link",
133
+ "public_data_sourced_output": "ChemQuery Property",
134
+ "public_data_sourced_project": "ChemQuery Category",
135
+ "public_data_sourced_recipe": "ChemQuery Product",
136
+ "public_data_sourced_recipe_project": "ChemQuery Product Category",
137
+ "public_data_sourced_recipe_metadata": "ChemQuery Product Information",
138
+ "public_data_sourced_units": "ChemQuery Units",
139
+ "public_data_sourced_condition_parameter": "ChemQuery Condition Parameter",
140
+ "public_data_sourced_company": "ChemQuery Company",
141
+ "uploader": "Uploader",
142
+ },
143
+ )
144
+ class EntityType(StrEnum):
145
+ ANALYTICAL_METHOD = "analytical_method"
146
+ ANALYTICAL_METHOD_CATEGORY = "analytical_method_category"
147
+ ANNOTATION_TYPE = "annotation_type"
148
+ APPROVAL = "approval"
149
+ CALCULATION = "calculation"
150
+ CALENDAR = "calendar"
151
+ CALENDAR_EVENT = "calendar_event"
152
+ CERTIFICATION = "certification"
153
+ COMMENT = "comment"
154
+ COMMENT_THREAD = "comment_thread"
155
+ CONDITION_PARAMETER = "condition_parameter"
156
+ CONDITION_PARAMETER_MAT_FAMILY = "condition_parameter_mat_family"
157
+ CONSTRAINT = "constraint"
158
+ CONSTRAINT_SET = "constraint_set"
159
+ CURVE_SETTINGS = "curve_settings"
160
+ CUSTOM_ENTITY = "custom_entity"
161
+ DOE_RUN = "doe_run"
162
+ ENTITIES_VIEWED = "entities_viewed"
163
+ ENTITY_FIELD = "entity_field"
164
+ ENTITY_FIELD_AUDIT_LOG = "entity_field_audit_log"
165
+ ENTITY_PHASE_EVENT = "entity_phase_event"
166
+ ENTITY_TAG = "entity_tag"
167
+ EQUIPMENT = "equipment"
168
+ EQUIPMENT_TYPE = "equipment_type"
169
+ EXPERIMENT_GROUP = "experiment_group"
170
+ EXPERIMENT_GROUP_TYPE = "experiment_group_type"
171
+ FAVORITE_LINK = "favorite_link"
172
+ FIELD_OPTION_SET = "field_option_set"
173
+ FILE_FOLDER = "file_folder"
174
+ FILE_FOLDER_MEMBERSHIP = "file_folder_membership"
175
+ GOAL = "goal"
176
+ INGREDIENT = "ingredient"
177
+ INGREDIENT_ATTRIBUTE = "ingredient_attribute"
178
+ INGREDIENT_ATTRIBUTE_CATEGORY = "ingredient_attribute_category"
179
+ INGREDIENT_CATEGORY = "ingredient_category"
180
+ INGREDIENT_CATEGORY_ALL = "ingredient_category_all"
181
+ INGREDIENT_LOT = "ingredient_lot"
182
+ INGREDIENT_ROLE = "ingredient_role"
183
+ INGREDIENT_TAG = "ingredient_tag"
184
+ INPUT_GROUP = "input_group"
185
+ INV_LOCAL_LOCATIONS = "inv_local_locations"
186
+ INVENTORY_AMOUNT = "inventory_amount"
187
+ LAB_LOCATION = "lab_location"
188
+ LAB_REQUEST = "lab_request"
189
+ LICENSE = "license"
190
+ MAINTENANCE_SCHEDULE = "maintenance_schedule"
191
+ MATERIAL_FAMILY = "material_family"
192
+ ML_JOB = "ml_job"
193
+ NAMING_SCHEME = "naming_scheme"
194
+ NAMING_COUNTER = "naming_counter"
195
+ NOTEBOOK = "notebook"
196
+ NOTEBOOK_CELL = "notebook_cell"
197
+ OUTPUT = "output"
198
+ OUTPUT_CALCULATION_ENTITY_MAPPING = "output_calculation_entity_mapping"
199
+ OUTPUT_CATEGORY_ALL = "output_category_all"
200
+ OUTPUT_CONDITION = "output_condition"
201
+ OUTPUT_DEFAULT_CONDITION = "output_default_condition"
202
+ OUTPUT_CONDITION_PARAMETER = "output_condition_parameter"
203
+ OUTPUT_CONDITION_PARAMETER_ANALYTICAL_METHOD_CATEGORY = "output_condition_parameter_analytical_method_category"
204
+ OUTPUT_CONDITION_PARAMETER_ANALYTICAL_METHOD = "output_condition_parameter_analytical_method"
205
+ OUTPUT_GROUP = "output_group"
206
+ RECIPE_OUTPUT_METADATA = "recipe_output_metadata"
207
+ PERMISSION = "permission"
208
+ PHASE_WORKFLOW = "phase_workflow"
209
+ PREDICTIVE_MODEL = "predictive_model"
210
+ PRODUCT = "product"
211
+ PROJECT = "project"
212
+ RECIPE = "recipe"
213
+ RECIPE_CALCULATION = "recipe_calculation"
214
+ RECIPE_PERMISSION_VIEW = "recipe_permission_view"
215
+ RECIPE_PROJECT = "recipe_project"
216
+ RECIPE_CHECK = "recipe_check"
217
+ RECIPE_EXPORT = "recipe_export"
218
+ RECIPE_INGREDIENTS_COMPOUNDED = "recipe_ingredients_compounded"
219
+ RECIPE_INGREDIENTS_COMPOUNDED_CALCULATION = "recipe_ingredients_compounded_calculation"
220
+ RECIPE_STEP = "recipe_step"
221
+ RECIPE_TAG = "recipe_tag"
222
+ RECIPE_METADATA = "recipe_metadata"
223
+ REVIEW = "review"
224
+ REVIEW_ENTITY_USER_STATUS = "review_entity_user_status"
225
+ REVIEW_USER = "review_user"
226
+ RLW_PHASE = "rlw_phase"
227
+ RLW_TRIGGER_SET = "rlw_trigger_set"
228
+ SAFETY_DATA_SHEET = "safety_data_sheet"
229
+ SCHEDULED_NOTIFICATION = "scheduled_notification"
230
+ SPECS = "specs"
231
+ SPLIT_TEMPLATE = "split_template"
232
+ STRUCTURED_LOADING_USER_CONFIG = "structured_loading_user_config"
233
+ TASK = "task"
234
+ TASK_BOARD = "task_board"
235
+ TEMPLATE = "template"
236
+ TIMESHEET_ENTRY = "timesheet_entry"
237
+ TRAINING_RUN = "training_run"
238
+ TRAINING_SET = "training_set"
239
+ UNITS = "units"
240
+ USER_FAVORITE = "user_favorite"
241
+ USER = "user"
242
+ USER_CERTIFICATION = "user_certification"
243
+ USER_GROUP = "user_group"
244
+ USER_LIST_SET = "user_list_set"
245
+ WEBHOOK = "webhook"
246
+ WEBHOOK_EVENT = "webhook_event"
247
+ WORKFLOW = "workflow"
248
+ WORKFLOW_STEP = "workflow_step"
249
+ WORKFLOW_VARIANT = "workflow_variant"
250
+ PLATFORM_NOTIFICATION = "platform_notification"
251
+ INVENTORY_LOCATION_TYPE = "inventory_location_type"
252
+ ENTITY_DEFINITION = "entity_definition"
253
+ PHASE_TRANSITION = "phase_transition"
254
+ PUBLIC_DATA_ENTITY_LINK = "public_data_entity_link"
255
+ PUBLIC_DATA_SOURCED_OUTPUT = "public_data_sourced_output"
256
+ PUBLIC_DATA_SOURCED_PROJECT = "public_data_sourced_project"
257
+ PUBLIC_DATA_SOURCED_RECIPE = "public_data_sourced_recipe"
258
+ PUBLIC_DATA_SOURCED_RECIPE_PROJECT = "public_data_sourced_recipe_project"
259
+ PUBLIC_DATA_SOURCED_RECIPE_METADATA = "public_data_sourced_recipe_metadata"
260
+ PUBLIC_DATA_SOURCED_UNITS = "public_data_sourced_units"
261
+ PUBLIC_DATA_SOURCED_CONDITION_PARAMETER = "public_data_sourced_condition_parameter"
262
+ PUBLIC_DATA_SOURCED_COMPANY = "public_data_sourced_company"
263
+ UPLOADER = "uploader"
264
+
265
+
266
+ # DO NOT MODIFY -- This file is generated by type_spec
267
+ @dataclass(kw_only=True)
268
+ class Entity:
269
+ id: int
270
+ type: EntityType
271
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -0,0 +1,28 @@
1
+ # DO NOT MODIFY -- This file is generated by type_spec
2
+ # flake8: noqa: F821
3
+ # ruff: noqa: E402
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 dataclasses import dataclass
11
+ from pkgs.serialization import serial_class
12
+ from . import base as base_t
13
+
14
+ __all__: list[str] = [
15
+ "FieldRefNameValue",
16
+ ]
17
+
18
+
19
+ # DO NOT MODIFY -- This file is generated by type_spec
20
+ @serial_class(
21
+ unconverted_values={"value"},
22
+ )
23
+ @dataclass(kw_only=True)
24
+ class FieldRefNameValue:
25
+ field_ref_name: str
26
+ value: base_t.JsonValue
27
+ row_index: typing.Optional[typing.Optional[int]] = None
28
+ # DO NOT MODIFY -- This file is generated by type_spec
@@ -12,17 +12,10 @@ from dataclasses import dataclass
12
12
  from pkgs.serialization import serial_string_enum
13
13
 
14
14
  __all__: list[str] = [
15
- "Arguments",
16
- "Data",
17
- "ENDPOINT_METHOD",
18
- "ENDPOINT_PATH",
19
- "ExternalRecipeLink",
20
- "ExternalRecipeLinkType",
15
+ "RecipeLink",
16
+ "RecipeLinkType",
21
17
  ]
22
18
 
23
- ENDPOINT_METHOD = "GET"
24
- ENDPOINT_PATH = "api/external/recipes/external_get_recipe_links"
25
-
26
19
 
27
20
  # DO NOT MODIFY -- This file is generated by type_spec
28
21
  @serial_string_enum(
@@ -36,7 +29,7 @@ ENDPOINT_PATH = "api/external/recipes/external_get_recipe_links"
36
29
  "previous_experiment": "Previous Sample",
37
30
  },
38
31
  )
39
- class ExternalRecipeLinkType(StrEnum):
32
+ class RecipeLinkType(StrEnum):
40
33
  USER_LINK = "user_link"
41
34
  CHILD = "child"
42
35
  SELF = "self"
@@ -46,25 +39,11 @@ class ExternalRecipeLinkType(StrEnum):
46
39
  PREVIOUS_EXPERIMENT = "previous_experiment"
47
40
 
48
41
 
49
- # DO NOT MODIFY -- This file is generated by type_spec
50
- @dataclass(kw_only=True)
51
- class Arguments:
52
- recipe_ids: list[int]
53
- depth: int = 1
54
- link_types: typing.Optional[list[ExternalRecipeLinkType]]
55
-
56
-
57
42
  # DO NOT MODIFY -- This file is generated by type_spec
58
43
  @dataclass(kw_only=True, frozen=True, eq=True)
59
- class ExternalRecipeLink:
44
+ class RecipeLink:
60
45
  recipe_id_from: int
61
46
  recipe_id_to: int
62
47
  link_type: str
63
48
  name: str
64
-
65
-
66
- # DO NOT MODIFY -- This file is generated by type_spec
67
- @dataclass(kw_only=True)
68
- class Data:
69
- recipe_links: list[ExternalRecipeLink]
70
49
  # DO NOT MODIFY -- This file is generated by type_spec
@@ -1,116 +0,0 @@
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=0jXJ_gUNYj9dxpuyFl64o-zRVDwWBiSC9mXKdP53i6I,14446
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=0r1JF2yt6bF42nVWWnhk5Ohdi1O7K-ghEAIl1SyjmWU,803
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=rZ5IH2BB4L7dyuWFp-zL3O6pNhftQa382SwshJ9Zdmg,5041
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=lvpaS0p9v5kdr1I_bfEANwAKpcD5dJQBMFlz9AuCqPA,41260
21
- pkgs/type_spec/config.py,sha256=8Vai7eqiSo9sg343xwQyIvThNDFrj966Qvj-EYaUZ1E,4821
22
- pkgs/type_spec/emit_io_ts.py,sha256=gCEfS81w_ifqjLVJ3_cpy9Gq03o6H5nEsh35WAkqGGE,5606
23
- pkgs/type_spec/emit_open_api.py,sha256=Gz_i1CGcXqg4dgHYPHAt6iMs6DshYsKkmZQlrjLhrkQ,16799
24
- pkgs/type_spec/emit_open_api_util.py,sha256=t6WaUDUNrwxF0A03Mv1GIfXOS7rxTVtr72jWJv61az0,1972
25
- pkgs/type_spec/emit_python.py,sha256=xVFTKVVe54ZCnok2G7-KMcfO9nOCI_eFF5XHiIRMNDU,35375
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=eJBYgKmu6twqParqWUIIywzx8RM-2dOIyoBLRMHMmqo,7414
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/external_create_entities.yaml,sha256=As1LvUmD4wRsHS12gV_CR-dNmsNl3Pn3zUocCKn3dXM,1614
43
- type_spec/external/api/entity/external_create_entity.yaml,sha256=DienP987sK_hqmvRKsjYIve9b1vuO_fBiRvC3VSN-_s,1442
44
- type_spec/external/api/entity/external_get_entities_data.yaml,sha256=g8ZMA9AwfYqIZi-vZdF1nxiWmmvcry6f873Qn3v2IRw,1518
45
- type_spec/external/api/entity/external_list_entities.yaml,sha256=APGk1eRvzAlmCHEr7wbn7A3lrzbYtISRtAp_lYWW2Lc,2078
46
- type_spec/external/api/entity/external_resolve_entity_ids.yaml,sha256=Pqh80tmdzpZnjaUGcKRweqT2t3vc_A6RhNZ168t3o0s,736
47
- type_spec/external/api/entity/external_set_values.yaml,sha256=0_US9LdwRiZs6qXNwCoIZEPxDhYUZQFMe6DrrLPljEs,1175
48
- type_spec/external/api/input_groups/external_get_input_group_names.yaml,sha256=pcHPRqjsLRezYOQgsJIJCPiIUw7q8LlGsjpdJAj6g_0,927
49
- type_spec/external/api/inputs/external_create_inputs.yaml,sha256=Wjc5pPnIBLoESpQ2dK5hG__OUdfTLM-HAFEcosZWUrQ,1890
50
- type_spec/external/api/inputs/external_get_input_data.yaml,sha256=YRlU71q8VnB3yjmWGdOsjEVi0iDZ7AF4vcu8s_m4gqI,4328
51
- type_spec/external/api/inputs/external_get_input_names.yaml,sha256=ZrQOhkdU9MFFUsyy16Jk2hRoKOxlurrTatkmlHp0LXw,1534
52
- type_spec/external/api/inputs/external_get_inputs_data.yaml,sha256=_xgKp-llWEgh60UHLLDOePWh3QKHSxWoWTILFm7lcPw,2836
53
- type_spec/external/api/inputs/external_set_input_attribute_values.yaml,sha256=wbUaQD068asB58qWZ0xm2q-QY2DEf2E3YngtIyEzpZ0,1165
54
- type_spec/external/api/outputs/external_get_output_data.yaml,sha256=QboSW7wm6XLVu8gyr5_n38L2iAZmy4wxzr5EtlIQTh4,3834
55
- type_spec/external/api/outputs/external_get_output_names.yaml,sha256=j8_mqy5GEyXKXBIPVVEs9tRB31INhlY4zXnCSh_MZbk,1348
56
- type_spec/external/api/outputs/external_resolve_output_conditions.yaml,sha256=lGrG6XPGiQtHx24GccPcO18xxAoMynTSC_2WwxCjFrc,1640
57
- type_spec/external/api/project/external_get_projects.yaml,sha256=kC2M7M586hHTLIbGLb3BoF4ROaPYH5UXUrnh6-Rlf2Q,1955
58
- type_spec/external/api/project/external_get_projects_data.yaml,sha256=m9ztPPRNsVRK-L0y3_u62c08Ka-Thf0MQXWVCDiE51g,2977
59
- type_spec/external/api/recipe_metadata/external_get_recipe_metadata_data.yaml,sha256=ErKOoczqbJEL2pnfsh0FB3Coiadj26aBzaOX7ObjpqI,1770
60
- type_spec/external/api/recipes/external_create_recipes.yaml,sha256=6WnJpYnRHw-LunKC8rOyo9ww1-kq5llHAT8G12gvaWM,1978
61
- type_spec/external/api/recipes/external_get_curve.yaml,sha256=07dPbqp1UsI98oxF2B2wiyGa40TCzTNGvgqCxR08LFA,1632
62
- type_spec/external/api/recipes/external_get_recipe_calculations.yaml,sha256=obBXODmHoY_WRmh_47CUuEE7DOZmFz_c2_dXO9HSeRw,1472
63
- type_spec/external/api/recipes/external_get_recipe_links.yaml,sha256=pTHtRE926y7OoUxeenXnI1j1m1oIrsFkNdM5W6qyEGM,1671
64
- type_spec/external/api/recipes/external_get_recipe_names.yaml,sha256=dqhgN7WAUgVxMIwW2BVR2bISTyQ4R791Zq_Hjc7INlg,910
65
- type_spec/external/api/recipes/external_get_recipe_output_metadata.yaml,sha256=xRCawzEwAmL-JEVq-L1meiXfz8XsLK5kPg3UHHPIN-o,1616
66
- type_spec/external/api/recipes/external_get_recipes_data.yaml,sha256=HAL_2qIBPwTi1eI2dKF1QSAluzEUMkgFtRoJyzho1t0,16595
67
- type_spec/external/api/recipes/external_set_recipe_inputs.yaml,sha256=i3G5IcdLNlhJI4F8Q4P7awRBrfDMMiutJg_zj1dvLPA,1446
68
- type_spec/external/api/recipes/external_set_recipe_outputs.yaml,sha256=REqgBpkoayIsP2TB_zmmOUYFWguLuef0N0imDQ4h2Sw,2002
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/types/__init__.py,sha256=ahYFlL7-vyTvEKCpWGw7rcyaOFykrcN6YNbYM3FZHDo,3501
74
- uncountable/types/base.py,sha256=7yMC3sCQ13wd92896Ga2XbZffCqq98SKv09rFGb1ulg,2682
75
- uncountable/types/client_base.py,sha256=YJGTR_x9P4YyXyvb2Co_r2cDgHGqB7ScC7dzF5ifS58,22178
76
- uncountable/types/api/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
77
- uncountable/types/api/batch/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
78
- uncountable/types/api/batch/execute_batch.py,sha256=cCZo_akwJR4_ET6oOBChdlrCQlxUw8V9i8tDpv7JTIc,1696
79
- uncountable/types/api/entity/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
80
- uncountable/types/api/entity/external_create_entities.py,sha256=xVQyuxqi8L0FKdeBVw9phJ30t6O9dVxiYm8sIl2chxQ,1779
81
- uncountable/types/api/entity/external_create_entity.py,sha256=uizkp2-_-cVqmtZLBolqAnuY6KH5iCpw1A8MgC5Y3og,1598
82
- uncountable/types/api/entity/external_get_entities_data.py,sha256=SymHKs-Jae6nw3iM1uQx3igtGXocQvTgsL5pVgACcPw,1572
83
- uncountable/types/api/entity/external_list_entities.py,sha256=VS969Ea5137w5wAygWiYzrA48ZVhm4jZf6BqOi5w1Qc,1614
84
- uncountable/types/api/entity/external_resolve_entity_ids.py,sha256=r4IfVWRk6vlKOWyGRgQ4bVMaDCAuQql1armg19TCAWo,1016
85
- uncountable/types/api/entity/external_set_values.py,sha256=9DBKtH-4u6bZaKQNZ4haTuj_9i43VYou-0vU1LMU1bA,1421
86
- uncountable/types/api/input_groups/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
87
- uncountable/types/api/input_groups/external_get_input_group_names.py,sha256=qVAcP0IOTz8Kt0jA3rQVqPnKdCX_8WO9RKr1wbqJLQk,1002
88
- uncountable/types/api/inputs/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
89
- uncountable/types/api/inputs/external_create_inputs.py,sha256=1IXPkPbK2m6751RLedpV7TNlVRbA9UA3TbOl_5CXe18,1884
90
- uncountable/types/api/inputs/external_get_input_data.py,sha256=8RA-HwKetcP4izGyqB79V855tXkwnM-vVU0MutWSNto,2404
91
- uncountable/types/api/inputs/external_get_input_names.py,sha256=X42CEWK2JFlAXNiLBsDBX2pyveVHc-jTBYKUYcuVHhg,1074
92
- uncountable/types/api/inputs/external_get_inputs_data.py,sha256=y2CX0vpKjgM6e2on6MNyBoY3zgr274ArYyE9cKSNHA0,2177
93
- uncountable/types/api/inputs/external_set_input_attribute_values.py,sha256=Li-RqckvIPaXwOe3HeQLM1NHXgFJtTkmkVbK-FtqEjw,1359
94
- uncountable/types/api/outputs/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
95
- uncountable/types/api/outputs/external_get_output_data.py,sha256=LfPwCyEIz6FnAA_XzT2thv2FM-hLncDcehGe6Rx_Jdo,2314
96
- uncountable/types/api/outputs/external_get_output_names.py,sha256=NcjRYva5n_4hf1EsaZyIGzuq8EEkzQkibanOdrl13Mk,1055
97
- uncountable/types/api/outputs/external_resolve_output_conditions.py,sha256=XZqUseXcGhApHmPm-2u7a37Y4blLRxoPoLhvYlBfCpI,1799
98
- uncountable/types/api/project/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
99
- uncountable/types/api/project/external_get_projects.py,sha256=Cv74ySF70Lnj_KvSEtTTAfdDRL0Fu64G_zpBE_i83WM,1282
100
- uncountable/types/api/project/external_get_projects_data.py,sha256=9rbLIgDBOMQ1Uk4ZMGzjduTHC6_4KfSsOxIUPQnFeN8,1907
101
- uncountable/types/api/recipe_metadata/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
102
- uncountable/types/api/recipe_metadata/external_get_recipe_metadata_data.py,sha256=gfHMIF1D1bwpnQNGR--rGqHssgwUiPLzyzlbZWsNtzE,1176
103
- uncountable/types/api/recipes/__init__.py,sha256=gCgbynxG3jA8FQHzercKtrHKHkiIKr8APdZYUniAor8,55
104
- uncountable/types/api/recipes/external_create_recipes.py,sha256=dw2Y6uJ124eY3hP5fXvRFcVZJjvBem5hU8xBtC7x0Y0,1837
105
- uncountable/types/api/recipes/external_get_curve.py,sha256=X0QLeVJP2drBtoXc_0NsBQ8C6nJCNI5056bdzgHLN_Q,1378
106
- uncountable/types/api/recipes/external_get_recipe_calculations.py,sha256=QM8NfXpDAb8h-_sOqMBCoyau6BtfHPolmSc0WGoGnBg,1508
107
- uncountable/types/api/recipes/external_get_recipe_links.py,sha256=k5-gFrKuB8AMnN9HqdRNlwq7dSPQKJSlCV1rusiqKUQ,1891
108
- uncountable/types/api/recipes/external_get_recipe_names.py,sha256=h9RJDo-ankKE67TuUAqhf_5k0O-iVoybIPZQkDQ82IU,955
109
- uncountable/types/api/recipes/external_get_recipe_output_metadata.py,sha256=l4oSSroCXzkZ4BJeJ8fxCUwNd456srSKNHma0TcTYjM,1581
110
- uncountable/types/api/recipes/external_get_recipes_data.py,sha256=tqNXajbPnxeajbIpLXTdPHcKdxwD3DVMyelhpsXu_Ek,7064
111
- uncountable/types/api/recipes/external_set_recipe_inputs.py,sha256=XCt4ZN__OqGkvdwh6C9tKbIwiEPeptnfQVAV2p0cGWs,1259
112
- uncountable/types/api/recipes/external_set_recipe_outputs.py,sha256=rCs1Gayxon8UY4lTHiErJOLVAVCdMaUsevBX-d1gpo4,1560
113
- UncountablePythonSDK-0.0.5.dist-info/METADATA,sha256=mvMSkqcd2VhCiGbpSRCyTanVkCKnxG3wCeBzyktk8So,1125
114
- UncountablePythonSDK-0.0.5.dist-info/WHEEL,sha256=oiQVh_5PnQM0E3gPdiz09WCNmwiHDMaGer_elqB3coM,92
115
- UncountablePythonSDK-0.0.5.dist-info/top_level.txt,sha256=8ga1DCSWt4Uc_XJ5cR0QrDQuyoeo2uoSzaAJdQT2KBo,36
116
- UncountablePythonSDK-0.0.5.dist-info/RECORD,,
@@ -1,55 +0,0 @@
1
- $endpoint:
2
- is_sdk: true
3
- method: post
4
- path: ${external}/entity/external_create_entities
5
- function: main.site.app.external.entity.create_entities.create_entities
6
- desc: "Creates new Uncountable entities"
7
-
8
- ExternalEntityFieldInitialValue:
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
- EntityToCreate:
22
- type: Object
23
- properties:
24
- field_values?:
25
- type: Optional<List<ExternalEntityFieldInitialValue>>
26
-
27
- Arguments:
28
- type: Object
29
- properties:
30
- definition_id:
31
- type: Integer
32
- desc: "Definition id for the entities to create"
33
- entity_type:
34
- type: Union<Literal<'lab_request'>, Literal<'approval'>, Literal<'custom_entity'>, Literal<'task'>, Literal<'project'>>
35
- desc: "The type of the entities to create"
36
- entities_to_create:
37
- type: List<EntityToCreate>
38
- desc: "A list of the entities to create"
39
-
40
- ExternalEntity:
41
- type: Object
42
- properties:
43
- id:
44
- type: Integer
45
- desc: "A unique identifier for the entity. Used in conjunction with entity type"
46
- type:
47
- type: String
48
- desc: "The type of entity"
49
-
50
- Data:
51
- type: Object
52
- properties:
53
- entities:
54
- type: List<ExternalEntity>
55
- desc: The entities created
@@ -1,61 +0,0 @@
1
- $endpoint:
2
- is_sdk: true
3
- method: get
4
- path: ${external}/recipes/external_get_recipe_links
5
- function: main.site.app.external.recipes.get_recipe_links.get_recipe_links
6
- desc: "Gets the links for the passed recipes"
7
-
8
- ExternalRecipeLinkType:
9
- type: StringEnum
10
- values:
11
- user_link:
12
- label: Manual Link
13
- child:
14
- label: "Test Sample"
15
- self:
16
- label: "Self Link"
17
- recipe_as_output:
18
- label: "Analytical Sample"
19
- control:
20
- label: "Control Link"
21
- intermediate_recipe:
22
- label: "Used as Component Link"
23
- previous_experiment:
24
- label: "Previous Sample"
25
-
26
- Arguments:
27
- type: Object
28
- properties:
29
- recipe_ids:
30
- type: List<Integer>
31
- desc: "Ids of the Recipes to retrieve links for"
32
- depth:
33
- type: Integer
34
- desc: "How many layers deep to look for links"
35
- default: 1
36
- link_types:
37
- type: Optional<List<ExternalRecipeLinkType>>
38
- desc: "Optional filter to only desired link types"
39
-
40
- ExternalRecipeLink:
41
- type: Object
42
- hashable: true
43
- properties:
44
- recipe_id_from:
45
- type: Integer
46
- desc: "Identifier for the recipe"
47
- recipe_id_to:
48
- type: Integer
49
- desc: "Identifier for the calculation"
50
- link_type:
51
- type: String
52
- desc: "The type of the link, e.g. child"
53
- name:
54
- type: String
55
- desc: "The name used for the link. Max 20"
56
-
57
- Data:
58
- type: Object
59
- properties:
60
- recipe_links:
61
- type: List<ExternalRecipeLink>