From a5f8c658ba87a00950766182966b65c65d5e2b66 Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Fri, 2 Mar 2012 19:04:02 +0000 Subject: additional OpenTox errors, *_error methods in rest-client-wrapper --- lib/error.rb | 14 +++++++++++--- lib/rest-client-wrapper.rb | 10 +++++----- lib/task.rb | 12 +++++------- 3 files changed, 21 insertions(+), 15 deletions(-) (limited to 'lib') diff --git a/lib/error.rb b/lib/error.rb index 8368404..29f4234 100644 --- a/lib/error.rb +++ b/lib/error.rb @@ -19,20 +19,28 @@ module OpenTox end end - # create error classes dynamically + # OpenTox errors { "BadRequestError" => 400, "NotAuthorizedError" => 401, "NotFoundError" => 404, "ServiceUnavailableError" => 503, "TimeOutError" => 504, + "LockedError" => 423, + "NotImplementedError" => 501, }.each do |klass,code| + # create error classes c = Class.new Error do define_method :initialize do |message| super code, message end end OpenTox.const_set klass,c + + # define global methods for raising errors, eg. bad_request_error + Object.send(:define_method, klass.underscore.to_sym) do |message| + raise c.new message + end end # Errors received from RestClientWrapper calls @@ -88,7 +96,7 @@ module OpenTox # define to_ and self.from_ methods for various rdf formats [:rdfxml,:ntriples].each do |format| - define_singleton_method ("from_#{format}").to_sym do |rdf| + define_singleton_method "from_#{format}".to_sym do |rdf| report = ErrorReport.new RDF::Reader.for(format).new(rdf) do |reader| reader.each_statement{ |statement| report.rdf << statement } @@ -96,7 +104,7 @@ module OpenTox report end - send :define_method, ("to_#{format}").to_sym do + send :define_method, "to_#{format}".to_sym do rdfxml = RDF::Writer.for(format).buffer do |writer| @rdf.each{|statement| writer << statement} end diff --git a/lib/rest-client-wrapper.rb b/lib/rest-client-wrapper.rb index 17e1cd0..64c7d7e 100644 --- a/lib/rest-client-wrapper.rb +++ b/lib/rest-client-wrapper.rb @@ -28,14 +28,14 @@ module OpenTox @request = RestClient::Request.new(args) # check input - raise OpenTox::BadRequestError.new "Invalid URI: '#{uri}'" unless URI.valid? uri - raise OpenTox::BadRequestError.new "Unreachable URI: '#{uri}'" unless URI.accessible? uri - raise OpenTox::BadRequestError.new "Headers are not a hash: #{headers.inspect}" unless headers==nil or headers.is_a?(Hash) + bad_request_error "Invalid URI: '#{uri}'" unless URI.valid? uri + bad_request_error "Unreachable URI: '#{uri}'" unless URI.accessible? uri + bad_request_error "Headers are not a hash: #{headers.inspect}" unless headers==nil or headers.is_a?(Hash) # make sure that no header parameters are set in the payload [:accept,:content_type,:subjectid].each do |header| - raise OpenTox::BadRequestError.new "#{header} should be submitted in the headers" if payload and payload.is_a?(Hash) and payload[header] + bad_request_error "#{header} should be submitted in the headers" if payload and payload.is_a?(Hash) and payload[header] end - raise OpenTox::BadRequestError.new "waiting_task is not 'nil', OpenTox::SubTask or OpenTox::Task: #{waiting_task.class}" unless waiting_task.nil? or waiting_task.is_a?(OpenTox::Task) or waiting_task.is_a?(OpenTox::SubTask) + bad_request_error "waiting_task is not 'nil', OpenTox::SubTask or OpenTox::Task: #{waiting_task.class}" unless waiting_task.nil? or waiting_task.is_a?(OpenTox::Task) or waiting_task.is_a?(OpenTox::SubTask) begin diff --git a/lib/task.rb b/lib/task.rb index f75f87d..d7ad539 100644 --- a/lib/task.rb +++ b/lib/task.rb @@ -17,8 +17,7 @@ module OpenTox if URI.accessible?(result_uri) task.completed result_uri else - raise NotFoundError.new "\"#{result_uri}\" is not a valid result URI" - #task.error OpenTox::RestError.new :http_code => 404, :cause => "#{result_uri} is not a valid URI", :actor => params[:creator] + not_found_error "\"#{result_uri}\" is not a valid result URI" end rescue task.error $! @@ -62,8 +61,7 @@ module OpenTox end def completed(uri) - #error OpenTox::RestError.new :http_code => 404, :cause => "\"#{uri}\" does not exist.", :actor => creator unless URI.accessible? uri - raise NotFoundError.new "Result URI \"#{uri}\" does not exist." unless URI.accessible? uri + not_found_error "Result URI \"#{uri}\" does not exist." unless URI.accessible? uri RestClientWrapper.put(File.join(@uri,'Completed'),{:resultURI => uri}) end @@ -83,7 +81,7 @@ module OpenTox due_to_time = Time.new + DEFAULT_TASK_MAX_DURATION while running? sleep dur - raise TimeOutError.new "max wait time exceeded ("+DEFAULT_TASK_MAX_DURATION.to_s+"sec), task: '"+@uri.to_s+"'" if (Time.new > due_to_time) + time_out_error "max wait time exceeded ("+DEFAULT_TASK_MAX_DURATION.to_s+"sec), task: '"+@uri.to_s+"'" if (Time.new > due_to_time) end end @@ -116,9 +114,9 @@ module OpenTox super unless res.code == 200 else response = metadata[RDF::OT[method]].to_s - response = metadata[RDF::OT1[method]].to_s #if response.empty? # API 1.1 compatibility + response = metadata[RDF::OT1[method]].to_s if response.empty? # API 1.1 compatibility if response.empty? - raise NotFoundError.new "No #{method} metadata for #{@uri} " + not_found_error "No #{method} metadata for #{@uri} " end return response end -- cgit v1.2.3