return @discovery_documents["#{api}:#{version}"] ||=
begin
# fetch new API discovery doc if stale
- cached_doc = File.expand_path '~/.cache/arvados/discovery_uri.json'
- if not File.exist?(cached_doc) or (Time.now - File.mtime(cached_doc)) > 86400
+ cached_doc = File.expand_path '~/.cache/arvados/discovery_uri.json' rescue nil
+
+ if cached_doc.nil? or not File.exist?(cached_doc) or (Time.now - File.mtime(cached_doc)) > 86400
response = self.execute!(:http_method => :get,
:uri => self.discovery_uri(api, version),
:authenticated => false)
- FileUtils.makedirs(File.dirname cached_doc)
- File.open(cached_doc, 'w') do |f|
- f.puts response.body
+
+ begin
+ FileUtils.makedirs(File.dirname cached_doc)
+ File.open(cached_doc, 'w') do |f|
+ f.puts response.body
+ end
+ rescue
+ return JSON.load response.body
end
end
def init_config
# read authentication data from arvados configuration file if present
lineno = 0
- config_file = File.expand_path('~/.config/arvados/settings.conf')
- if File.exist? config_file then
+ config_file = File.expand_path('~/.config/arvados/settings.conf') rescue nil
+ if not config_file.nil? and File.exist? config_file then
File.open(config_file, 'r').each do |line|
lineno = lineno + 1
# skip comments
end
end
+def arv_edit_save_tmp tmp
+ FileUtils::cp tmp.path, tmp.path + ".saved"
+ puts "Saved contents to " + tmp.path + ".saved"
+end
+
def arv_edit client, arvados, global_opts, remaining_opts
uuid = remaining_opts.shift
if uuid.nil? or uuid == "-h" or uuid == "--help"
abort "Could not determine resource type #{m[2]}"
end
- require 'fileutils'
-
api_method = 'arvados.' + rsc + '.get'
result = client.execute(:api_method => eval(api_method),
yn = $stdin.read 1
end
if yn == 'n' or yn == 'N'
- FileUtils::cp tmp.path, tmp.path + ".saved"
- puts "Saved contents to " + tmp.path + ".saved"
- exit 1
+ arv_edit_save_tmp tmp
+ abort
end
end
else
authorization: 'OAuth2 '+ENV['ARVADOS_API_TOKEN']
})
rescue Exception => e
- FileUtils::cp tmp.path, tmp.path + ".saved"
puts "Error communicating with server, error was #{e}"
puts "Update body was:"
puts dumped
- puts "Saved contents to " + tmp.path + ".saved"
+ arv_edit_save_tmp tmp
abort
end
end
if result.response.status != 200
- FileUtils::cp tmp.path, tmp.path + ".saved"
puts "Update failed. Server responded #{result.response.status}: #{results['errors']} "
puts "Update body was:"
puts dumped
- puts "Saved contents to " + tmp.path + ".saved"
+ arv_edit_save_tmp tmp
abort
end
else