projects
/
arvados.git
/ blobdiff
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
4291: Workbench Collection sharing buttons are actual buttons.
[arvados.git]
/
apps
/
workbench
/
app
/
models
/
arvados_api_client.rb
diff --git
a/apps/workbench/app/models/arvados_api_client.rb
b/apps/workbench/app/models/arvados_api_client.rb
index f36627f07b62e5034a05301791655bb7cf6ab881..0a99d662cbeaeca246379cc967c9cba6e9ec3840 100644
(file)
--- a/
apps/workbench/app/models/arvados_api_client.rb
+++ b/
apps/workbench/app/models/arvados_api_client.rb
@@
-8,10
+8,21
@@
class ArvadosApiClient
def initialize(request_url, errmsg)
@request_url = request_url
@api_response ||= {}
def initialize(request_url, errmsg)
@request_url = request_url
@api_response ||= {}
+ errors = @api_response[:errors]
+ if not errors.is_a?(Array)
+ @api_response[:errors] = [errors || errmsg]
+ end
super(errmsg)
end
end
super(errmsg)
end
end
+ class NoApiResponseException < ApiError
+ def initialize(request_url, exception)
+ @api_response_s = exception.to_s
+ super(request_url,
+ "#{exception.class.to_s} error connecting to API server")
+ end
+ end
class InvalidApiResponseException < ApiError
def initialize(request_url, api_response)
class InvalidApiResponseException < ApiError
def initialize(request_url, api_response)
@@
-67,7
+78,8
@@
class ArvadosApiClient
@client_mtx = Mutex.new
end
@client_mtx = Mutex.new
end
- def api(resources_kind, action, data=nil)
+ def api(resources_kind, action, data=nil, tokens={})
+
profile_checkpoint
if not @api_client
profile_checkpoint
if not @api_client
@@
-89,8
+101,8
@@
class ArvadosApiClient
url.sub! '/arvados/v1/../../', '/'
query = {
url.sub! '/arvados/v1/../../', '/'
query = {
- 'api_token' => Thread.current[:arvados_api_token] || '',
- 'reader_tokens' => (Thread.current[:reader_tokens] || []).to_json,
+ 'api_token' =>
tokens[:arvados_api_token] ||
Thread.current[:arvados_api_token] || '',
+ 'reader_tokens' => (
tokens[:reader_tokens] ||
Thread.current[:reader_tokens] || []).to_json,
}
if !data.nil?
data.each do |k,v|
}
if !data.nil?
data.each do |k,v|
@@
-113,11
+125,13
@@
class ArvadosApiClient
header = {"Accept" => "application/json"}
header = {"Accept" => "application/json"}
- profile_checkpoint { "Prepare request #{url} #{query[:uuid]} #{query[:where]} #{query[:filters]}" }
+ profile_checkpoint { "Prepare request #{url} #{query[:uuid]} #{query[:where]} #{query[:filters]}
#{query[:order]}
" }
msg = @client_mtx.synchronize do
msg = @client_mtx.synchronize do
- @api_client.post(url,
- query,
- header: header)
+ begin
+ @api_client.post(url, query, header: header)
+ rescue => exception
+ raise NoApiResponseException.new(url, exception)
+ end
end
profile_checkpoint 'API transaction'
end
profile_checkpoint 'API transaction'
@@
-129,7
+143,8
@@
class ArvadosApiClient
if not resp.is_a? Hash
raise InvalidApiResponseException.new(url, msg)
elsif msg.status_code != 200
if not resp.is_a? Hash
raise InvalidApiResponseException.new(url, msg)
elsif msg.status_code != 200
- error_class = ERROR_CODE_CLASSES.fetch(msg.status_code, ApiError)
+ error_class = ERROR_CODE_CLASSES.fetch(msg.status_code,
+ ApiErrorResponseException)
raise error_class.new(url, msg)
end
raise error_class.new(url, msg)
end