Skip to content

Commit 11fd827

Browse files
authored
Merge pull request #21694 from mvdbeek/claude/galaxy-issue-20160-MHJ0b
Break dereference_input into HDA and HDCA variants
2 parents a2a0190 + 040ca0f commit 11fd827

File tree

3 files changed

+43
-20
lines changed

3 files changed

+43
-20
lines changed

lib/galaxy/managers/hdas.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -355,23 +355,30 @@ def _set_permissions(self, trans, hda, role_ids_dict):
355355
raise exceptions.RequestParameterInvalidException(error)
356356

357357

358-
def dereference_input(
358+
def dereference_input_to_hda(
359359
trans: ProvidesHistoryContext,
360-
data_request: Union[DataRequestUri, FileRequestUri, DataRequestCollectionUri],
360+
data_request: Union[DataRequestUri, FileRequestUri],
361361
history: model.History,
362-
) -> Union[HistoryDatasetAssociation, HistoryDatasetCollectionAssociation]:
362+
) -> HistoryDatasetAssociation:
363363
permissions = trans.app.security_agent.history_get_default_permissions(history)
364-
if isinstance(data_request, DataRequestCollectionUri):
365-
hdca = derefence_collection_to_model(trans.sa_session, trans.user, history, data_request)
366-
for hda in hdca.dataset_instances:
367-
trans.app.security_agent.set_all_dataset_permissions(hda.dataset, permissions, new=True, flush=False)
368-
return hdca
369364
hda = dereference_to_model(trans.sa_session, trans.user, history, data_request)
370365
trans.app.security_agent.set_all_dataset_permissions(hda.dataset, permissions, new=True, flush=False)
371366
trans.sa_session.commit()
372367
return hda
373368

374369

370+
def dereference_input_to_hdca(
371+
trans: ProvidesHistoryContext,
372+
data_request: DataRequestCollectionUri,
373+
history: model.History,
374+
) -> HistoryDatasetCollectionAssociation:
375+
permissions = trans.app.security_agent.history_get_default_permissions(history)
376+
hdca = derefence_collection_to_model(trans.sa_session, trans.user, history, data_request)
377+
for hda in hdca.dataset_instances:
378+
trans.app.security_agent.set_all_dataset_permissions(hda.dataset, permissions, new=True, flush=False)
379+
return hdca
380+
381+
375382
class HDAStorageCleanerManager(base.StorageCleanerManager):
376383
def __init__(self, hda_manager: HDAManager, dataset_manager: datasets.DatasetManager):
377384
self.hda_manager = hda_manager

lib/galaxy/managers/jobs.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@
5252
from galaxy.managers.context import ProvidesUserContext
5353
from galaxy.managers.datasets import DatasetManager
5454
from galaxy.managers.hdas import (
55-
dereference_input,
55+
dereference_input_to_hda,
56+
dereference_input_to_hdca,
5657
HDAManager,
5758
)
5859
from galaxy.managers.histories import HistoryManager
@@ -2135,12 +2136,11 @@ def dereference_collection_callback(data_request: DataRequestCollectionUri) -> D
21352136
if not history:
21362137
raise InconsistentDatabase("Tool request has no history associated")
21372138

2138-
hdca = dereference_input(trans, data_request, history)
2139-
assert isinstance(hdca, model.HistoryDatasetCollectionAssociation)
2139+
hdca = dereference_input_to_hdca(trans, data_request, history)
21402140

21412141
# we need the HDCA to have an ID - so we force a commit here - for
2142-
# consistency it would be great if this happened in the dereference_input
2143-
# since the HDA is committed in the other branch.
2142+
# consistency it would be great if this happened in dereference_input_to_hdca
2143+
# since the HDA is committed in dereference_input_to_hda.
21442144
history.add_pending_items()
21452145
trans.sa_session.commit()
21462146

@@ -2164,8 +2164,7 @@ def dereference_callback(data_request: DataRequestUri) -> DataRequestInternalHda
21642164
if not history:
21652165
raise InconsistentDatabase("Tool request has no history associated")
21662166

2167-
hda = dereference_input(trans, data_request, history)
2168-
assert isinstance(hda, model.HistoryDatasetAssociation)
2167+
hda = dereference_input_to_hda(trans, data_request, history)
21692168
new_hdas.append(DereferencedDatasetPair(hda, data_request))
21702169
return DataRequestInternalHda(id=hda.id, src="hda")
21712170

lib/galaxy/workflow/run_request.py

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,10 @@
1212

1313
from galaxy import exceptions
1414
from galaxy.exceptions.utils import validation_error_to_message_exception
15-
from galaxy.managers.hdas import dereference_input
15+
from galaxy.managers.hdas import (
16+
dereference_input_to_hda,
17+
dereference_input_to_hdca,
18+
)
1619
from galaxy.model import (
1720
EffectiveOutput,
1821
History,
@@ -26,7 +29,12 @@
2629
WorkflowRequestStepState,
2730
)
2831
from galaxy.model.base import ensure_object_added_to_session
29-
from galaxy.tool_util_models.parameters import DataOrCollectionRequestAdapter
32+
from galaxy.tool_util_models.parameters import (
33+
DataOrCollectionRequestAdapter,
34+
DataRequestCollectionUri,
35+
DataRequestUri,
36+
FileRequestUri,
37+
)
3038
from galaxy.tools.parameters.basic import ParameterValueError
3139
from galaxy.tools.parameters.meta import expand_workflow_inputs
3240
from galaxy.tools.parameters.workflow_utils import NO_REPLACEMENT
@@ -421,11 +429,20 @@ def build_workflow_run_configs(
421429
content = app.dataset_collection_manager.get_dataset_collection_instance(
422430
trans, "history", data_request.id
423431
)
424-
elif data_request.src == "url" or data_request.class_ == "File" or data_request.class_ == "Collection":
425-
request_input = dereference_input(trans, data_request, history)
432+
elif isinstance(data_request, DataRequestCollectionUri):
433+
hdca_input = dereference_input_to_hdca(trans, data_request, history)
434+
added_to_history = True
435+
content = InputWithRequest(
436+
input=hdca_input,
437+
request=data_request.model_dump(mode="json"),
438+
)
439+
if not data_request.deferred:
440+
requires_materialization = True
441+
elif isinstance(data_request, (DataRequestUri, FileRequestUri)):
442+
hda_input = dereference_input_to_hda(trans, data_request, history)
426443
added_to_history = True
427444
content = InputWithRequest(
428-
input=request_input,
445+
input=hda_input,
429446
request=data_request.model_dump(mode="json"),
430447
)
431448
if not data_request.deferred:

0 commit comments

Comments
 (0)