diff options
author | mguetlein <martin.guetlein@gmail.com> | 2011-05-09 14:06:48 +0200 |
---|---|---|
committer | mguetlein <martin.guetlein@gmail.com> | 2011-05-09 14:06:48 +0200 |
commit | e09012e01aa865900184bee186933b11f6fa1d3f (patch) | |
tree | ed0fcc50302f127492092d3bd795904828e8d005 | |
parent | 02220bab22c0ea60394b71dfba536284ada17eb8 (diff) |
fix search via param functionality for validation, add corresponding unit-tests
-rw-r--r-- | lib/ohm_util.rb | 39 | ||||
-rwxr-xr-x | report/environment.rb | 3 | ||||
-rwxr-xr-x | report/report_persistance.rb | 13 | ||||
-rw-r--r-- | test/unit_test.rb | 58 | ||||
-rwxr-xr-x | validation/validation_application.rb | 14 |
5 files changed, 97 insertions, 30 deletions
diff --git a/lib/ohm_util.rb b/lib/ohm_util.rb new file mode 100644 index 0000000..21d7978 --- /dev/null +++ b/lib/ohm_util.rb @@ -0,0 +1,39 @@ + +module Lib + module OhmUtil + + def self.check_params(model, params) + prop_names = model.attributes.collect{|p| p.to_s} + params.keys.each do |k| + key = k.to_s + if (key == "subjectid") + params.delete(k) + else + unless prop_names.include?(key) + key = key.from_rdf_format + unless prop_names.include?(key) + key = key+"_uri" + unless prop_names.include?(key) + key = key+"s" + unless prop_names.include?(key) + raise OpenTox::BadRequestError.new "no attribute found: '"+k.to_s+"'" + end + end + end + end + params[key.to_sym] = params.delete(k) + end + end + params + end + + def self.find(model, filter_params) + if (filter_params.size==0) + model.all + else + model.find(check_params(model,filter_params)) + end + end + + end +end
\ No newline at end of file diff --git a/report/environment.rb b/report/environment.rb index aa8ab56..4729dc8 100755 --- a/report/environment.rb +++ b/report/environment.rb @@ -12,8 +12,7 @@ module Reports end require "lib/ot_predictions.rb" -#require "lib/active_record_setup.rb" -#require "lib/data_mapper_util.rb" +require "lib/ohm_util.rb" require "report/plot_factory.rb" require "report/xml_report.rb" diff --git a/report/report_persistance.rb b/report/report_persistance.rb index 9097fa3..113c81b 100755 --- a/report/report_persistance.rb +++ b/report/report_persistance.rb @@ -198,6 +198,8 @@ module Reports attribute :algorithm_uris index :report_type + index :validation_uris + index :crossvalidation_uris attr_accessor :subjectid @@ -250,16 +252,7 @@ module Reports def list_reports(type, filter_params={}) LOGGER.debug "find reports for params: "+filter_params.inspect - # unfortunately, datamapper does not allow searching in Objects - # do filtering for list = Object params manually - list_params = {} - [:validation_uris, :crossvalidation_uris, :algorithm_uris, :model_uris].each do |l| - list_params[l] = filter_params.delete(l) if filter_params.has_key?(l) - end - reports = ReportData.find( :report_type => type ) - list_params.each do |k,v| - reports = reports.collect{|x| x}.delete_if{ |r| !r.send(k).include?(v) } - end + reports = Lib::OhmUtil.find( ReportData, filter_params ) reports.collect{ |r| r.id } end diff --git a/test/unit_test.rb b/test/unit_test.rb index 2462984..5984f42 100644 --- a/test/unit_test.rb +++ b/test/unit_test.rb @@ -44,38 +44,55 @@ class ValidationTest < Test::Unit::TestCase puts "AA disabled" @@subjectid = nil end - + + @@data = [] files = { File.new("data/hamster_carcinogenicity.mini.csv") => :crossvalidation, File.new("data/EPAFHM.mini.csv") => :crossvalidation, File.new("data/hamster_carcinogenicity.csv") => :validation, File.new("data/EPAFHM.csv") => :validation, # File.new("data/StJudes-HepG2-testset_Class.csv") => :crossvalidation } - @@data = [] files.each do |file,type| @@data << { :type => type, :data => ValidationExamples::Util.upload_dataset(file, @@subjectid), :feat => ValidationExamples::Util.prediction_feature_for_file(file), - :file => file} + :info => file.path, :delete => true} end +# @@data << { :type => :crossvalidation, +# :data => "http://apps.ideaconsult.net:8080/ambit2/dataset/9?max=50", +# :feat => "http://apps.ideaconsult.net:8080/ambit2/feature/21573", +# :info => "http://apps.ideaconsult.net:8080/ambit2/dataset/9?max=50" } +# @@data << { :type => :validation, +# :data => "http://apps.ideaconsult.net:8080/ambit2/dataset/272?max=50", +# :feat => "http://apps.ideaconsult.net:8080/ambit2/feature/26221", +# :info => "http://apps.ideaconsult.net:8080/ambit2/dataset/272?max=50" } end def global_teardown puts "delete and logout" - @@data.each{|data| OpenTox::Dataset.find(data[:data],@@subjectid).delete(@@subjectid)} + @@data.each{|data| OpenTox::Dataset.find(data[:data],@@subjectid).delete(@@subjectid) if data[:delete]} @@vs.each{|v| v.delete(@@subjectid)} if defined?@@vs @@cvs.each{|cv| cv.delete(@@subjectid)} if defined?@@cvs @@reports.each{|report| report.delete(@@subjectid)} if defined?@@reports @@qmrfReports.each{|qmrfReport| qmrfReport.delete(@@subjectid)} if defined?@@qmrfReports OpenTox::Authorization.logout(@@subjectid) if AA_SERVER end + + def test_validation_list + puts "test_validation_list" + list = OpenTox::Validation.list + assert list.is_a?(Array) + list.each do |l| + assert l.uri? + end + end def test_training_test_split @@vs = [] @@data.each do |data| if data[:type]==:validation - puts "test_training_test_split "+data[:file].path.to_s + puts "test_training_test_split "+data[:info].to_s p = { :dataset_uri => data[:data], :algorithm_uri => File.join(CONFIG[:services]["opentox-algorithm"],"lazar"), @@ -100,6 +117,11 @@ class ValidationTest < Test::Unit::TestCase end v = OpenTox::Validation.find(v.uri, @@subjectid) assert v.uri.uri? + + model = v.metadata[OT.model] + assert model.uri? + v_list = OpenTox::Validation.list( {:model => model} ) + assert v_list.size==1 and v_list.include?(v.uri) @@vs << v end end @@ -118,6 +140,8 @@ class ValidationTest < Test::Unit::TestCase OpenTox::CrossvalidationReport.create(v.uri) end end + report = OpenTox::ValidationReport.find_for_validation(v.uri,@@subjectid) + assert report==nil,"report already exists for validation\nreport: "+(report ? report.uri.to_s : "")+"\nvalidation: "+v.uri.to_s report = OpenTox::ValidationReport.create(v.uri,@@subjectid) assert report.uri.uri? if @@subjectid @@ -134,7 +158,16 @@ class ValidationTest < Test::Unit::TestCase @@reports << report2 end end - + + def test_crossvalidation_list + puts "test_crossvalidation_list" + list = OpenTox::Crossvalidation.list + assert list.is_a?(Array) + list.each do |l| + assert l.uri? + end + end + def test_crossvalidation #assert_rest_call_error OpenTox::NotFoundError do @@ -143,7 +176,7 @@ class ValidationTest < Test::Unit::TestCase @@cvs = [] @@data.each do |data| if data[:type]==:crossvalidation - puts "test_crossvalidation "+data[:file].path.to_s + puts "test_crossvalidation "+data[:info].to_s p = { :dataset_uri => data[:data], :algorithm_uri => File.join(CONFIG[:services]["opentox-algorithm"],"lazar"), @@ -174,6 +207,16 @@ class ValidationTest < Test::Unit::TestCase end summary = cv.summary(@@subjectid) assert_kind_of Hash,summary + + algorithm = cv.metadata[OT.algorithm] + assert algorithm.uri? + cv_list = OpenTox::Crossvalidation.list( {:algorithm => algorithm} ) + assert cv_list.include?(cv.uri) + cv_list.each do |cv_uri| + alg = OpenTox::Crossvalidation.find(cv_uri).metadata[OT.algorithm] + assert alg==algorithm,"wrong algorithm for filtered crossvalidation, should be: '"+algorithm.to_s+"', is: '"+alg.to_s+"'" + end + @@cvs << cv end end @@ -195,6 +238,7 @@ class ValidationTest < Test::Unit::TestCase OpenTox::CrossvalidationReport.create(cv.uri) end end + assert OpenTox::ValidationReport.find_for_validation(cv.uri,@@subjectid)==nil report = OpenTox::CrossvalidationReport.create(cv.uri,@@subjectid) assert report.uri.uri? if @@subjectid diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 4ef05a9..2bd2fea 100755 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -9,11 +9,7 @@ require 'validation/validation_service.rb' get '/crossvalidation/?' do LOGGER.info "list all crossvalidations" - #uri_list = Validation::Crossvalidation.all.collect{ |cv| cv.crossvalidation_uri }.join("\n")+"\n" - #uri_list = Lib::DataMapperUtil.all(Validation::Crossvalidation,params).collect{ |cv| cv.crossvalidation_uri }.join("\n")+"\n" - uri_list = Validation::Crossvalidation.all.collect{|cv| cv.crossvalidation_uri}.join("\n") + "\n" - - #uri_list = Validation::Crossvalidation.find_like(params).collect{ |cv| cv.crossvalidation_uri }.join("\n")+"\n" + uri_list = Lib::OhmUtil.find( Validation::Crossvalidation, params ).collect{|v| v.crossvalidation_uri}.join("\n") + "\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "Single validations: "+url_for("/",:full)+"\n"+ @@ -134,7 +130,7 @@ get '/crossvalidation/:id/statistics' do # LOGGER.debug vals.collect{|v| v.validation_uri}.join("\n") # LOGGER.debug vals.size # LOGGER.debug vals.class - + raise "could not load all validations for crossvalidation" if vals.include?(nil) v = Lib::MergeObjects.merge_array_objects( vals ) v.created_at = nil #v.id = nil @@ -213,11 +209,7 @@ end get '/?' do LOGGER.info "list all validations, params: "+params.inspect - #uri_list = Validation::Validation.find_like(params).collect{ |v| v.validation_uri }.join("\n")+"\n" - #uri_list = Validation::Validation.all(params).collect{ |v| v.validation_uri }.join("\n")+"\n" - #uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" - uri_list = Validation::Validation.all.collect{|v| v.validation_uri}.join("\n") + "\n" - + uri_list = Lib::OhmUtil.find( Validation::Validation, params ).collect{|v| v.validation_uri}.join("\n") + "\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "To perform a validation:\n"+ |