Skip to content

Commit db51634

Browse files
committed
fix: updated provenance support to use pypi prov package
1 parent 728585c commit db51634

File tree

3 files changed

+27
-15
lines changed

3 files changed

+27
-15
lines changed

nipype/pipeline/tests/test_utils.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,10 +335,11 @@ def test_provenance():
335335
out_dir = mkdtemp()
336336
metawf = pe.Workflow(name='meta')
337337
metawf.base_dir = out_dir
338-
metawf.add_nodes([create_wf('wf%d' % i) for i in range(30)])
338+
metawf.add_nodes([create_wf('wf%d' % i) for i in range(1)])
339339
eg = metawf.run(plugin='Linear')
340340
prov_base = os.path.join(out_dir,
341341
'workflow_provenance_test')
342342
psg = write_workflow_prov(eg, prov_base, format='all')
343-
yield assert_equal, psg, 1
343+
yield assert_equal, len(psg.bundles), 2
344+
yield assert_equal, len(psg.get_records()), 7
344345
rmtree(out_dir)

nipype/pipeline/utils.py

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1168,14 +1168,27 @@ def write_workflow_prov(graph, filename=None, format='all'):
11681168
values = getattr(result.outputs, key)
11691169
if isdefined(values) and idx < len(values):
11701170
subresult.outputs[key] = values[idx]
1171-
sub_bundle = ProvStore().add_results(subresult)
1172-
ps.g = merge_bundles(ps.g, sub_bundle)
1173-
ps.g.wasGeneratedBy(sub_bundle, process)
1171+
sub_doc = ProvStore().add_results(subresult)
1172+
sub_bundle = pm.ProvBundle(sub_doc.get_records(),
1173+
identifier=get_id())
1174+
ps.g.add_bundle(sub_bundle)
1175+
bundle_entity = ps.g.entity(sub_bundle.identifier,
1176+
other_attributes={'prov:type':
1177+
pm.PROV_BUNDLE})
1178+
ps.g.wasGeneratedBy(bundle_entity, process)
11741179
else:
11751180
process.add_attributes({pm.PROV["type"]: nipype_ns["Node"]})
1176-
result_bundle = ProvStore().add_results(result).bundle()
1177-
ps.g = merge_bundles(ps.g, result_bundle)
1178-
ps.g.wasGeneratedBy(result_bundle, process)
1181+
if result.provenance:
1182+
prov_doc = result.provenance
1183+
else:
1184+
prov_doc = ProvStore().add_results(result)
1185+
result_bundle = pm.ProvBundle(prov_doc.get_records(),
1186+
identifier=get_id())
1187+
ps.g.add_bundle(result_bundle)
1188+
bundle_entity = ps.g.entity(result_bundle.identifier,
1189+
other_attributes={'prov:type':
1190+
pm.PROV_BUNDLE})
1191+
ps.g.wasGeneratedBy(bundle_entity, process)
11791192
processes.append(process)
11801193

11811194
# add dependencies (edges)

nipype/utils/provenance.py

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
standard_library.install_aliases()
33
from builtins import object
44

5+
from copy import deepcopy
56
from pickle import dumps
67
import simplejson
78
import os
@@ -244,18 +245,15 @@ def write_provenance(results, filename='provenance', format='turtle'):
244245
class ProvStore(object):
245246

246247
def __init__(self):
247-
self.g = pm.ProvDocument() #ProvBundle(identifier=get_id())
248+
self.g = pm.ProvDocument()
248249
self.g.add_namespace(foaf)
249250
self.g.add_namespace(dcterms)
250251
self.g.add_namespace(nipype_ns)
251252
self.g.add_namespace(niiri)
252253

253-
def add_results(self, results):
254-
if results.provenance:
255-
try:
256-
self.g.add_bundle(results.provenance)
257-
except pm.ProvException:
258-
self.g.add_bundle(results.provenance, get_id())
254+
def add_results(self, results, keep_provenance=False):
255+
if keep_provenance and results.provenance:
256+
self.g = deepcopy(results.provenance)
259257
return self.g
260258
runtime = results.runtime
261259
interface = results.interface

0 commit comments

Comments
 (0)