t2-server 0.9.1 → 0.9.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -79,6 +79,8 @@ module T2Server
79
79
  # If the connection is over SSL then the peer will be verified using the
80
80
  # underlying OS's certificate store.
81
81
  class DefaultConnectionParameters < ConnectionParameters
82
+ # Create connection parameters that are secure by default and verify the
83
+ # server that is being connected to.
82
84
  def initialize
83
85
  super
84
86
  self[:verify_peer] = true
@@ -88,6 +90,8 @@ module T2Server
88
90
  # Connection parameters that specifically turn off peer verification when
89
91
  # using SSL.
90
92
  class InsecureSSLConnectionParameters < ConnectionParameters
93
+ # Create connection parameters that are insecure by default and do not
94
+ # verify the server that is connected to.
91
95
  def initialize
92
96
  super
93
97
  self[:verify_peer] = false
@@ -283,8 +283,8 @@ module T2Server
283
283
  end
284
284
 
285
285
  # :stopdoc:
286
- def download(ref, range = nil)
287
- @run.download_output_data("#{path(ref)}", range)
286
+ def download(uri, range = nil)
287
+ @run.download_output_data(uri, range)
288
288
  end
289
289
  # :startdoc:
290
290
 
@@ -342,7 +342,7 @@ module T2Server
342
342
  # :stopdoc:
343
343
  def initialize(port, ref, error, type = "", size = 0)
344
344
  @port = port
345
- @reference = ref
345
+ @reference = URI.parse(ref)
346
346
  @type = type
347
347
  @size = size
348
348
  @value = nil
@@ -100,9 +100,10 @@ module T2Server
100
100
  BACLAVA_FILE = "out.xml"
101
101
 
102
102
  # New is private but rdoc does not get it right! Hence :stopdoc: section.
103
- def initialize(server, id, credentials = nil)
103
+ def initialize(server, uri, credentials = nil)
104
104
  @server = server
105
- @identifier = id
105
+ @uri = uri
106
+ @identifier = Util.get_path_leaf_from_uri(@uri)
106
107
  @workflow = ""
107
108
  @baclava_in = false
108
109
  @baclava_out = false
@@ -139,13 +140,13 @@ module T2Server
139
140
  # This method will _yield_ the newly created Run if a block is given.
140
141
  def Run.create(server, workflow, *rest)
141
142
  credentials = nil
142
- id = nil
143
+ uri = nil
143
144
  conn_params = nil
144
145
 
145
146
  rest.each do |param|
146
147
  case param
147
- when String
148
- id = param
148
+ when URI
149
+ uri = param
149
150
  when ConnectionParameters
150
151
  conn_params = param
151
152
  when HttpCredentials
@@ -157,11 +158,11 @@ module T2Server
157
158
  server = Server.new(server, conn_params)
158
159
  end
159
160
 
160
- if id.nil?
161
- id = server.initialize_run(workflow, credentials)
161
+ if uri.nil?
162
+ uri = server.initialize_run(workflow, credentials)
162
163
  end
163
164
 
164
- run = new(server, id, credentials)
165
+ run = new(server, uri, credentials)
165
166
  yield(run) if block_given?
166
167
  run
167
168
  end
@@ -190,7 +191,7 @@ module T2Server
190
191
  #
191
192
  # Delete this run from the server.
192
193
  def delete
193
- @server.delete_run(@identifier, @credentials)
194
+ @server.delete(@uri, @credentials)
194
195
  end
195
196
 
196
197
  # :stopdoc:
@@ -282,8 +283,7 @@ module T2Server
282
283
  #
283
284
  # Return the expiry time of this run as an instance of class Time.
284
285
  def expiry
285
- Time.parse(@server.get_run_attribute(@identifier, links[:expiry],
286
- "text/plain", @credentials))
286
+ Time.parse(@server.read(links[:expiry], "text/plain", @credentials))
287
287
  end
288
288
 
289
289
  # :call-seq:
