From 8a5e3d69a16fc0c7d551e000270fe243ed121c85 Mon Sep 17 00:00:00 2001 From: Christoph Helma Date: Fri, 4 May 2012 10:29:55 +0000 Subject: ntriples as default format, rdfxml as fallback --- lib/error.rb | 53 ---------------------------------------------- lib/opentox-client.rb | 3 --- lib/opentox.rb | 9 ++++---- lib/rest-client-wrapper.rb | 1 - lib/task.rb | 12 +---------- 5 files changed, 6 insertions(+), 72 deletions(-) (limited to 'lib') diff --git a/lib/error.rb b/lib/error.rb index 58b9816..64b0fb1 100644 --- a/lib/error.rb +++ b/lib/error.rb @@ -87,57 +87,4 @@ module OpenTox end end -=begin - # TODO: create reports directly from errors, requires modified task service - class ErrorReport - def initialize http_code, error - @http_code = http_code - @report = {} - @report[RDF::OT.actor] = error.uri.to_s - @report[RDF::OT.message] = error.message.to_s - @report[RDF::OT.statusCode] = @http_code - @report[RDF::OT.errorCode] = error.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 - @report[RDF::OT.errorDetails] = backtrace[0..cut_index].join("\n") - @report[RDF::OT.errorDetails] += "REST paramenters:\n#{error.request.args.inspect}" if defined? error.request - #@report[RDF::OT.message] += "\n" + error.response.body.to_s if defined? error.response - # TODO fix Error cause - # should point to another errorReport, but errorReports do not have URIs - # create a separate service? - #report[RDF::OT.errorCause] = @report if defined?(@report) - end - - # define to_ and self.from_ methods for various rdf formats - RDF_FORMATS.each do |format| - - 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 - @report.each do |predicate,object| - writer << [subject, predicate, object] if object - end - end - rdf - end - - 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 } - end - report - end - end - end -=end end diff --git a/lib/opentox-client.rb b/lib/opentox-client.rb index 0546634..8c19225 100644 --- a/lib/opentox-client.rb +++ b/lib/opentox-client.rb @@ -15,11 +15,8 @@ RDF::OT = RDF::Vocabulary.new 'http://www.opentox.org/api/1.2#' RDF::OT1 = RDF::Vocabulary.new 'http://www.opentox.org/api/1.1#' RDF::OTA = RDF::Vocabulary.new 'http://www.opentox.org/algorithmTypes.owl#' -#CLASSES = ["Compound", "Feature", "Dataset", "Algorithm", "Model", "Validation", "Task", "ErrorReport", "Investigation"] CLASSES = ["Generic", "Compound", "Feature", "Dataset", "Algorithm", "Model", "Validation", "Task", "Investigation"] RDF_FORMATS = [:rdfxml,:ntriples,:turtle] -#$default_rdf = "text/plain" -$default_rdf = "application/rdf+xml" # Regular expressions for parsing classification data TRUE_REGEXP = /^(true|active|1|1.0|tox|activating|carcinogen|mutagenic)$/i diff --git a/lib/opentox.rb b/lib/opentox.rb index 2682258..f79b51b 100644 --- a/lib/opentox.rb +++ b/lib/opentox.rb @@ -21,9 +21,9 @@ module OpenTox # Load metadata from service def pull - # TODO generic method for all formats - #parse_rdfxml RestClientWrapper.get(@uri,{},{:accept => $default_rdf, :subjectid => @subjectid}) parse_ntriples RestClientWrapper.get(@uri,{},{:accept => "text/plain", :subjectid => @subjectid}) + rescue # fall back to rdfxml + parse_rdfxml RestClientWrapper.get(@uri,{},{:accept => "application/rdf+xml", :subjectid => @subjectid}) end # Get object metadata @@ -48,8 +48,9 @@ module OpenTox # Save object at service def save - #TODO: dynamic assignment - put self.to_rdfxml, { :content_type => $default_rdf} + put self.to_ntriples, { :content_type => "text/plain"} + rescue # fall back to rdfxml + put self.to_rdfxml, { :content_type => "application/rdf+xml"} end RDF_FORMATS.each do |format| diff --git a/lib/rest-client-wrapper.rb b/lib/rest-client-wrapper.rb index d5d9c82..479d5a5 100644 --- a/lib/rest-client-wrapper.rb +++ b/lib/rest-client-wrapper.rb @@ -18,7 +18,6 @@ module OpenTox # check input @subjectid = headers[:subjectid] ? headers[:subjectid] : nil bad_request_error "Invalid URI: '#{uri}'" unless URI.valid? uri - #TODO fix for internal installations 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) # make sure that no header parameters are set in the payload diff --git a/lib/task.rb b/lib/task.rb index 4cdbb51..ceb6fd9 100644 --- a/lib/task.rb +++ b/lib/task.rb @@ -9,11 +9,7 @@ module OpenTox def self.create service_uri, params={} uri = RDF::URI.new File.join(service_uri,SecureRandom.uuid) - #uri = RestClientWrapper.post service_uri - #puts uri task = Task.new uri - #task.pull - #puts task.to_turtle task.rdf << RDF::Statement.new(uri, RDF.type, RDF::OT.Task) task.rdf << RDF::Statement.new(uri, RDF::DC.date, RDF::Literal.new(DateTime.now)) task.rdf << RDF::Statement.new(uri, RDF::OT.hasStatus, RDF::Literal.new("Running")) @@ -27,7 +23,7 @@ module OpenTox if $!.respond_to? :to_ntriples RestClientWrapper.put(File.join(task.uri,'Error'),:errorReport => $!.to_ntriples,:content_type => 'text/plain') else - RestClientWrapper.put(File.join(task.uri,'Error')) #if $!.respond_to? :report + RestClientWrapper.put(File.join(task.uri,'Error')) end task.kill end @@ -72,7 +68,6 @@ module OpenTox end def completed(uri) - #TODO fix for https rewrites not_found_error "Result URI \"#{uri}\" does not exist." unless URI.accessible? uri RestClientWrapper.put(File.join(@uri,'Completed'),{:resultURI => uri}) end @@ -111,11 +106,6 @@ module OpenTox code >= 400 and code != 503 end - def errorReport - # TODO: fix rdf output at task service - not_implemented_error "RDF output of errorReports has to be fixed at task service" - end - [:hasStatus, :resultURI].each do |method| define_method method do response = self.[](RDF::OT[method]) -- cgit v1.2.3