X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/7bc20af4935fee1caa566e86a074022f0b60d166..2774760a4ccdb65336e2aad32b5fd57fc7bc5bb3:/sdk/ruby/lib/arvados.rb diff --git a/sdk/ruby/lib/arvados.rb b/sdk/ruby/lib/arvados.rb index eedee6ea2a..6a9a52b106 100644 --- a/sdk/ruby/lib/arvados.rb +++ b/sdk/ruby/lib/arvados.rb @@ -108,17 +108,23 @@ class Arvados class Google::APIClient def discovery_document(api, version) api = api.to_s - return @discovery_documents["#{api}:#{version}"] ||= + discovery_uri = self.discovery_uri(api, version) + discovery_uri_hash = Digest::MD5.hexdigest(discovery_uri) + return @discovery_documents[discovery_uri_hash] ||= 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-#{discovery_uri_hash}.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), + :uri => discovery_uri, :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 @@ -142,6 +148,10 @@ class Arvados $stderr.puts "#{File.split($0).last} #{$$}: #{message}" if @@debuglevel >= verbosity end + def debuglog *args + self.class.debuglog *args + end + def config(config_file_path="~/.config/arvados/settings.conf") return @@config if @@config @@ -157,6 +167,10 @@ class Arvados # specifies a _HOST without asking for _INSECURE, we certainly # shouldn't give the config file a chance to create a # system-wide _INSECURE state for this user. + # + # Note: If we start using additional configuration settings from + # this file in the future, we might have to read the file anyway + # instead of returning here. return (@@config = config) end @@ -173,15 +187,15 @@ class Arvados var.strip! val.strip! # allow environment settings to override config files. - if val + if !var.empty? and val config[var] ||= val else - warn "#{expanded_path}: #{lineno}: could not parse `#{line}'" + debuglog "#{expanded_path}: #{lineno}: could not parse `#{line}'", 0 end end end - rescue - debuglog "HOME environment variable (#{ENV['HOME']}) not set, not using #{config_file_path}", 0 + rescue StandardError => e + debuglog "Ignoring error reading #{config_file_path}: #{e}", 0 end @@config = config @@ -202,8 +216,6 @@ class Arvados end def self.api_exec(method, parameters={}) api_method = arvados_api.send(api_models_sym).send(method.name.to_sym) - parameters = parameters. - merge(:api_token => arvados.config['ARVADOS_API_TOKEN']) parameters.each do |k,v| parameters[k] = v.to_json if v.is_a? Array or v.is_a? Hash end @@ -222,7 +234,10 @@ class Arvados execute(:api_method => api_method, :authenticated => false, :parameters => parameters, - :body => body) + :body => body, + :headers => { + authorization: 'OAuth2 '+arvados.config['ARVADOS_API_TOKEN'] + }) resp = JSON.parse result.body, :symbolize_names => true if resp[:errors] raise Arvados::TransactionFailedError.new(resp[:errors])