@@ -302,8 +302,7 @@ module T2Server
302
302
  # parse timezone offsets with a colon (eg +00:00)
303
303
  date_str = time.xmlschema(2)
304
304
  date_str = date_str[0..-4] + date_str[-2..-1]
305
- @server.set_run_attribute(@identifier, links[:expiry], date_str,
306
- "text/plain", @credentials)
305
+ @server.update(links[:expiry], date_str, "text/plain", @credentials)
307
306
  end
308
307
 
309
308
  # :call-seq:
@@ -312,8 +311,8 @@ module T2Server
312
311
  # Get the workflow that this run represents.
313
312
  def workflow
314
313
  if @workflow == ""
315
- @workflow = @server.get_run_attribute(@identifier, links[:workflow],
316
- "application/xml", @credentials)
314
+ @workflow = @server.read(links[:workflow], "application/xml",
315
+ @credentials)
317
316
  end
318
317
  @workflow
319
318
  end
@@ -324,8 +323,7 @@ module T2Server
324
323
  # Get the status of this run. Status can be one of :initialized,
325
324
  # :running or :finished.
326
325
  def status
327
- text_to_state(@server.get_run_attribute(@identifier, links[:status],
328
- "text/plain", @credentials))
326
+ text_to_state(@server.read(links[:status], "text/plain", @credentials))
329
327
  end
330
328
 
331
329
  # :call-seq:
@@ -341,8 +339,8 @@ module T2Server
341
339
  # set all the inputs
342
340
  _check_and_set_inputs unless baclava_input?
343
341
 
344
- @server.set_run_attribute(@identifier, links[:status],
345
- state_to_text(:running), "text/plain", @credentials)
342
+ @server.update(links[:status], state_to_text(:running), "text/plain",
343
+ @credentials)
346
344
  end
347
345
 
348
346
  # :call-seq:
@@ -379,8 +377,7 @@ module T2Server
379
377
  #
380
378
  # Get the return code of the run. Zero indicates success.
381
379
  def exitcode
382
- @server.get_run_attribute(@identifier, links[:exitcode], "text/plain",
383
- @credentials).to_i
380
+ @server.read(links[:exitcode], "text/plain", @credentials).to_i
384
381
  end
385
382
 
386
383
  # :call-seq:
@@ -388,8 +385,7 @@ module T2Server
388
385
  #
389
386
  # Get anything that the run printed to the standard out stream.
390
387
  def stdout
391
- @server.get_run_attribute(@identifier, links[:stdout], "text/plain",
392
- @credentials)
388
+ @server.read(links[:stdout], "text/plain", @credentials)
393
389
  end
394
390
 
395
391
  # :call-seq:
@@ -397,8 +393,7 @@ module T2Server
397
393
  #
398
394
  # Get anything that the run printed to the standard error stream.
399
395
  def stderr
400
- @server.get_run_attribute(@identifier, links[:stderr], "text/plain",
401
- @credentials)
396
+ @server.read(links[:stderr], "text/plain", @credentials)
402
397
  end
403
398
 
404
399
  # :call-seq:
@@ -408,16 +403,8 @@ module T2Server
408
403
  # could be used to store input data.
409
404
  def mkdir(dir)
410
405
  dir = Util.strip_path_slashes(dir)
411
- if dir.include? ?/
412
- # if a path is given then separate the leaf from the
413
- # end and add the rest of the path to the wdir link
414
- leaf = dir.split("/")[-1]
415
- path = dir[0...-(leaf.length + 1)]
416
- @server.create_dir(@identifier, "#{links[:wdir]}/#{path}", leaf,
417
- @credentials)
418
- else
419
- @server.create_dir(@identifier, links[:wdir], dir, @credentials)
420
- end
406
+
407
+ @server.mkdir(links[:wdir], dir, @credentials)
421
408
  end
422
409
 
423
410
  # :call-seq:
@@ -432,10 +419,10 @@ module T2Server
432
419
  # The name of the file on the server is returned.
433
420
  def upload_file(filename, params={})
