Merge pull request #18249 from mvdbeek/fix_no_elements_exception_extract_dataset

[24.0] Raise exception when extracting dataset from collection without datasets
This commit is contained in:
John Chilton
2024-05-30 17:54:24 -04:00
committed by GitHub
2 changed files with 6 additions and 4 deletions
+1 -1
View File
@@ -6507,7 +6507,7 @@ class DatasetCollection(Base, Dictifiable, UsesAnnotations, Serializable):
return elements
@property
def first_dataset_element(self):
def first_dataset_element(self) -> Optional[HistoryDatasetAssociation]:
for element in self.elements:
if element.is_collection:
first_element = element.child_collection.first_dataset_element
+5 -3
View File
@@ -3355,18 +3355,20 @@ class ExtractDatasetCollectionTool(DatabaseOperationTool):
how = incoming["which"]["which_dataset"]
if how == "first":
extracted_element = collection.first_dataset_element
if not extracted_element:
raise exceptions.RequestParameterInvalidException("Input collection has no dataset elements.")
elif how == "by_identifier":
try:
extracted_element = collection[incoming["which"]["identifier"]]
except KeyError as e:
raise exceptions.MessageException(e.args[0])
raise exceptions.RequestParameterInvalidException(e.args[0])
elif how == "by_index":
try:
extracted_element = collection[int(incoming["which"]["index"])]
except KeyError as e:
raise exceptions.MessageException(e.args[0])
raise exceptions.RequestParameterInvalidException(e.args[0])
else:
raise exceptions.MessageException("Invalid tool parameters.")
raise exceptions.RequestParameterInvalidException("Invalid tool parameters.")
extracted = extracted_element.element_object
extracted_o = extracted.copy(
copy_tags=extracted.tags, new_name=extracted_element.element_identifier, flush=False