summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/compound.rb2
-rw-r--r--lib/error.rb56
-rw-r--r--lib/opentox.rb12
-rw-r--r--lib/rest-client-wrapper.rb6
-rw-r--r--lib/task.rb17
5 files changed, 55 insertions, 38 deletions
diff --git a/lib/compound.rb b/lib/compound.rb
index 5992ee3..7d84a3c 100644
--- a/lib/compound.rb
+++ b/lib/compound.rb
@@ -83,7 +83,7 @@ module OpenTox
begin
RestClientWrapper.get("#{CACTUS_URI}#{to_inchi}/names").split("\n")
rescue
- "not available"
+ "CACTVS service not responding."
end
end
diff --git a/lib/error.rb b/lib/error.rb
index d1abe52..84918b7 100644
--- a/lib/error.rb
+++ b/lib/error.rb
@@ -7,43 +7,49 @@ class RuntimeError
super message
@uri = uri
@http_code ||= 500
- $logger.error "\n"+self.to_turtle
+ @rdf = RDF::Graph.new
+ subject = RDF::Node.new
+ @rdf << [subject, RDF.type, RDF::OT.ErrorReport]
+ @rdf << [subject, RDF::OT.actor, @uri.to_s]
+ @rdf << [subject, RDF::OT.message, message.to_s]
+ @rdf << [subject, RDF::OT.statusCode, @http_code]
+ @rdf << [subject, RDF::OT.errorCode, self.class.to_s]
+ @rdf << [subject, RDF::OT.errorCause, short_backtrace]
+ $logger.error("\n"+self.to_turtle)
end
- # define to_ methods for all RuntimeErrors and various rdf formats
- RDF_FORMATS.each do |format|
+ def short_backtrace
+ backtrace = caller.collect{|line| line unless line =~ /#{File.dirname(__FILE__)}/}.compact
+ cut_index = backtrace.find_index{|line| line.match /sinatra|minitest/}
+ cut_index ||= backtrace.size
+ cut_index -= 1
+ cut_index = backtrace.size-1 if cut_index < 0
+ backtrace[0..cut_index].join("\n")
+ end
+ RDF_FORMATS.each do |format|
+ # rdf serialization methods for all formats e.g. to_rdfxml
send :define_method, "to_#{format}".to_sym do
- rdf = RDF::Writer.for(format).buffer do |writer|
- # TODO: not used for turtle
- # http://rdf.rubyforge.org/RDF/Writer.html#
- writer.prefix :ot, RDF::URI('http://www.opentox.org/api/1.2#')
- writer.prefix :ot1_1, RDF::URI('http://www.opentox.org/api/1.1#')
- subject = RDF::Node.new
- writer << [subject, RDF.type, RDF::OT.ErrorReport]
- writer << [subject, RDF::OT.actor, @uri.to_s]
- writer << [subject, RDF::OT.message, message.to_s]
- writer << [subject, RDF::OT.statusCode, @http_code]
- writer << [subject, RDF::OT.errorCode, self.class.to_s]
-
- # cut backtrace
- backtrace = caller.collect{|line| line unless line =~ /#{File.dirname(__FILE__)}/}.compact
- cut_index = backtrace.find_index{|line| line.match /sinatra|minitest/}
- cut_index ||= backtrace.size
- cut_index -= 1
- cut_index = backtrace.size-1 if cut_index < 0
- details = backtrace[0..cut_index].join("\n")
- writer << [subject, RDF::OT.errorCause, details]
+ RDF::Writer.for(format).buffer do |writer|
+ @rdf.each{|statement| writer << statement}
end
- rdf
end
+ end
+ def to_turtle # redefine to use prefixes (not supported by RDF::Writer)
+ prefixes = {:rdf => "http://www.w3.org/1999/02/22-rdf-syntax-ns#"}
+ ['OT', 'DC', 'XSD', 'OLO'].each{|p| prefixes[p.downcase.to_sym] = eval("RDF::#{p}.to_s") }
+ RDF::N3::Writer.for(:turtle).buffer(:prefixes => prefixes) do |writer|
+ @rdf.each{|statement| writer << statement}
+ end
end
+
end
module OpenTox
class Error < RuntimeError
+
def initialize code, message, uri=nil
@http_code = code
super message, uri
@@ -72,7 +78,7 @@ module OpenTox
# define global methods for raising errors, eg. bad_request_error
Object.send(:define_method, klass.underscore.to_sym) do |message,uri=nil|
- raise c, message, uri
+ raise c.new(message, uri)
end
end
diff --git a/lib/opentox.rb b/lib/opentox.rb
index 2c4578f..80644db 100644
--- a/lib/opentox.rb
+++ b/lib/opentox.rb
@@ -118,12 +118,11 @@ module OpenTox
if URI.task?(uri)
t = OpenTox::Task.new uri
t.wait
- if t.completed?
- uri = t.resultURI
- else
+ unless t.completed?
#TODO raise correct error
- internal_server_error "Task #{uri} failed with #{$!.inspect}"
+ #internal_server_error "Task #{uri} failed with #{$!.inspect}"
end
+ uri = t.resultURI
end
uri
end
@@ -140,17 +139,16 @@ module OpenTox
# rdf serialization methods for all formats e.g. to_rdfxml
send :define_method, "to_#{format}".to_sym do
- rdf = RDF::Writer.for(format).buffer do |writer|
+ RDF::Writer.for(format).buffer do |writer|
@rdf.each{|statement| writer << statement}
end
- rdf
end
end
def to_turtle # redefine to use prefixes (not supported by RDF::Writer)
prefixes = {:rdf => "http://www.w3.org/1999/02/22-rdf-syntax-ns#"}
['OT', 'DC', 'XSD', 'OLO'].each{|p| prefixes[p.downcase.to_sym] = eval("RDF::#{p}.to_s") }
- turtle = RDF::N3::Writer.for(:turtle).buffer(:prefixes => prefixes) do |writer|
+ RDF::N3::Writer.for(:turtle).buffer(:prefixes => prefixes) do |writer|
@rdf.each{|statement| writer << statement}
end
end
diff --git a/lib/rest-client-wrapper.rb b/lib/rest-client-wrapper.rb
index e89c90d..387a01b 100644
--- a/lib/rest-client-wrapper.rb
+++ b/lib/rest-client-wrapper.rb
@@ -17,9 +17,9 @@ module OpenTox
# check input
@subjectid = headers[:subjectid] ? headers[:subjectid] : nil
- bad_request_error "Invalid URI: '#{uri}'" unless URI.valid? uri
- #not_found_error "URI '#{uri}' not found." unless URI.accessible?(uri, @subjectid) unless URI.ssl?(uri)
- bad_request_error "Headers are not a hash: #{headers.inspect}" unless headers==nil or headers.is_a?(Hash)
+ bad_request_error "Invalid URI: '#{uri}'", uri unless URI.valid? uri
+ #not_found_error "URI '#{uri}' not found.", uri unless URI.accessible?(uri, @subjectid) unless URI.ssl?(uri)
+ bad_request_error "Headers are not a hash: #{headers.inspect}", uri 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|
if defined? $aa || URI(uri).host == URI($aa[:uri]).host
diff --git a/lib/task.rb b/lib/task.rb
index 0b0aea2..42bc84b 100644
--- a/lib/task.rb
+++ b/lib/task.rb
@@ -47,7 +47,7 @@ module OpenTox
def kill
Process.kill(9,@pid)
Process.kill(9,@observer_pid)
- rescue # no need to raise an exeption if processes are not running
+ rescue # no need to raise an exception if processes are not running
end
def description
@@ -82,7 +82,6 @@ module OpenTox
dur = [[(Time.new - start_time)/20.0,0.3].max,300.0].min
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
- get
end
end
@@ -114,6 +113,20 @@ module OpenTox
end
end
+ def error_report
+ report = {}
+ query = RDF::Query.new({
+ :report => {
+ RDF.type => RDF::OT.ErrorReport,
+ :property => :value,
+ }
+ })
+ query.execute(@rdf).each do |solution|
+ report[solution.property] = solution.value.to_s
+ end
+ report
+ end
+
#TODO: subtasks (only for progress)
end