434
421
  location = params[:dir] || ""
435
- location = "#{links[:wdir]}/#{location}"
422
+ uri = Util.append_to_uri_path(links[:wdir], location)
436
423
  rename = params[:rename] || ""
437
- @server.upload_file(@identifier, filename, location, rename,
438
- @credentials)
424
+ file_uri = @server.upload_file(filename, uri, rename, @credentials)
425
+ Util.get_path_leaf_from_uri(file_uri)
439
426
  end
440
427
 
441
428
  # :call-seq:
@@ -445,9 +432,8 @@ module T2Server
445
432
  # remote directory to put this file in can also be specified, but if it is
446
433
  # it must first have been created by a call to Run#mkdir.
447
434
  def upload_data(data, remote_name, remote_directory = "")
448
- location = "#{links[:wdir]}/#{remote_directory}"
449
- @server.upload_data(@identifier, data, remote_name, location,
450
- @credentials)
435
+ location_uri = Util.append_to_uri_path(links[:wdir], remote_directory)
436
+ @server.upload_data(data, remote_name, location_uri, @credentials)
451
437
  end
452
438
 
453
439
  # :stopdoc:
@@ -469,9 +455,8 @@ module T2Server
469
455
  state = status
470
456
  raise RunStateError.new(state, :initialized) if state != :initialized
471
457
 
472
- rename = upload_file(filename)
473
- result = @server.set_run_attribute(@identifier, links[:baclava], rename,
474
- "text/plain", @credentials)
458
+ file = upload_file(filename)
459
+ result = @server.update(links[:baclava], file, "text/plain", @credentials)
475
460
 
476
461
  @baclava_in = true if result
477
462
 
@@ -502,8 +487,8 @@ module T2Server
502
487
  state = status
503
488
  raise RunStateError.new(state, :initialized) if state != :initialized
504
489
 
505
- @baclava_out = @server.set_run_attribute(@identifier, links[:output],
506
- BACLAVA_FILE, "text/plain", @credentials)
490
+ @baclava_out = @server.update(links[:output], BACLAVA_FILE, "text/plain",
491
+ @credentials)
507
492
  end
508
493
 
509
494
  # :stopdoc:
@@ -541,8 +526,9 @@ module T2Server
541
526
  raise RunStateError.new(state, :finished) if state != :finished
542
527
 
543
528
  raise AccessForbiddenError.new("baclava output") if !@baclava_out
544
- @server.get_run_attribute(@identifier,
545
- "#{links[:wdir]}/#{BACLAVA_FILE}", "*/*", @credentials)
529
+
530
+ baclava_uri = Util.append_to_uri_path(links[:wdir], BACLAVA_FILE)
531
+ @server.read(baclava_uri, "*/*", @credentials)
546
532
  end
547
533
 
548
534
  # :stopdoc:
@@ -562,8 +548,8 @@ module T2Server
562
548
  state = status
563
549
  raise RunStateError.new(state, :finished) if state != :finished
564
550
 
565
- @server.get_run_attribute(@identifier, "#{links[:wdir]}/out",
566
- "application/zip", @credentials)
551
+ output_uri = Util.append_to_uri_path(links[:wdir], "out")
552
+ @server.read(output_uri, "application/zip", @credentials)
567
553
  end
568
554
 
569
555
  # :call-seq:
@@ -595,8 +581,7 @@ module T2Server
595
581
  #
596
582
  # Get the creation time of this run as an instance of class Time.
597
583
  def create_time
598
- Time.parse(@server.get_run_attribute(@identifier, links[:createtime],
599
- "text/plain", @credentials))
584
+ Time.parse(@server.read(links[:createtime], "text/plain", @credentials))
600
585
  end
601
586
 
602
587
  # :call-seq:
@@ -604,8 +589,7 @@ module T2Server
604
589
  #
605
590
  # Get the start time of this run as an instance of class Time.
606
591
  def start_time
