X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/198963abf16d86d809a6a9fde36bc9ffd74685fd..2b60134e4a943dc4cf76f9ff81106ad2ce695bfa:/sdk/cli/bin/arv diff --git a/sdk/cli/bin/arv b/sdk/cli/bin/arv index 0ecfb65147..a142dba10f 100755 --- a/sdk/cli/bin/arv +++ b/sdk/cli/bin/arv @@ -24,6 +24,7 @@ begin require 'active_support/inflector' require 'yaml' require 'tempfile' + require 'net/http' rescue LoadError abort <<-EOS @@ -220,10 +221,10 @@ 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? HttpResponse - this_error = "API responded with error #{e.status}" + elsif e.is_a? ArvadosAPIError + this_error = "API responded with error #{e}" else this_error = "#{e.class}: #{e}" can_retry = false @@ -256,22 +257,20 @@ def edit_and_commit_object initial_obj, tmp_stem, global_opts, &block nil end -class HttpResponse < RuntimeError - attr_reader :status - def initialize status - @status = status - end +class ArvadosAPIError < RuntimeError 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 - raise HttpResponse.new "#{result.response.status}: " + (results['errors'] && results['errors'].join('\n') || "") + 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)}") end results @@ -344,8 +343,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