diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/algorithm.rb | 110 | ||||
-rw-r--r-- | lib/authorization.rb | 24 | ||||
-rw-r--r-- | lib/dataset.rb | 10 | ||||
-rw-r--r-- | lib/environment.rb | 16 | ||||
-rw-r--r-- | lib/model.rb | 6 | ||||
-rw-r--r-- | lib/opentox-ruby-api-wrapper.rb | 2 | ||||
-rw-r--r-- | lib/task.rb | 14 | ||||
-rw-r--r-- | lib/templates/users.yaml | 5 |
8 files changed, 121 insertions, 66 deletions
diff --git a/lib/algorithm.rb b/lib/algorithm.rb index c5d162a..d5f85c7 100644 --- a/lib/algorithm.rb +++ b/lib/algorithm.rb @@ -1,64 +1,66 @@ module OpenTox - module Algorithm + module Algorithm - class Fminer - include Owl + class Fminer + include Owl - def initialize - super - self.uri = File.join(@@config[:services]["opentox-algorithm"],'fminer') - self.title = "fminer" - self.source = "http://github.com/amaunz/libfminer" - self.parameters = { - "Dataset URI" => { :scope => "mandatory", :value => "dataset_uri" }, - "Feature URI for dependent variable" => { :scope => "mandatory", :value => "feature_uri" } - } - end + def initialize + super + self.uri = File.join(@@config[:services]["opentox-algorithm"],'fminer') + self.title = "fminer" + self.source = "http://github.com/amaunz/libfminer" + self.parameters = { + "Dataset URI" => { :scope => "mandatory", :value => "dataset_uri" }, + "Feature URI for dependent variable" => { :scope => "mandatory", :value => "feature_uri" } + } + end - def self.create_feature_dataset(params) - RestClient.post params[:feature_generation_uri], :dataset_uri => params[:dataset_uri], :feature_uri => params[:feature_uri] - end - end + def self.create_feature_dataset(params) + resource = RestClient::Resource.new(params[:feature_generation_uri], :user => @@users[:users].keys[0], :password => @@users[:users].values[0]) + resource.post :dataset_uri => params[:dataset_uri], :feature_uri => params[:feature_uri] + end + end - class Lazar - include Owl + class Lazar + include Owl - def initialize - super - self.uri = File.join(@@config[:services]["opentox-algorithm"],'lazar') - self.title = "lazar" - self.source = "http://github.com/helma/opentox-algorithm" - self.parameters = { - "Dataset URI" => - { :scope => "mandatory", :value => "dataset_uri" }, - "Feature URI for dependent variable" => - { :scope => "mandatory", :value => "feature_uri" }, - "Feature generation URI" => - { :scope => "mandatory", :value => "feature_generation_uri" } - } - end - - def self.create_model(params) - @uri = RestClient.post File.join(@@config[:services]["opentox-algorithm"], "lazar"), :dataset_uri => params[:dataset_uri], :feature_uri => params[:feature_uri], :feature_generation_uri => File.join(@@config[:services]["opentox-algorithm"], "fminer") - end + def initialize + super + self.uri = File.join(@@config[:services]["opentox-algorithm"],'lazar') + self.title = "lazar" + self.source = "http://github.com/helma/opentox-algorithm" + self.parameters = { + "Dataset URI" => + { :scope => "mandatory", :value => "dataset_uri" }, + "Feature URI for dependent variable" => + { :scope => "mandatory", :value => "feature_uri" }, + "Feature generation URI" => + { :scope => "mandatory", :value => "feature_generation_uri" } + } + end + + def self.create_model(params) + resource = RestClient::Resource.new(File.join(@@config[:services]["opentox-algorithm"], "lazar"), :user => @@users[:users].keys[0], :password => @@users[:users].values[0]) + @uri = resource.post :dataset_uri => params[:dataset_uri], :feature_uri => params[:feature_uri], :feature_generation_uri => File.join(@@config[:services]["opentox-algorithm"], "fminer") + end - end + end - class Similarity - def self.weighted_tanimoto(fp_a,fp_b,p) - common_features = fp_a & fp_b - all_features = fp_a + fp_b - common_p_sum = 0.0 - if common_features.size > 0 - common_features.each{|f| common_p_sum += p[f]} - all_p_sum = 0.0 - all_features.each{|f| all_p_sum += p[f]} - common_p_sum/all_p_sum - else - 0.0 - end - end - end + class Similarity + def self.weighted_tanimoto(fp_a,fp_b,p) + common_features = fp_a & fp_b + all_features = fp_a + fp_b + common_p_sum = 0.0 + if common_features.size > 0 + common_features.each{|f| common_p_sum += p[f]} + all_p_sum = 0.0 + all_features.each{|f| all_p_sum += p[f]} + common_p_sum/all_p_sum + else + 0.0 + end + end + end - end + end end diff --git a/lib/authorization.rb b/lib/authorization.rb new file mode 100644 index 0000000..4e4abe2 --- /dev/null +++ b/lib/authorization.rb @@ -0,0 +1,24 @@ +helpers do + + def protected! + response['WWW-Authenticate'] = %(Basic realm="Opentox Ruby API Wrapper Auth") and \ + throw(:halt, [401, "Not authorized\n"]) and \ + return unless authorized? + end + + def authorized? + @auth ||= Rack::Auth::Basic::Request.new(request.env) + @auth.provided? && @auth.basic? && @auth.credentials && valid_user? + end + + def valid_user? + users = @@users[:users] + return @auth.credentials == [@auth.username, users.fetch(@auth.username)] if users.has_key?(@auth.username) + return false + end + +end + +before do + protected! unless env['REQUEST_METHOD'] == "GET" +end
\ No newline at end of file diff --git a/lib/dataset.rb b/lib/dataset.rb index 0a49e87..09616f8 100644 --- a/lib/dataset.rb +++ b/lib/dataset.rb @@ -78,7 +78,8 @@ module OpenTox end def self.create(data, content_type = 'application/rdf+xml') - uri = RestClient.post @@config[:services]["opentox-dataset"], data, :content_type => content_type + resource = RestClient::Resource.new(@@config[:services]["opentox-dataset"], :user => @@users[:users].keys[0], :password => @@users[:users].values[0]) + uri = resource.post data, :content_type => content_type dataset = Dataset.new dataset.read uri.to_s dataset @@ -152,11 +153,12 @@ module OpenTox # Delete a dataset def delete - RestClient.delete @uri - end + resource = RestClient::Resource.new(@uri, :user => @@users[:users].keys[0], :password => @@users[:users].values[0]) + resource.delete + end def save - RestClient.post(@@config[:services]["opentox-dataset"], self.rdf, :content_type => "application/rdf+xml").to_s + RestClient::Resource.new(@@config[:services]["opentox-dataset"], :user => @@users[:users].keys[0], :password => @@users[:users].values[0]).post(self.rdf, :content_type => "application/rdf+xml").to_s end def to_yaml diff --git a/lib/environment.rb b/lib/environment.rb index a9d0797..cef75d4 100644 --- a/lib/environment.rb +++ b/lib/environment.rb @@ -6,6 +6,7 @@ ENV['RACK_ENV'] = 'test' unless ENV['RACK_ENV'] basedir = File.join(ENV['HOME'], ".opentox") config_dir = File.join(basedir, "config") config_file = File.join(config_dir, "#{ENV['RACK_ENV']}.yaml") +user_file = File.join(config_dir, "users.yaml") TMP_DIR = File.join(basedir, "tmp") LOG_DIR = File.join(basedir, "log") @@ -23,6 +24,21 @@ logfile = "#{LOG_DIR}/#{ENV["RACK_ENV"]}.log" LOGGER = Logger.new(logfile,'daily') # daily rotation LOGGER.level = Logger::DEBUG +if File.exist?(user_file) + @@users = YAML.load_file(user_file) +else + FileUtils.cp(File.join(File.dirname(__FILE__), 'templates/users.yaml'), user_file) + puts "Please edit #{user_file} and restart your application." + exit +end + +begin + 0 < @@users[:users].keys.length +rescue + puts "Please edit #{user_file} and restart your application. Create at least one user with password." + exit +end + # RDF namespaces RDF = Redland::Namespace.new 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' OWL = Redland::Namespace.new 'http://www.w3.org/2002/07/owl#' diff --git a/lib/model.rb b/lib/model.rb index bd9d546..d732aa4 100644 --- a/lib/model.rb +++ b/lib/model.rb @@ -39,7 +39,8 @@ module OpenTox # Predict a compound def predict(compound) - RestClient.post(@uri, :compound_uri => compound.uri) + resource = RestClient::Resource.new(@uri, :user => @@users[:users].keys[0], :password => @@users[:users].values[0]) + resource.post(:compound_uri => compound.uri) end def self.base_uri @@ -47,7 +48,8 @@ module OpenTox end def self.create(data) - RestClient.post(@@config[:services]["opentox-model"], data, :content_type => "application/x-yaml").to_s + resource = RestClient::Resource.new(@@config[:services]["opentox-model"], :user => @@users[:users].keys[0], :password => @@users[:users].values[0]) + resource.post(data, :content_type => "application/x-yaml").to_s end def endpoint diff --git a/lib/opentox-ruby-api-wrapper.rb b/lib/opentox-ruby-api-wrapper.rb index ca57fc9..03838e8 100644 --- a/lib/opentox-ruby-api-wrapper.rb +++ b/lib/opentox-ruby-api-wrapper.rb @@ -8,6 +8,6 @@ rescue LoadError puts "Please install Openbabel with 'rake openbabel:install' in the compound component" end -['owl', 'compound','dataset','algorithm','model','task','utils'].each do |lib| +['owl', 'compound','dataset','algorithm','model','task','utils','authorization'].each do |lib| require lib end diff --git a/lib/task.rb b/lib/task.rb index 24bd944..8f44dc6 100644 --- a/lib/task.rb +++ b/lib/task.rb @@ -10,7 +10,8 @@ module OpenTox end def self.create - uri = RestClient.post @@config[:services]["opentox-task"], nil + resource = RestClient::Resource.new(@@config[:services]["opentox-task"], :user => @@users[:users].keys[0], :password => @@users[:users].values[0]) + uri = resource.post(nil) Task.new(uri) end @@ -28,16 +29,19 @@ module OpenTox end def started - #LOGGER.info File.join(@uri,'started') - RestClient.put File.join(@uri,'started'), {} + LOGGER.info File.join(@uri,'started') + resource = RestClient::Resource.new(File.join(@uri,'started'), :user => @@users[:users].keys[0], :password => @@users[:users].values[0]) + resource.put({}) end def cancel - RestClient.put File.join(@uri,'cancelled'), {} + resource = RestClient::Resource.new(@File.join(@uri,'cancelled'), :user => @@users[:users].keys[0], :password => @@users[:users].values[0]) + resource.put({}) end def completed(uri) - RestClient.put File.join(@uri,'completed'), :resource => uri + resource = RestClient::Resource.new(File.join(@uri,'completed'), :user => @@users[:users].keys[0], :password => @@users[:users].values[0]) + resource.put :resource => uri end def created_at diff --git a/lib/templates/users.yaml b/lib/templates/users.yaml new file mode 100644 index 0000000..483fd7b --- /dev/null +++ b/lib/templates/users.yaml @@ -0,0 +1,5 @@ +# please insert users and passwords here. +# one user and password each line. uncomment the line. +:users: +# username: "secretpassword" +# exampleuser: "ih9aiTog"
\ No newline at end of file |