607
- Time.parse(@server.get_run_attribute(@identifier, links[:starttime],
608
- "text/plain", @credentials))
592
+ Time.parse(@server.read(links[:starttime], "text/plain", @credentials))
609
593
  end
610
594
 
611
595
  # :call-seq:
@@ -613,8 +597,7 @@ module T2Server
613
597
  #
614
598
  # Get the finish time of this run as an instance of class Time.
615
599
  def finish_time
616
- Time.parse(@server.get_run_attribute(@identifier, links[:finishtime],
617
- "text/plain", @credentials))
600
+ Time.parse(@server.read(links[:finishtime], "text/plain", @credentials))
618
601
  end
619
602
 
620
603
  # :call-seq:
@@ -640,8 +623,7 @@ module T2Server
640
623
  return unless owner?
641
624
 
642
625
  value = XML::Fragments::PERM_UPDATE % [username, permission.to_s]
643
- @server.create_run_attribute(@identifier, links[:sec_perms], value,
644
- "application/xml", @credentials)
626
+ @server.create(links[:sec_perms], value, "application/xml", @credentials)
645
627
  end
646
628
 
647
629
  # :call-seq:
@@ -654,8 +636,8 @@ module T2Server
654
636
  return unless owner?
655
637
 
656
638
  perms = {}
657
- doc = xml_document(@server.get_run_attribute(@identifier,
658
- links[:sec_perms], "application/xml", @credentials))
639
+ doc = xml_document(@server.read(links[:sec_perms], "application/xml",
640
+ @credentials))
659
641
 
660
642
  xpath_find(doc, XPaths[:sec_perm]).each do |p|
661
643
  user = xml_node_content(xpath_first(p, XPaths[:sec_uname]))
@@ -687,22 +669,22 @@ module T2Server
687
669
  def revoke_permission(username)
688
670
  return unless owner?
689
671
 
690
- path = "#{links[:sec_perms]}/#{username}"
691
- @server.delete_run_attribute(@identifier, path, @credentials)
672
+ uri = Util.append_to_uri_path(links[:sec_perms], username)
673
+ @server.delete(uri, @credentials)
692
674
  end
693
675
 
694
676
  # :call-seq:
695
- # add_password_credential(service_uri, username, password) -> String
677
+ # add_password_credential(service_uri, username, password) -> URI
696
678
  #
697
679
  # Provide a username and password credential for the secure service at the
698
- # specified URI. The id of the credential on the server is returned. Only
680
+ # specified URI. The URI of the credential on the server is returned. Only
699
681
  # the owner of a run may supply credentials for it. +nil+ is returned if a
700
682
  # user other than the owner uses this method.
701
683
  def add_password_credential(uri, username, password)
702
684
  return unless owner?
703
685
 
704
686
  # Is this a new credential, or an update?
705
- id = credential(uri)
687
+ cred_uri = credential(uri)
706
688
 
707
689
  # basic uri checks
708
690
  uri = _check_cred_uri(uri)
@@ -710,24 +692,22 @@ module T2Server
710
692
  cred = XML::Fragments::USERPASS_CRED % [uri, username, password]
711
693
  value = XML::Fragments::CREDENTIAL % cred
712
694
 
713
- if id.nil?
714
- @server.create_run_attribute(@identifier, links[:sec_creds], value,
715
- "application/xml", @credentials)
716
- else
717
- path = "#{links[:sec_creds]}/#{id}"
718
- @server.set_run_attribute(@identifier, path, value, "application/xml",
695
+ if cred_uri.nil?
696
+ @server.create(links[:sec_creds], value, "application/xml",
719
697
  @credentials)
698
+ else
699
+ @server.update(cred_uri, value, "application/xml", @credentials)
720
700
  end
721
701
  end
722
702
 
723
703
  # :call-seq:
724
704
  # add_keypair_credential(service_uri, filename, password,
725
- # alias = "Imported Certificate", type = :pkcs12) -> String
705
+ # alias = "Imported Certificate", type = :pkcs12) -> URI
726
706
  #
727
707
  # Provide a client certificate credential for the secure service at the
728
708
  # specified URI. You will need to provide the password to unlock the
729
709
  # private key. You will also need to provide the 'alias' or 'friendlyName'
730
- # of the key you wish to use if it differs from the default. The id of the
710
+ # of the key you wish to use if it differs from the default. The URI of the
731
711
  # credential on the server is returned. Only the owner of a run may supply
732
712
  # credentials for it. +nil+ is returned if a user other than the owner uses
733
713
  # this method.
@@ -745,36 +725,35 @@ module T2Server
745
725
  type, password]
