t2-server 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,8 @@
1
+ *~
2
+ pkg/
3
+ html/
4
+ .buildpath
5
+ .project
6
+ .idea
7
+ .rvmrc
8
+ Gemfile.lock
@@ -0,0 +1,6 @@
1
+ language: ruby
2
+ cache: bundler
3
+ rvm:
4
+ - 1.9.3
5
+ - 2.0.0
6
+ - 2.1.0
@@ -1,5 +1,29 @@
1
1
  = Changes log for the T2 Ruby Gem
2
2
 
3
+ == Version 1.1.0
4
+
5
+ * Remove hirb as a runtime dependency.
6
+ * t2-server-admin: Minor fix for readability.
7
+ * Add a gem version badge from badge.fury.io.
8
+ * Use bundler and stop using jeweler.
9
+ * Update dependencies.
10
+ * Add travis configuration.
11
+ * Separate out the version code from the main include file.
12
+ * If in travis, don't wait for a server address.
13
+ * Update note about SemVer in readme.
14
+ * Add travis badge and update ruby testing info.
15
+ * Refactor out rexml and nokogiri xml support.
16
+ * Setup rubygems and bundler in the main require file.
17
+ * t2-run-workflow: Fix baclava output option.
18
+ * Fix error in exception caused by chunked response.
19
+ * Add provenance capture and retrieval functionality.
20
+ * Can now toggle provenance generation on and off.
21
+ * Implement a comparable version class.
22
+ * Restrict provenance functionality to correct server versions.
23
+ * Remove Server#version_components from the docs.
24
+ * Tighten ratom version and move libxml-ruby to runtime list.
25
+ * Align baclava output method names with the prov ones.
26
+
3
27
  == Version 1.0.0
4
28
 
5
29
  * Remove deprecated methods.
data/Gemfile ADDED
@@ -0,0 +1,35 @@
1
+ # Copyright (c) 2014 The University of Manchester, UK.
2
+ #
3
+ # All rights reserved.
4
+ #
5
+ # Redistribution and use in source and binary forms, with or without
6
+ # modification, are permitted provided that the following conditions are met:
7
+ #
8
+ # * Redistributions of source code must retain the above copyright notice,
9
+ # this list of conditions and the following disclaimer.
10
+ #
11
+ # * Redistributions in binary form must reproduce the above copyright notice,
12
+ # this list of conditions and the following disclaimer in the documentation
13
+ # and/or other materials provided with the distribution.
14
+ #
15
+ # * Neither the names of The University of Manchester nor the names of its
16
+ # contributors may be used to endorse or promote products derived from this
17
+ # software without specific prior written permission.
18
+ #
19
+ # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22
+ # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23
+ # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24
+ # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25
+ # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26
+ # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27
+ # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28
+ # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29
+ # POSSIBILITY OF SUCH DAMAGE.
30
+ #
31
+ # Author: Robert Haines
32
+
33
+ source "https://rubygems.org"
34
+
35
+ gemspec
@@ -1,4 +1,4 @@
1
- Copyright (c) 2010-2013 The University of Manchester, UK.
1
+ Copyright (c) 2010-2014 The University of Manchester, UK.
2
2
 
3
3
  All rights reserved.
4
4
 
@@ -4,9 +4,11 @@ Authors:: Robert Haines
4
4
  Contact:: mailto:support@mygrid.org.uk
5
5
  URL:: http://www.taverna.org.uk/
