diff options
author | helma@in-silico.ch <helma@in-silico.ch> | 2018-11-14 17:33:44 +0100 |
---|---|---|
committer | helma@in-silico.ch <helma@in-silico.ch> | 2018-11-14 17:33:44 +0100 |
commit | 7e547fd4a296f497615a7805d565b378cb1bd7cd (patch) | |
tree | 893895ef4db7f113cc7f25cddf0f3aa5a6e61afc | |
parent | ae78e8216909ebfa708b8da3c55248a68abc291c (diff) |
bad_request_error substituted with ArgumentError
-rw-r--r-- | lib/crossvalidation.rb | 2 | ||||
-rw-r--r-- | lib/dataset.rb | 8 | ||||
-rw-r--r-- | lib/enm-import.rb (renamed from lib/import.rb~) | 0 | ||||
-rw-r--r-- | lib/error.rb | 66 | ||||
-rw-r--r-- | lib/lazar.rb | 2 | ||||
-rw-r--r-- | lib/leave-one-out-validation.rb | 2 | ||||
-rw-r--r-- | lib/model.rb | 16 | ||||
-rw-r--r-- | lib/overwrite.rb | 2 | ||||
-rw-r--r-- | lib/rest-client-wrapper.rb | 10 | ||||
-rw-r--r-- | lib/validation-statistics.rb | 2 | ||||
-rw-r--r-- | test/error.rb | 6 | ||||
-rw-r--r-- | test/regression-validation.rb | 2 |
12 files changed, 25 insertions, 93 deletions
diff --git a/lib/crossvalidation.rb b/lib/crossvalidation.rb index c866ebc..8719dca 100644 --- a/lib/crossvalidation.rb +++ b/lib/crossvalidation.rb @@ -15,7 +15,7 @@ module OpenTox $logger.debug model.algorithms klass = ClassificationCrossValidation if model.is_a? Model::LazarClassification klass = RegressionCrossValidation if model.is_a? Model::LazarRegression - bad_request_error "Unknown model class #{model.class}." unless klass + raise ArgumentError, "Unknown model class #{model.class}." unless klass cv = klass.new( name: model.name, diff --git a/lib/dataset.rb b/lib/dataset.rb index 90b4993..3979105 100644 --- a/lib/dataset.rb +++ b/lib/dataset.rb @@ -142,7 +142,7 @@ module OpenTox dataset = self.new(:source => file, :name => File.basename(file,".*"), :md5 => md5) dataset.parse_table table else - bad_request_error "#{file} is not a valid CSV/TSV file. Could not find "," ";" or TAB as column separator." + raise ArgumentError, "#{file} is not a valid CSV/TSV file. Could not find "," ";" or TAB as column separator." end end dataset @@ -251,7 +251,7 @@ module OpenTox # features feature_names = table.shift.collect{|f| f.strip} - bad_request_error "Duplicated features in table header." unless feature_names.size == feature_names.uniq.size + raise ArgumentError, "Duplicated features in table header." unless feature_names.size == feature_names.uniq.size if feature_names[0] =~ /ID/i # check ID column original_id = OriginalId.find_or_create_by(:dataset_id => self.id,:name => feature_names.shift) @@ -260,7 +260,7 @@ module OpenTox end compound_format = feature_names.shift - bad_request_error "#{compound_format} is not a supported compound format. Accepted formats: SMILES, InChI." unless compound_format =~ /SMILES|InChI/i + raise ArgumentError, "#{compound_format} is not a supported compound format. Accepted formats: SMILES, InChI." unless compound_format =~ /SMILES|InChI/i original_smiles = OriginalSmiles.find_or_create_by(:dataset_id => self.id) if compound_format.match(/SMILES/i) numeric = [] @@ -473,7 +473,7 @@ module OpenTox merged_feature = MergedNumericBioActivity.find_or_create_by(:name => features.collect{|f| f.name} + " merged", :original_feature_ids => features.collect{|f| f.id}) # TODO: regression transformations end else - bad_request_error "Cannot merge features of different types (#{feature_classes})." + raise ArgumentError, "Cannot merge features of different types (#{feature_classes})." end accept_values = [] diff --git a/lib/import.rb~ b/lib/enm-import.rb index cf1a26f..cf1a26f 100644 --- a/lib/import.rb~ +++ b/lib/enm-import.rb diff --git a/lib/error.rb b/lib/error.rb deleted file mode 100644 index 39b3c76..0000000 --- a/lib/error.rb +++ /dev/null @@ -1,66 +0,0 @@ -module OpenToxError - attr_accessor :http_code, :message, :cause - def initialize message=nil - message = message.to_s.gsub(/\A"|"\Z/, '') if message # remove quotes - super message - @http_code ||= 500 - @message = message.to_s - @cause = cut_backtrace(caller) - $logger.error("\n"+JSON.pretty_generate({ - :http_code => @http_code, - :message => @message, - :cause => @cause - })) - end - - def cut_backtrace(trace) - if trace.is_a?(Array) - cut_index = trace.find_index{|line| line.match(/sinatra|minitest/)} - cut_index ||= trace.size - cut_index -= 1 - cut_index = trace.size-1 if cut_index < 0 - trace[0..cut_index] - else - trace - end - end - -end - -class RuntimeError - include OpenToxError -end - -# clutters log file with library errors -#class NoMethodError - #include OpenToxError -#end - -module OpenTox - - class Error < RuntimeError - include OpenToxError - - def initialize(code, message=nil) - @http_code = code - super message - end - end - - # OpenTox errors - RestClientWrapper.known_errors.each do |error| - # create error classes - c = Class.new Error do - define_method :initialize do |message=nil| - super error[:code], message - end - end - OpenTox.const_set error[:class],c - - # define global methods for raising errors, eg. bad_request_error - Object.send(:define_method, error[:method]) do |message| - raise c.new(message) - end - end - -end diff --git a/lib/lazar.rb b/lib/lazar.rb index c3bbbf3..a077626 100644 --- a/lib/lazar.rb +++ b/lib/lazar.rb @@ -77,7 +77,7 @@ CLASSES = ["Feature","Substance","Dataset","CrossValidation","LeaveOneOutValidat [ # be aware of the require sequence as it affects class/method overwrites "overwrite.rb", "rest-client-wrapper.rb", - "error.rb", + #"error.rb", "opentox.rb", "feature.rb", "physchem.rb", diff --git a/lib/leave-one-out-validation.rb b/lib/leave-one-out-validation.rb index d37b6ce..7d73b89 100644 --- a/lib/leave-one-out-validation.rb +++ b/lib/leave-one-out-validation.rb @@ -9,7 +9,7 @@ module OpenTox # @param [OpenTox::Model::Lazar] # @return [OpenTox::Validation::LeaveOneOut] def self.create model - bad_request_error "Cannot create leave one out validation for models with supervised feature selection. Please use crossvalidation instead." if model.algorithms[:feature_selection] + raise ArgumentError, "Cannot create leave one out validation for models with supervised feature selection. Please use crossvalidation instead." if model.algorithms[:feature_selection] $logger.debug "#{model.name}: LOO validation started" t = Time.now model.training_dataset.features.collect{|f| f.class}.include?(NominalBioActivity) ? klass = ClassificationLeaveOneOut : klass = RegressionLeaveOneOut diff --git a/lib/model.rb b/lib/model.rb index db69120..caf8a6e 100644 --- a/lib/model.rb +++ b/lib/model.rb @@ -36,7 +36,7 @@ module OpenTox # # @return [OpenTox::Model::Lazar] def self.create prediction_feature:nil, training_dataset:, algorithms:{} - bad_request_error "Please provide a training_dataset and a optional prediction_feature." unless prediction_feature or training_dataset + raise ArgumentError, "Please provide a training_dataset and a optional prediction_feature." unless prediction_feature or training_dataset prediction_feature ||= training_dataset.features.select{|f| f.is_a? NumericBioActivity or f.is_a? NominalBioActivity}.first unless prediction_feature # guess model type @@ -62,7 +62,7 @@ module OpenTox # set defaults# substance_classes = training_dataset.substances.collect{|s| s.class.to_s}.uniq - bad_request_error "Cannot create models for mixed substance classes '#{substance_classes.join ', '}'." unless substance_classes.size == 1 + raise ArgumentError, "Cannot create models for mixed substance classes '#{substance_classes.join ', '}'." unless substance_classes.size == 1 if substance_classes.first == "OpenTox::Compound" @@ -110,7 +110,7 @@ module OpenTox }, } else - bad_request_error "Cannot create models for #{substance_classes.first}." + raise ArgumentError, "Cannot create models for #{substance_classes.first}." end # overwrite defaults with explicit parameters @@ -175,7 +175,7 @@ module OpenTox model.descriptor_ids = feature_ids & property_ids model.independent_variables = model.descriptor_ids.collect{|i| properties.collect{|p| p[i] ? p[i].median : nil}} else - bad_request_error "Descriptor method '#{descriptor_method}' not implemented." + raise ArgumentError, "Descriptor method '#{descriptor_method}' not implemented." end if model.algorithms[:feature_selection] and model.algorithms[:feature_selection][:method] @@ -224,7 +224,7 @@ module OpenTox end end else - bad_request_error "Unknown descriptor type '#{descriptors}' for similarity method '#{similarity[:method]}'." + raise ArgumentError, "Unknown descriptor type '#{descriptors}' for similarity method '#{similarity[:method]}'." end prediction ||= {:warnings => [], :measurements => []} @@ -300,7 +300,7 @@ module OpenTox elsif object.is_a? Dataset substances = object.substances else - bad_request_error "Please provide a OpenTox::Compound an Array of OpenTox::Substances or an OpenTox::Dataset as parameter." + raise ArgumentError, "Please provide a OpenTox::Compound an Array of OpenTox::Substances or an OpenTox::Dataset as parameter." end # make predictions @@ -486,7 +486,7 @@ module OpenTox # @return [OpenTox::Model::Validation] lazar model with five independent 10-fold crossvalidations def self.from_csv_file file metadata_file = file.sub(/csv$/,"json") - bad_request_error "No metadata file #{metadata_file}" unless File.exist? metadata_file + raise ArgumentError, "No metadata file #{metadata_file}" unless File.exist? metadata_file model_validation = self.new JSON.parse(File.read(metadata_file)) training_dataset = Dataset.from_csv_file file model = Lazar.create training_dataset: training_dataset @@ -510,7 +510,7 @@ module OpenTox unless training_dataset # try to import Import::Enanomapper.import training_dataset = Dataset.where(name: "Protein Corona Fingerprinting Predicts the Cellular Interaction of Gold and Silver Nanoparticles").first - bad_request_error "Cannot import 'Protein Corona Fingerprinting Predicts the Cellular Interaction of Gold and Silver Nanoparticles' dataset" unless training_dataset + raise ArgumentError, "Cannot import 'Protein Corona Fingerprinting Predicts the Cellular Interaction of Gold and Silver Nanoparticles' dataset" unless training_dataset end prediction_feature ||= Feature.where(name: "log2(Net cell association)", category: "TOX").first diff --git a/lib/overwrite.rb b/lib/overwrite.rb index 0dd1c8a..d482902 100644 --- a/lib/overwrite.rb +++ b/lib/overwrite.rb @@ -84,7 +84,7 @@ class String def to_boolean return true if self == true || self =~ (/(true|t|yes|y|1)$/i) return false if self == false || self.nil? || self =~ (/(false|f|no|n|0)$/i) - bad_request_error "invalid value for Boolean: \"#{self}\"" + raise ArgumentError, "invalid value for Boolean: \"#{self}\"" end end diff --git a/lib/rest-client-wrapper.rb b/lib/rest-client-wrapper.rb index c9fd40f..db23e66 100644 --- a/lib/rest-client-wrapper.rb +++ b/lib/rest-client-wrapper.rb @@ -28,14 +28,14 @@ module OpenTox uri = Addressable::URI.encode(uri) # check input - bad_request_error "Headers are not a hash: #{headers.inspect} for #{uri}." unless headers==nil or headers.is_a?(Hash) + raise ArgumentError, "Headers are not a hash: #{headers.inspect} for #{uri}." unless headers==nil or headers.is_a?(Hash) headers[:subjectid] ||= @@subjectid - bad_request_error "Invalid URI: '#{uri}'" unless URI.valid? uri + raise ArgumentError, "Invalid URI: '#{uri}'" unless URI.valid? uri # 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 else - bad_request_error "#{header} should be submitted in the headers of URI: #{uri}" if payload and payload.is_a?(Hash) and payload[header] + raise ArgumentError, "#{header} should be submitted in the headers of URI: #{uri}" if payload and payload.is_a?(Hash) and payload[header] end end @@ -56,6 +56,7 @@ module OpenTox @response = @request.execute do |response, request, result| if [301, 302, 307].include? response.code and request.method == :get response.follow_redirection(request, result) +=begin elsif response.code >= 400 and !URI.task?(uri) error = known_errors.collect{|e| e if e[:code] == response.code}.compact.first begin # errors are returned as error reports in json, try to parse @@ -68,6 +69,7 @@ module OpenTox cause = nil end Object.method(error[:method]).call "#{msg}, #{uri}, #{cause}" # call error method +=end else response end @@ -75,6 +77,7 @@ module OpenTox end end +=begin #@return [Array] of hashes with error code, method and class def self.known_errors errors = [] @@ -88,6 +91,7 @@ module OpenTox end errors end +=end end end diff --git a/lib/validation-statistics.rb b/lib/validation-statistics.rb index ad4c14d..f3e3af8 100644 --- a/lib/validation-statistics.rb +++ b/lib/validation-statistics.rb @@ -242,7 +242,7 @@ module OpenTox title = "log2(Net cell association [mL/ug(Mg)])" else title = feature.name - title += " [#{feature.unit}]" if feature.unit and !feature.unit.blank? + title += "-log10(#{feature.unit})" if feature.unit and !feature.unit.blank? end R.eval "image = qplot(prediction,measurement,main='#{title}',xlab='Prediction',ylab='Measurement',asp=1,xlim=range, ylim=range)" R.eval "image = image + geom_abline(intercept=0, slope=1)" diff --git a/test/error.rb b/test/error.rb index eeac735..428f63d 100644 --- a/test/error.rb +++ b/test/error.rb @@ -7,12 +7,6 @@ class ErrorTest < MiniTest::Test assert_nil OpenTox::Feature.find(object.id) end - def test_error_methods - assert_raises OpenTox::NotFoundError do - not_found_error "This is a test" - end - end - def test_exception assert_raises Exception do raise Exception.new "Basic Exception" diff --git a/test/regression-validation.rb b/test/regression-validation.rb index 9418df4..afa4278 100644 --- a/test/regression-validation.rb +++ b/test/regression-validation.rb @@ -71,7 +71,7 @@ class RegressionValidationTest < MiniTest::Test }, } model = Model::Lazar.create training_dataset: dataset, algorithms: algorithms - assert_raises OpenTox::BadRequestError do + assert_raises ArgumentError do loo = RegressionLeaveOneOut.create model end end |