746
726
  value = XML::Fragments::CREDENTIAL % cred
747
727
 
748
- @server.create_run_attribute(@identifier, links[:sec_creds], value,
749
- "application/xml", @credentials)
728
+ @server.create(links[:sec_creds], value, "application/xml", @credentials)
750
729
  end
751
730
 
752
731
  # :call-seq:
753
732
  # credentials -> Hash
754
733
  #
755
- # Return a hash (service_uri => identifier) of all the credentials provided
756
- # for this run. Only the owner of a run may query its credentials. +nil+ is
757
- # returned if a user other than the owner uses this method.
734
+ # Return a hash (service_uri => credential_uri) of all the credentials
735
+ # provided for this run. Only the owner of a run may query its credentials.
736
+ # +nil+ is returned if a user other than the owner uses this method.
758
737
  def credentials
759
738
  return unless owner?
760
739
 
761
740
  creds = {}
762
- doc = xml_document(@server.get_run_attribute(@identifier,
763
- links[:sec_creds], "application/xml", @credentials))
741
+ doc = xml_document(@server.read(links[:sec_creds], "application/xml",
742
+ @credentials))
764
743
 
765
744
  xpath_find(doc, XPaths[:sec_cred]).each do |c|
766
- uri = xml_node_content(xpath_first(c, XPaths[:sec_suri]))
767
- id = xml_node_attribute(c, "href").split('/')[-1]
768
- creds[uri] = id
745
+ uri = URI.parse(xml_node_content(xpath_first(c, XPaths[:sec_suri])))
746
+ cred_uri = URI.parse(xml_node_attribute(c, "href"))
747
+ creds[uri] = cred_uri
769
748
  end
770
749
 
771
750
  creds
772
751
  end
773
752
 
774
753
  # :call-seq:
775
- # credential(service_uri) -> String
754
+ # credential(service_uri) -> URI
776
755
  #
777
- # Return the identifier of the credential set for the supplied service, if
756
+ # Return the URI of the credential set for the supplied service, if
778
757
  # any. Only the owner of a run may query its credentials. +nil+ is
779
758
  # returned if a user other than the owner uses this method.
780
759
  def credential(uri)
@@ -792,8 +771,7 @@ module T2Server
792
771
  def delete_credential(uri)
793
772
  return unless owner?
794
773
 
795
- path = "#{links[:sec_creds]}/#{credentials[uri]}"
796
- @server.delete_run_attribute(@identifier, path, @credentials)
774
+ @server.delete(credentials[uri], @credentials)
797
775
  end
798
776
 
799
777
  # :call-seq:
@@ -805,15 +783,14 @@ module T2Server
805
783
  def delete_all_credentials
806
784
  return unless owner?
807
785
 
808
- @server.delete_run_attribute(@identifier, links[:sec_creds],
809
- @credentials)
786
+ @server.delete(links[:sec_creds], @credentials)
810
787
  end
811
788
 
812
789
  # :call-seq:
813
- # add_trust(filename, type = :x509) -> String
790
+ # add_trust(filename, type = :x509) -> URI
814
791
  #
815
792
  # Add a trusted identity (server public key) to verify peers when using
816
- # https connections to Web Services. The id of the trust on the server is
793
+ # https connections to Web Services. The URI of the trust on the server is
817
794
  # returned. Only the owner of a run may add a trust. +nil+ is returned if
