diff options
Diffstat (limited to 'application.rb')
-rw-r--r-- | application.rb | 41 |
1 files changed, 33 insertions, 8 deletions
diff --git a/application.rb b/application.rb index 7d3de38..0507ad8 100644 --- a/application.rb +++ b/application.rb @@ -4,6 +4,8 @@ require 'opentox-ruby' set :lock, true +@@datadir = "data" + class PredictionCache < Ohm::Model attribute :compound_uri attribute :model_uri @@ -22,8 +24,24 @@ before do @id = @id.to_s.sub(/\//,'').to_i @uri = uri @id - @yaml_file = "public/#{@id}.yaml" - raise OpenTox::NotFoundError.new "Model #{@id} not found." unless File.exists? @yaml_file + @json_file = "#{@@datadir}/#{@id}.json" + raise OpenTox::NotFoundError.new "Model #{@id} not found." unless File.exists? @json_file + + extension = File.extname(request.path_info) + unless extension.empty? + case extension + when ".html" + @accept = 'text/html' + when ".yaml" + @accept = 'application/x-yaml' + when ".json" + @accept = 'application/json' + when ".rdfxml" + @accept = 'application/rdf+xml' + else + raise OpenTox::NotFoundError.new "File format #{extension} not supported." + end + end end # make sure subjectid is not included in params, subjectid is set as member variable @@ -35,7 +53,7 @@ require 'lazar.rb' helpers do def next_id - id = Dir["./public/*yaml"].collect{|f| File.basename(f.sub(/.yaml/,'')).to_i}.sort.last + id = Dir["./#{@@datadir}/*json"].collect{|f| File.basename(f.sub(/.json/,'')).to_i}.sort.last id = 0 if id.nil? id + 1 end @@ -58,15 +76,22 @@ helpers do end get '/?' do # get index of models - response['Content-Type'] = 'text/uri-list' - Dir["./public/*yaml"].collect{|f| File.basename(f.sub(/.yaml/,'')).to_i}.sort.collect{|n| uri n}.join("\n") + "\n" + uri_list = Dir["./#{@@datadir}/*json"].collect{|f| File.basename(f.sub(/.json/,'')).to_i}.sort.collect{|n| uri n}.join("\n") + "\n" + case @accept + when /html/ + response['Content-Type'] = 'text/html' + OpenTox.text_to_html uri_list + else + response['Content-Type'] = 'text/uri-list' + uri_list + end end delete '/:id/?' do LOGGER.debug "Deleting model with id "+@id.to_s begin - FileUtils.rm @yaml_file - if @subjectid and !File.exists? @yaml_file and @uri + FileUtils.rm @json_file + if @subjectid and !File.exists? @json_file and @uri begin res = OpenTox::Authorization.delete_policies_from_uri(@uri, @subjectid) LOGGER.debug "Policy deleted for Model URI: #{@uri} with result: #{res}" @@ -84,7 +109,7 @@ end delete '/?' do # TODO delete datasets - FileUtils.rm Dir["public/*.yaml"] + FileUtils.rm Dir["#{@@datadir}/*.json"] PredictionCache.all.each {|cache| cache.delete } response['Content-Type'] = 'text/plain' "All models and cached predictions deleted." |