6
6
  Licence:: BSD (See LICENCE or http://www.opensource.org/licenses/bsd-license.php)
7
- Copyright:: (c) 2010-2013 The University of Manchester, UK
7
+ Copyright:: (c) 2010-2014 The University of Manchester, UK
8
8
 
9
+ {<img src="https://badge.fury.io/rb/t2-server.png" alt="Gem Version" />}[http://badge.fury.io/rb/t2-server]
9
10
  {<img src="https://codeclimate.com/github/myGrid/t2-server-gem.png" />}[https://codeclimate.com/github/myGrid/t2-server-gem]
11
+ {<img src="https://travis-ci.org/myGrid/t2-server-gem.svg?branch=master" alt="Build Status" />}[https://travis-ci.org/myGrid/t2-server-gem]
10
12
 
11
13
  == Synopsis
12
14
 
@@ -28,9 +30,7 @@ https://github.com/myGrid/t2-server-gem
28
30
 
29
31
  == Compatibility
30
32
 
31
- After the release of version 1.0.0 this gem will follow the principles of
32
- {Semantic Versioning}[http://semver.org/]. Until that point there may be
33
- breaking changes to the API, although these will be kept to a minimum.
33
+ This gem uses {Semantic Versioning}[http://semver.org/].
34
34
 
35
35
  === Taverna Server
36
36
 
@@ -52,18 +52,24 @@ Server, but if that is not possible right now then these are the recommended
52
52
  version pairings:
53
53
  * pre Taverna Server 2.3, use version 0.6.1 of the gem
54
54
  * 2.3, use version 0.9.3
55
- * 2.4 and up, use version 1.0.0
55
+ * 2.4 and up, use version 1.0.0 and up.
56
56
 
57
57
  === Ruby
58
58
 
59
59
  This library is known to work with the following versions of Ruby:
60
- * 1.8.7
61
60
  * 1.9.2
62
- * 1.9.3 *
63
- * 2.0.0
61
+ * 1.9.3 +*
62
+ * 2.0.0 +*
63
+ * 2.1.0 +
64
64
 
65
- Those marked with an asterisk (*) are supported and bugs found against them
66
- will be fixed. Other versions may work but are not tested or supported.
65
+ Those marked with an asterisk (*) are fully supported and bugs found against
66
+ them will be fixed. Other versions may work but are not tested or supported.
67
+
68
+ Those marked with a plus (+) are tested in
69
+ {https://travis-ci.org/myGrid/t2-server-gem}[Travis].
70
+
71
+ Ruby 1.8.7 is no longer supported as it reached its end of life at the end of
72
+ June 2013.
67
73
 
68
74
  == Usage
69
75
 
@@ -233,12 +239,29 @@ supported:
233
239
  But make sure you request baclava output *before* starting the run. Baclava
234
240
  output can be downloaded into memory or saved directly to a file.
235
241
 
236
- run.request_baclava_output
242
+ run.generate_baclava_output
237
243
  run.start
238
244
  run.wait
239
245
  output = run.baclava_output # download to memory
240
246
  run.baclava_output("/path/to/output.baclava") # save to a file
241
247
 
248
+ Later versions of Taverna Server can generate a complete provenance log of a
249
+ workflow run in {Taverna-PROV}[https://github.com/myGrid/taverna-prov] format.
250
+ The generation of provenance data must be requested *before* starting the run.
251
+
252
+ run.generate_provenance
253
+ run.start
254
+ ...
255
+ provenance = run.provenance # download to memory
256
+ run.provenance("/path/to/provenance.zip") # save to a file
257
+
258
+ The resultant provenance bundle is a zip file containing all input, output and
259
+ intermediate values as separate files, along with the provenance of
260
+ the workflow run. The bundle is based on the
261
+ {Research Object Bundle specification}[http://wf4ever.github.io/ro/bundle/],
262
+ and complies with the
263
+ {W3C PROV-O provenance specification}[http://www.w3.org/TR/prov-o/].
264
+
242
265
  The log from Taverna Server can be downloaded in a similar way to zip files or
243
266
  Baclava documents.
244
267
 
@@ -246,7 +269,7 @@ Baclava documents.
246
269
  run.log("/path/to/log.txt") # save to a file
247
270
 
248
271
  When downloading outputs the underlying stream can be accessed by supplying a
249
- block to the value, zip_output, baclava_output or log methods:
272
+ block to the value, zip_output, provenance, baclava_output or log methods:
250
273
 
251
274
  run.output_port("port_name").value do |data|
252
275
  print data
data/Rakefile CHANGED
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2010-2013 The University of Manchester, UK.
1
+ # Copyright (c) 2010-2014 The University of Manchester, UK.
2
2
  #
3
3
  # All rights reserved.
4
4
  #
@@ -30,49 +30,12 @@
30
30
  #
31
31
  # Author: Robert Haines
32
32
 
33
- require 'rubygems'
34
- require 'rake'
35
- require 'rake/clean'
36
- require 'rake/tasklib'
37
- require 'rdoc/task'
38
- require 'jeweler'
39
-
40
- # we need to add lib to the path because we're not installed yet!
41
- $LOAD_PATH.unshift File.join(File.dirname(__FILE__), "lib")
42
- require 't2-server'
33
+ require "bundler/gem_tasks"
34
+ require "rake/testtask"
35
+ require "rdoc/task"
43
36
 
44
37
  task :default => [:test]
45
38
 
46
- Jeweler::Tasks.new do |s|
47
- s.name = "t2-server"
48
- s.version = T2Server::Version::STRING
49
- s.authors = ["Robert Haines", "Finn Bacall"]
50
- s.email = ["support@mygrid.org.uk"]
51
- s.homepage = "http://www.taverna.org.uk/"
52
- s.platform = Gem::Platform::RUBY
53
- s.summary = "Support for interacting with Taverna 2 Server."
54
- s.description = "This gem provides access to the Taverna 2 Server " +
55
- "REST interface from Ruby."
56
- s.require_path = "lib"
57
- s.bindir = "bin"
58
- s.executables = ["t2-delete-runs", "t2-run-workflow", "t2-server-info",
59
- "t2-get-output", "t2-server-admin"]
60
- s.test_file = "test/ts_t2server.rb"
61
- s.has_rdoc = true
62
- s.extra_rdoc_files = ["README.rdoc", "LICENCE.rdoc", "CHANGES.rdoc"]
63
- s.rdoc_options = ["-N", "--tab-width=2", "--main=README.rdoc"]
64
- s.add_development_dependency('rake', '~> 0.9.2')
65
- s.add_development_dependency('libxml-ruby', '>= 1.1.4')
66
- s.add_development_dependency('nokogiri', '>= 1.5.0')
67
- s.add_development_dependency('rdoc', '>= 3.9.4')
68
- s.add_development_dependency('jeweler', '~> 1.8.3')
69
- s.add_development_dependency('launchy', '~> 2.2.0')
70
- s.add_runtime_dependency('net-http-persistent', '~> 2.6')
71
- s.add_runtime_dependency('taverna-baclava', '~> 1.0.0')
72
- s.add_runtime_dependency('ratom', '~> 0.8.2')
73
- s.add_runtime_dependency('hirb', '>= 0.4.0')
74
- end
75
-
76
39
  # This test task does not use the standard Rake::TestTask class as we need to
77
40
  # be able to supply an argument to the test. This is so that the test can be
78
41
  # run with a server address from a CI server. The equivalent TestTask would be
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
- # Copyright (c) 2010-2013 The University of Manchester, UK.
2
+ # Copyright (c) 2010-2014 The University of Manchester, UK.
3
3
  #
4
4
  # All rights reserved.
5
5
  #
@@ -86,13 +86,19 @@ conn_params, creds = register_options("Usage: t2-run-workflow [options] "\
86
86
  user, pass = cred.chomp.split(':', 2)
87
87
  options[:screds] << [uri, user, pass]
88
88
  end
89
+ opt.on("-P [FILE]", "--provenance", "Generate provenance for the run and "\
90
+ "save it to a file. A filename may be specified or 'provenance.zip' "\
91
+ "will be used. Getting outputs in baclava format overrides this "\
92
+ "option.") do |val|
93
+ options[:provenance] = (val || "provenance.zip").chomp
94
+ end
89
95
  opt.on("-b BACLAVA", "--baclava-in=BACLAVA", "Set baclava file for input "\
90
96
  "port values") do |val|
91
97
  inputs[:baclava] = val
92
98
  end
93
- opt.on("-o", "--baclava-out=BACLAVA", "Return outputs in baclava format."\
99
+ opt.on("-o [FILE]", "--baclava-out", "Return outputs in baclava format."\
94
100
  " A filename may be specified or 'out.xml' is used") do |val|
95
- options[:baclava_out] = val.chomp
101
+ options[:baclava_out] = (val || "out.xml").chomp
96
102
  end
97
103
  opt.on("-n", "--no-wait", "Do not wait for workflow to finish, return "\
98
104
  "once it has started running") do |val|
@@ -189,6 +195,9 @@ begin
189
195
  run.add_password_credential(list[0], list[1], list[2])
190
196
  end
191
197
 
198
+ # generate provenance?
199
+ run.generate_provenance if options[:provenance]
200
+
192
201
  # output baclava?
193
202
  run.request_baclava_output if options[:baclava_out]
194
203
 
@@ -250,6 +259,12 @@ begin
250
259
  end
251
260
  end
252
261
  end
262
+
263
+ if options[:provenance]
264
+ run.provenance(options[:provenance])
265
+ puts "Provenance file written to '#{options[:provenance]}'"
266
+ end
267
+
253
268
  end
254
269
 
255
270
  # delete run?
@@ -33,7 +33,6 @@
33
33
 
34
34
  require 'rubygems'
35
35
  require 't2-server-cli'
36
- require 'hirb'
37
36
 
38
37
  include T2Server::CLI
39
38
 
@@ -58,6 +57,17 @@ conn_params, creds = register_options("Usage: t2-server-admin [options] " +
58
57
  end
59
58
  end
60
59
 
60
+ if options[:list]
61
+ begin
62
+ require 'hirb'
63
+ rescue LoadError
64
+ puts "\n****\nTo list administrative resources in your terminal the "\
65
+ "hirb gem must be installed:\n\n$ gem install hirb\n\nThis information "\
66
+ "will not be shown this time, sorry.\n****\n\n"
67
+ options[:list] = false
68
+ end
69
+ end
70
+
61
71
  # get runs and server address from the arguments
62
72
  resources = []
63
73
  address = ""
@@ -84,7 +94,7 @@ begin
84
94
  server.administrator(creds) do |admin|
85
95
  # list and exit?
86
96
  if options[:list]
87
- puts (Hirb::Helpers::ObjectTable.render admin.resources.values,
97
+ puts Hirb::Helpers::ObjectTable.render(admin.resources.values,
88
98
  :fields=>[:name, :writable?],
89
99
  :headers=>{:name => 'Resource name', :writable? => 'Access'},
90
100
  :filters=>{:writable? => :access},
@@ -33,7 +33,6 @@
33
33
 
34
34
  require 'rubygems'
35
35
  require 't2-server-cli'
36
- require 'hirb'
37
36
 
38
37
  include T2Server::CLI
39
38
 
@@ -51,6 +50,17 @@ conn_params, creds = register_options("Usage: t2-server-info [options] " +
51
50
  end
52
51
  end
53
52
 
53
+ if options[:list] > 0
54
+ begin
55
+ require 'hirb'
56
+ rescue LoadError
57
+ puts "\n****\nTo tabulate run information in your terminal the hirb gem "\
58
+ "must be installed:\n\n$ gem install hirb\n\nRun information will not "\
59
+ "be shown this time, sorry.\n****\n\n"
60
+ options[:list] = 0
61
+ end
62
+ end
63
+
54
64
  # read and check server address and credentials
55
65
  uri, creds = parse_address(ARGV.shift, creds)
56
66
 
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2010-2013 The University of Manchester, UK.
1
+ # Copyright (c) 2010-2014 The University of Manchester, UK.
2
2
  #
3
3
  # All rights reserved.
4
4
  #
@@ -30,9 +30,12 @@
30
30
  #
31
31
  # Author: Robert Haines
32
32
 
33
- require 'yaml'
33
+ require 'rubygems'
34
+ require 'bundler/setup'
35
+
36
+ require 't2-server/version'
34
37
  require 't2-server/util'
35
- require 't2-server/xml/xml'
38
+ require 't2-server/xml'
36
39
  require 't2-server/exceptions'
37
40
  require 't2-server/net/credentials'
38
41
  require 't2-server/net/connection'
@@ -50,14 +53,4 @@ require 't2-server/admin'
50
53
  # * T2Server::Server - Use this if you are providing a web interface to a
51
54
  # Taverna 2 Server instance.
52
55
  module T2Server
53
-
54
- # Library version information.
55
- module Version
56
- # Version information in a Hash
57
- INFO = YAML.load_file(File.join(File.dirname(__FILE__), "..",
58
- "version.yml"))
59
-
60
- # Version number as a String
61
- STRING = [:major, :minor, :patch].map {|d| INFO[d]}.compact.join('.')
62
- end
63
56
  end
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2010-2012 The University of Manchester, UK.
1
+ # Copyright (c) 2010-2014 The University of Manchester, UK.
2
2
  #
3
3
  # All rights reserved.
4
4
  #
@@ -104,7 +104,8 @@ module T2Server
104
104
  @method = method
105
105
  @path = path
106
106
  @code = response.code
107
- @body = response.body.empty? ? "<none>" : "#{response.body}"
107
+ @body = response.body.to_s
108
+ @body = @body.empty? ? "<none>" : "#{response.body}"
108
109
  message = "Unexpected server response:\n Method: #{@method}\n Path: "\
109
110
  "#{@path}\n Code: #{@code}\n Body: #{@body}"
110
111
  super message
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2010-2013 The University of Manchester, UK.
1
+ # Copyright (c) 2010-2014 The University of Manchester, UK.
2
2
  #
3
3
  # All rights reserved.
4
4
  #
@@ -30,7 +30,6 @@
30
30
  #
31
31
  # Author: Robert Haines
32
32
 
33
- require 'rubygems'
34
33
  require 'atom'
35
34
  require 'uri'
36
35
 
@@ -1,4 +1,4 @@
1
- # Copyright (c) 2010-2013 The University of Manchester, UK.
1
+ # Copyright (c) 2010-2014 The University of Manchester, UK.
2
2
  #
3
3
  # All rights reserved.
4
4
  #
@@ -32,7 +32,6 @@
32
32
 
33
33
  require 'base64'
34
34
  require 'time'
35
- require 'rubygems'
36
35
  require 'taverna-baclava'
37
36
 
38
37
  module T2Server
@@ -79,6 +78,8 @@ module T2Server
79
78
  :inputexp => "//nsr:expected",
80
79
  :name => "//nsr:name",
81
80
  :feed => "//nsr:interaction",
81
+ :gen_prov => "//nsr:generate-provenance",
82
+ :run_bundle => "//nsr:run-bundle",
82
83
 
83
84
  # Port descriptions XPath queries
84
85
  :port_in => "//port:input",
@@ -110,6 +111,7 @@ module T2Server
110
111
  @workflow = ""
111
112
  @baclava_in = false
112
113
  @baclava_out = false
114
+ @provenance = false
113
115
 
114
116
  @credentials = credentials
115
117
 
@@ -466,11 +468,11 @@ module T2Server
466
468
  end
467
469
 
468
470
  # :call-seq:
469
- # request_baclava_output -> true or false
471
+ # generate_baclava_output -> true or false
470
472
  #
471
473
  # Set the server to save the outputs of this run in baclava format. This
472
474
  # must be done before the run is started.
473
- def request_baclava_output
475
+ def generate_baclava_output
474
476
  return if @baclava_out
475
477
  state = status
476
478
  raise RunStateError.new(state, :initialized) if state != :initialized
@@ -479,6 +481,16 @@ module T2Server
479
481
  @credentials)
480
482
  end
481
483
 
484
+ # :stopdoc:
485
+ def request_baclava_output
486
+ warn "[DEPRECATED] Run#request_baclava_output is deprecated and will "\
487
+ "be removed in the next major release. Please use "\
488
+ "Run#generate_baclava_output instead."
489
+
490
+ generate_baclava_output
491
+ end
492
+ # :startdoc:
493
+
482
494
  # :call-seq:
483
495
  # baclava_input? -> true or false
484
496
  #
@@ -488,13 +500,23 @@ module T2Server
488
500
  end
489
501
 
490
502
  # :call-seq:
491
- # baclava_output? -> true or false
503
+ # generate_baclava_output? -> true or false
492
504
  #
493
505
  # Has this run been set to return results in baclava format?
494
- def baclava_output?
506
+ def generate_baclava_output?
495
507
  @baclava_out
496
508
  end
497
509
 
510
+ # :stopdoc:
511
+ def baclava_output?
512
+ warn "[DEPRECATED] Run#baclava_output? is deprecated and will be "\
513
+ "removed in the next major release. Please use "\
514
+ "Run#generate_baclava_output? instead."
515
+
516
+ generate_baclava_output?
517
+ end
518
+ # :startdoc:
519
+
498
520
  # :call-seq:
499
521
  # baclava_output -> string
500
522
  # baclava_output(filename) -> fixnum
@@ -530,6 +552,66 @@ module T2Server
530
552
  download_or_stream(param, baclava_uri, "*/*", &block)
531
553
  end
532
554
 
555
+ # :call-seq:
556
+ # generate_provenance(toggle = true) -> true or false
557
+ #
558
+ # Toggle the generation of provenance for this run on or off. This must be
559
+ # done before the run is started. Once the run has completed provenance
560
+ # can be retrieved with Run#provenance.
561
+ #
562
+ # Requesting baclava output for a run will override this setting.
563
+ def generate_provenance(toggle = true)
564
+ return @provenance if @provenance == toggle || links[:gen_prov].nil?
565
+ state = status
566
+ raise RunStateError.new(state, :initialized) if state != :initialized
567
+
568
+ result = @server.update(links[:gen_prov], toggle.to_s, "text/plain",
569
+ @credentials)
570
+
571
+ # If changing the setting worked then return the new setting, otherwise
572
+ # return the old one.
573
+ @provenance = result ? toggle : @provenance
574
+ end
575
+
576
+ # :call-seq:
577
+ # generate_provenance? -> true or false
578
+ #
579
+ # Has this run been set to generate provenance output?
580
+ def generate_provenance?
581
+ @provenance
582
+ end
583
+
584
+ # :call-seq:
585
+ # provenance -> binary blob
586
+ # provenance(filename) -> fixnum
587
+ # provenance(stream) -> fixnum
588
+ # provenance {|chunk| ...}
589
+ #
590
+ # Get the provenance of this run from the server in zip format.
591
+ #
592
+ # Calling this method with no parameters will simply return a blob of
593
+ # zipped data. Providing a filename will stream the data directly to that
594
+ # file and return the number of bytes written. Passing in an object that
595
+ # has a +write+ method (for example, an instance of File or IO) will
596
+ # stream the data directly to that object and return the number of bytes
597
+ # that were streamed. Passing in a block will allow access to the
598
+ # underlying data stream:
599
+ # run.provenance do |chunk|
600
+ # print chunk
601
+ # end
602
+ #
603
+ # Raises RunStateError if the run has not finished running.
604
+ def provenance(param = nil, &block)
605
+ raise ArgumentError,
606
+ 'both a parameter and block given for provenance' if param && block
607
+
608
+ state = status
609
+ raise RunStateError.new(state, :finished) if state != :finished
610
+
611
+ raise AccessForbiddenError.new("provenance") unless @provenance
612
+ download_or_stream(param, links[:run_bundle], "*/*", &block)
613
+ end
614
+
533
615
  # :call-seq:
534
616
  # zip_output -> binary blob
535
617
  # zip_output(filename) -> fixnum
@@ -1084,7 +1166,7 @@ module T2Server
1084
1166
  # first parse out the basic stuff
1085
1167
  links = get_uris_from_doc(doc, [:expiry, :workflow, :status,
1086
1168
  :createtime, :starttime, :finishtime, :wdir, :inputs, :output,
1087
- :securectx, :listeners, :name, :feed])
1169
+ :securectx, :listeners, :name, :feed, :gen_prov, :run_bundle])
1088
1170
 
1089
1171
  # Working dir links
1090
1172
  _get_wdir_links(links)