818
795
  # a user other than the owner uses this method.
819
796
  def add_trust(filename, type = :x509)
@@ -824,43 +801,41 @@ module T2Server
824
801
  contents = Base64.encode64(IO.read(filename))
825
802
 
826
803
  value = XML::Fragments::TRUST % [contents, type]
827
- @server.create_run_attribute(@identifier, links[:sec_trusts], value,
828
- "application/xml", @credentials)
804
+ @server.create(links[:sec_trusts], value, "application/xml", @credentials)
829
805
  end
830
806
 
831
807
  # :call-seq:
832
808
  # trusts -> Array
833
809
  #
834
- # Return a list of all the ids of trusts that have been registered for this
835
- # run. At present there is no way to differentiate between trusts without
836
- # noting the id returned when originally uploaded. Only the owner of a run
837
- # may query its trusts. +nil+ is returned if a user other than the owner
838
- # uses this method.
810
+ # Return a list of all the URIs of trusts that have been registered for
811
+ # this run. At present there is no way to differentiate between trusts
812
+ # without noting the URI returned when originally uploaded. Only the owner
813
+ # of a run may query its trusts. +nil+ is returned if a user other than the
814
+ # owner uses this method.
839
815
  def trusts
840
816
  return unless owner?
841
817
 
842
- t_ids = []
843
- doc = xml_document(@server.get_run_attribute(@identifier,
844
- links[:sec_trusts], "application/xml", @credentials))
818
+ t_uris = []
819
+ doc = xml_document(@server.read(links[:sec_trusts], "application/xml",
820
+ @credentials))
845
821
 
846
822
  xpath_find(doc, XPaths[:sec_trust]). each do |t|
847
- t_ids << xml_node_attribute(t, "href").split('/')[-1]
823
+ t_uris << URI.parse(xml_node_attribute(t, "href"))
848
824
  end
849
825
 
850
- t_ids
826
+ t_uris
851
827
  end
852
828
 
853
829
  # :call-seq:
854
- # delete_trust(id) -> bool
830
+ # delete_trust(URI) -> bool
855
831
  #
856
- # Delete the trust with the provided id. Only the owner of a run may
832
+ # Delete the trust with the provided URI. Only the owner of a run may
857
833
  # delete its trusts. +nil+ is returned if a user other than the owner uses
858
834
  # this method.
859
- def delete_trust(id)
835
+ def delete_trust(uri)
860
836
  return unless owner?
861
837
 
862
- path = "#{links[:sec_trusts]}/#{id}"
863
- @server.delete_run_attribute(@identifier, path, @credentials)
838
+ @server.delete(uri, @credentials)
864
839
  end
865
840
 
866
841
  # :call-seq:
@@ -872,17 +847,15 @@ module T2Server
872
847
  def delete_all_trusts
873
848
  return unless owner?
874
849
 
875
- @server.delete_run_attribute(@identifier, links[:sec_trusts],
876
- @credentials)
850
+ @server.delete(links[:sec_trusts], @credentials)
877
851
  end
878
852
 
879
853
  # :stopdoc:
880
854
  # Outputs are represented as a directory structure with the eventual list
881
855
  # items (leaves) as files. This method (not part of the public API)
882
856
  # downloads a file from the run's working directory.
883
- def download_output_data(path, range = nil)
884
- @server.download_run_file(@identifier, "#{links[:wdir]}/out/#{path}",
885
- range, @credentials)
857
+ def download_output_data(uri, range = nil)
858
+ @server.read(uri, "application/octet-stream", range, @credentials)
886
859
  end
887
860
  # :startdoc:
888
861
 
@@ -923,16 +896,14 @@ module T2Server
923
896
  end
924
897
 
925
898
  xml_value = xml_text_node(port.file)
926
- path = "#{links[:inputs]}/input/#{port.name}"
927
- @server.set_run_attribute(self, path,
928
- XML::Fragments::RUNINPUTFILE % xml_value, "application/xml",
929
- @credentials)
899
+ uri = Util.append_to_uri_path(links[:inputs], "input/#{port.name}")
900
+ @server.update(uri, XML::Fragments::RUNINPUTFILE % xml_value,
901
+ "application/xml", @credentials)
930
902
  else
