Skip to content

Commit bf70ed1

Browse files
authored
Merge pull request #3144 from effigies/bp/1.3.x/gh-3143
Backport: gh-3143 to 1.3.x branch
2 parents 990f3fa + 3c9a239 commit bf70ed1

File tree

3 files changed

+54
-6
lines changed

3 files changed

+54
-6
lines changed

nipype/info.py

+1
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,7 @@ def get_nipype_gitversion():
177177
'pytest',
178178
'pytest-cov',
179179
'pytest-env',
180+
"pytest-timeout",
180181
]
181182

182183
EXTRA_REQUIRES = {

nipype/pipeline/engine/nodes.py

+33-6
Original file line numberDiff line numberDiff line change
@@ -1290,12 +1290,39 @@ def _run_interface(self, execute=True, updatehash=False):
12901290
nodenames = [nnametpl.format(i) for i in range(nitems)]
12911291

12921292
# Run mapnode
1293-
result = self._collate_results(
1294-
_node_runner(
1295-
self._make_nodes(cwd),
1296-
updatehash=updatehash,
1297-
stop_first=str2bool(
1298-
self.config['execution']['stop_on_first_crash'])))
1293+
outdir = self.output_dir()
1294+
result = InterfaceResult(
1295+
interface=self._interface.__class__,
1296+
runtime=Bunch(
1297+
cwd=outdir,
1298+
returncode=1,
1299+
environ=dict(os.environ),
1300+
hostname=socket.gethostname(),
1301+
),
1302+
inputs=self._interface.inputs.get_traitsfree(),
1303+
)
1304+
try:
1305+
result = self._collate_results(
1306+
_node_runner(
1307+
self._make_nodes(cwd),
1308+
updatehash=updatehash,
1309+
stop_first=str2bool(
1310+
self.config["execution"]["stop_on_first_crash"]
1311+
),
1312+
)
1313+
)
1314+
except Exception as msg:
1315+
result.runtime.stderr = "%s\n\n%s".format(
1316+
getattr(result.runtime, "stderr", ""), msg
1317+
)
1318+
_save_resultfile(
1319+
result,
1320+
outdir,
1321+
self.name,
1322+
rebase=str2bool(self.config["execution"]["use_relative_paths"]),
1323+
)
1324+
raise
1325+
12991326
# And store results
13001327
_save_resultfile(result, cwd, self.name, rebase=False)
13011328
# remove any node directories no longer required

nipype/pipeline/engine/tests/test_nodes.py

+20
Original file line numberDiff line numberDiff line change
@@ -305,3 +305,23 @@ def test_outputmultipath_collapse(tmpdir):
305305
assert ifres.outputs.out == [4]
306306
assert ndres.outputs.out == [4]
307307
assert select_nd.result.outputs.out == [4]
308+
309+
310+
@pytest.mark.timeout(30)
311+
def test_mapnode_single(tmpdir):
312+
tmpdir.chdir()
313+
314+
def _producer(num=1, deadly_num=7):
315+
if num == deadly_num:
316+
raise RuntimeError("Got the deadly num (%d)." % num)
317+
return num + 1
318+
319+
pnode = pe.MapNode(
320+
niu.Function(function=_producer), name="ProducerNode", iterfield=["num"]
321+
)
322+
pnode.inputs.num = [7]
323+
wf = pe.Workflow(name="PC_Workflow")
324+
wf.add_nodes([pnode])
325+
wf.base_dir = os.path.abspath("./test_output")
326+
with pytest.raises(RuntimeError):
327+
wf.run(plugin="MultiProc")

0 commit comments

Comments
 (0)