X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/5fa38c36644bd122b8c31601aa864f05bf4fba73..df9e166a5ffc4aa79658bec1a5d552a3b413f0d8:/sdk/cli/bin/arv diff --git a/sdk/cli/bin/arv b/sdk/cli/bin/arv index f27711f41a..36ec037bd8 100755 --- a/sdk/cli/bin/arv +++ b/sdk/cli/bin/arv @@ -15,7 +15,7 @@ end begin require 'curb' require 'rubygems' - require 'google/api_client' + require 'arvados/google_api_client' require 'json' require 'pp' require 'trollop' @@ -24,6 +24,7 @@ begin require 'active_support/inflector' require 'yaml' require 'tempfile' + require 'net/http' rescue LoadError abort <<-EOS @@ -51,36 +52,6 @@ module Kernel end end -class Google::APIClient - def discovery_document(api, version) - api = api.to_s - 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-#{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 => discovery_uri, - :authenticated => false) - - 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 - - File.open(cached_doc) { |f| JSON.load f } - end - end -end - class ArvadosClient < Google::APIClient def execute(*args) if args.last.is_a? Hash @@ -220,7 +191,7 @@ def edit_and_commit_object initial_obj, tmp_stem, global_opts, &block can_retry = true if e.is_a? Psych::SyntaxError this_error = "YAML error parsing your input: #{e}" - elsif e.is_a? JSON::ParserError + elsif e.is_a? JSON::ParserError or e.is_a? Oj::ParseError this_error = "JSON error parsing your input: #{e}" elsif e.is_a? ArvadosAPIError this_error = "API responded with error #{e}" @@ -262,15 +233,14 @@ end def check_response result begin results = JSON.parse result.body - rescue JSON::ParserError => e + rescue JSON::ParserError, Oj::ParseError => e raise "Failed to parse server response:\n" + e.to_s end if result.response.status != 200 - require 'net/http' raise ArvadosAPIError.new("#{result.response.status}: #{ ((results['errors'] && results['errors'].join('\n')) || - Net::HTTPResponse::CODE_TO_OBJ[status.to_s].to_s.sub(/^Net::HTTP/, '')).titleize}") + Net::HTTPResponse::CODE_TO_OBJ[status.to_s].to_s.sub(/^Net::HTTP/, '').titleize)}") end results @@ -343,8 +313,8 @@ def arv_edit client, arvados, global_opts, remaining_opts :headers => { authorization: 'OAuth2 '+ENV['ARVADOS_API_TOKEN'] }) - check_response result - puts "Updated object #{uuid}" + results = check_response result + puts "Updated object #{results['uuid']}" else puts "Object is unchanged, did not update." end