931
903
  xml_value = xml_text_node(port.value)
932
- path = "#{links[:inputs]}/input/#{port.name}"
933
- @server.set_run_attribute(self, path,
934
- XML::Fragments::RUNINPUTVALUE % xml_value, "application/xml",
935
- @credentials)
904
+ uri = Util.append_to_uri_path(links[:inputs], "input/#{port.name}")
905
+ @server.update(uri, XML::Fragments::RUNINPUTVALUE % xml_value,
906
+ "application/xml", @credentials)
936
907
  end
937
908
  end
938
909
  end
@@ -960,8 +931,7 @@ module T2Server
960
931
  # Create and upload the baclava data.
961
932
  baclava = Taverna::Baclava::Writer.write(data_map)
962
933
  upload_data(baclava, "in.baclava")
963
- @server.set_run_attribute(@identifier, links[:baclava], "in.baclava",
964
- "text/plain", @credentials)
934
+ @server.update(links[:baclava], "in.baclava", "text/plain", @credentials)
965
935
  end
966
936
 
967
937
  # Check that the uri passed in is suitable for credential use:
@@ -987,8 +957,8 @@ module T2Server
987
957
  # returned as a list of two lists, "lists" and "values" respectively.
988
958
  def _ls_ports(dir="", top=true)
989
959
  dir = Util.strip_path_slashes(dir)
990
- dir_list = @server.get_run_attribute(@identifier,
991
- "#{links[:wdir]}/#{dir}", "*/*", @credentials)
960
+ uri = Util.append_to_uri_path(links[:wdir], dir)
961
+ dir_list = @server.read(uri, "*/*", @credentials)
992
962
 
993
963
  # compile a list of directory entries stripping the
994
964
  # directory name from the front of each filename
@@ -1030,8 +1000,8 @@ module T2Server
1030
1000
  return "#{@server.uri}/rest/runs/#{@identifier}/" +
1031
1001
  "#{links[:wdir]}/out/#{output}"
1032
1002
  else
