@@ -56,7 +56,15 @@ def _prepare_for_shell_task(task: dict, inputs: dict) -> dict:
5656 # Workaround starts here
5757 # This part is part of the workaround. We need to manually add the outputs from the task.
5858 # Because kwargs are not populated with outputs
59- default_outputs = {"remote_folder" , "remote_stash" , "retrieved" , "_outputs" , "_wait" , "stdout" , "stderr" }
59+ default_outputs = {
60+ "remote_folder" ,
61+ "remote_stash" ,
62+ "retrieved" ,
63+ "_outputs" ,
64+ "_wait" ,
65+ "stdout" ,
66+ "stderr" ,
67+ }
6068 task_outputs = set (task ["outputs" ].keys ())
6169 task_outputs = task_outputs .union (set (inputs .pop ("outputs" , [])))
6270 missing_outputs = task_outputs .difference (default_outputs )
@@ -105,6 +113,7 @@ def __init__(self, core_workflow: core.Workflow):
105113 for task in self ._core_workflow .tasks :
106114 if isinstance (task , core .ShellTask ):
107115 self ._set_shelljob_arguments (task )
116+ self ._set_shelljob_filenames (task )
108117
109118 # link wait on to workgraph tasks
110119 for task in self ._core_workflow .tasks :
@@ -238,6 +247,8 @@ def _create_shell_task_node(self, task: core.ShellTask):
238247 ]
239248 prepend_text = "\n " .join ([f"source { env_source_path } " for env_source_path in env_source_paths ])
240249 metadata ["options" ] = {"prepend_text" : prepend_text }
250+ # NOTE: Hardcoded for now, possibly make user-facing option
251+ metadata ["options" ]["use_symlinks" ] = True
241252
242253 ## computer
243254 if task .computer is not None :
@@ -292,7 +303,10 @@ def _link_input_node_to_shelltask(self, task: core.ShellTask, input_: core.Data)
292303 socket = getattr (workgraph_task .inputs .nodes , f"{ input_label } " )
293304 socket .value = self .data_from_core (input_ )
294305 elif isinstance (input_ , core .GeneratedData ):
295- self ._workgraph .add_link (self .socket_from_core (input_ ), workgraph_task .inputs [f"nodes.{ input_label } " ])
306+ self ._workgraph .add_link (
307+ self .socket_from_core (input_ ),
308+ workgraph_task .inputs [f"nodes.{ input_label } " ],
309+ )
296310 else :
297311 raise TypeError
298312
@@ -317,6 +331,23 @@ def _set_shelljob_arguments(self, task: core.ShellTask):
317331 _ , arguments = self .split_cmd_arg (task .resolve_ports (input_labels ))
318332 workgraph_task_arguments .value = arguments
319333
334+ def _set_shelljob_filenames (self , task : core .ShellTask ):
335+ """set AiiDA ShellJob filenames for AvailableData entities"""
336+
337+ filenames = {}
338+
339+ for input_ in task .input_data_nodes ():
340+ # Some empty lists appear here?
341+ if not input_ :
342+ continue
343+
344+ core_input = input_ [0 ]
345+ if isinstance (core_input , core .AvailableData ):
346+ filenames [core_input .name ] = Path (core_input .src ).name
347+
348+ workgraph_task = self .task_from_core (task )
349+ workgraph_task .inputs .filenames .value = filenames
350+
320351 def run (
321352 self ,
322353 inputs : None | dict [str , Any ] = None ,
0 commit comments