1033
- return @server.get_run_attribute(@identifier,
1034
- "#{links[:wdir]}/out/#{output}", "application/octet-stream",
1003
+ out_uri = Util.append_to_uri_path(links[:wdir], "out/#{output}")
1004
+ return @server.read(out_uri, "application/octet-stream",
1035
1005
  @credentials)
1036
1006
  end
1037
1007
  end
@@ -1054,9 +1024,10 @@ module T2Server
1054
1024
  result << "#{@server.uri}/rest/runs/#{@identifier}/" +
1055
1025
  "#{links[:wdir]}/out/#{output}/#{item}"
1056
1026
  else
1057
- result << @server.get_run_attribute(@identifier,
1058
- "#{links[:wdir]}/out/#{output}/#{item}",
1059
- "application/octet-stream", @credentials)
1027
+ out_uri = Util.append_to_uri_path(links[:wdir],
1028
+ "out/#{output}/#{item}")
1029
+ result << @server.read(out_uri, "application/octet-stream",
1030
+ @credentials)
1060
1031
  end
1061
1032
  end
1062
1033
 
@@ -1065,8 +1036,8 @@ module T2Server
1065
1036
 
1066
1037
  def _get_input_port_info
1067
1038
  ports = {}
1068
- port_desc = @server.get_run_attribute(@identifier, links[:inputexp],
1069
- "application/xml", @credentials)
1039
+ port_desc = @server.read(links[:inputexp], "application/xml",
1040
+ @credentials)
1070
1041
 
1071
1042
  doc = xml_document(port_desc)
1072
1043
 
@@ -1080,8 +1051,12 @@ module T2Server
1080
1051
 
1081
1052
  def _get_output_port_info
1082
1053
  ports = {}
1083
- port_desc = @server.get_run_attribute(@identifier, links[:output],
1084
- "application/xml", @credentials)
1054
+
1055
+ begin
1056
+ port_desc = @server.read(links[:output], "application/xml", @credentials)
1057
+ rescue AttributeNotFoundError => anfe
1058
+ return ports
1059
+ end
1085
1060
 
1086
1061
  doc = xml_document(port_desc)
1087
1062
 
@@ -1095,8 +1070,8 @@ module T2Server
1095
1070
 
1096
1071
  def _get_run_description
1097
1072
  if @run_doc.nil?
1098
- @run_doc = xml_document(@server.get_run_attribute(@identifier, "",
1099
- "application/xml", @credentials))
1073
+ @run_doc = xml_document(@server.read(@uri, "application/xml",
1074
+ @credentials))
1100
1075
  end
1101
1076
 
1102
1077
  @run_doc
@@ -1116,34 +1091,33 @@ module T2Server
1116
1091
 
1117
1092
  [:expiry, :workflow, :status, :createtime, :starttime, :finishtime,
1118
1093
  :wdir, :inputs, :output, :securectx, :listeners].each do |key|
1119
- links[key] = xpath_attr(doc, XPaths[key], "href").split('/')[-1]
1094
+ links[key] = URI.parse(xpath_attr(doc, XPaths[key], "href"))
1120
1095
  end
1121
1096
 
1122
1097
  # get inputs
1123
- inputs = @server.get_run_attribute(@identifier, links[:inputs],
1124
- "application/xml",@credentials)
1098
+ inputs = @server.read(links[:inputs], "application/xml",@credentials)
1125
1099
  doc = xml_document(inputs)
1126
1100
 
1127
- links[:baclava] = "#{links[:inputs]}/" +
1128
- xpath_attr(doc, XPaths[:baclava], "href").split('/')[-1]
1129
- links[:inputexp] = "#{links[:inputs]}/" +
1130
- xpath_attr(doc, XPaths[:inputexp], "href").split('/')[-1]
1101
+ links[:baclava] = URI.parse(xpath_attr(doc, XPaths[:baclava], "href"))
1102
+ links[:inputexp] = URI.parse(xpath_attr(doc, XPaths[:inputexp], "href"))
1131
1103
 
1132
1104
  # set io properties
1133
- links[:io] = "#{links[:listeners]}/io"
1134
- links[:stdout] = "#{links[:io]}/properties/stdout"
1135
- links[:stderr] = "#{links[:io]}/properties/stderr"
1136
- links[:exitcode] = "#{links[:io]}/properties/exitcode"
1105
+ links[:io] = Util.append_to_uri_path(links[:listeners], "io")
1106
+ links[:stdout] = Util.append_to_uri_path(links[:io], "properties/stdout")
1107
+ links[:stderr] = Util.append_to_uri_path(links[:io], "properties/stderr")
1108
+ links[:exitcode] = Util.append_to_uri_path(links[:io], "properties/exitcode")
1137
1109
 
1138
1110
  # security properties - only available to the owner of a run
1139
1111
  if owner?
1140
- securectx = @server.get_run_attribute(@identifier, links[:securectx],
1141
- "application/xml", @credentials)
1112
+ securectx = @server.read(links[:securectx], "application/xml",
1113
+ @credentials)
1142
1114
  doc = xml_document(securectx)
1143
1115
 
1144
1116
  [:sec_creds, :sec_perms, :sec_trusts].each do |key|
1145
- links[key] = "#{links[:securectx]}/" + xpath_attr(doc, XPaths[key],
1146
- "href").split('/')[-1]
1117
+ #links[key] = "#{links[:securectx]}/" + xpath_attr(doc, XPaths[key],
1118
+ # "href").split('/')[-1]
1119
+ links[key] = Util.append_to_uri_path(links[:securectx],
1120
+ xpath_attr(doc, XPaths[key], "href").split('/')[-1])
1147
1121
  end
1148
1122
  end
1149
1123