From ce0121c8d5e77e8f4cb9654d372a8745e9b3ef10 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Wed, 28 Jul 2010 10:08:09 +0200 Subject: remove rdf_provider to use rewritten owl.rb in wrapper --- validation/validation_application.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index a43a2a6..a1affa2 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -79,7 +79,7 @@ get '/crossvalidation/:id/statistics' do v = Lib::MergeObjects.merge_array_objects( Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) ) v.validation_uri = nil - v.created_at = nil + v.date = nil v.id = nil content_type "application/x-yaml" v.to_yaml -- cgit v1.2.3 From ad376b7c5c3bb5c4270c78c5dd342436eb5dcdb9 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Mon, 2 Aug 2010 13:03:37 +0200 Subject: improve search facilites to enable rdf-format properties --- validation/validation_application.rb | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index a1affa2..1987623 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -5,12 +5,12 @@ end require 'validation/validation_service.rb' require 'lib/merge.rb' +require 'lib/active_record_setup.rb' get '/crossvalidation/?' do LOGGER.info "list all crossvalidations" content_type "text/uri-list" - params.each{ |k,v| halt 400,"no crossvalidation-attribute: "+k.to_s unless Validation::Crossvalidation.column_names.include?(k.gsub(/_like$/,"")) } - Validation::Crossvalidation.find(:all, :conditions => params).collect{ |d| url_for("/crossvalidation/", :full) + d.id.to_s }.join("\n") + Validation::Crossvalidation.find_like(params).collect{ |d| url_for("/crossvalidation/", :full) + d.id.to_s }.join("\n") end post '/crossvalidation/loo/?' do @@ -115,8 +115,7 @@ end get '/?' do LOGGER.info "list all validations" content_type "text/uri-list" - params.each{ |k,v| halt 400,"no validation-attribute: "+k.to_s unless Validation::Validation.column_names.include?(k.gsub(/_like$/,"")) } - Validation::Validation.find(:all, :conditions => params).collect{ |d| url_for("/", :full) + d.id.to_s }.join("\n") + Validation::Validation.find_like(params).collect{ |d| url_for("/", :full) + d.id.to_s }.join("\n") end get '/:id' do @@ -252,5 +251,5 @@ delete '/:id' do halt 404, "Validation '#{params[:id]}' not found." end content_type "text/plain" - Validation::Validation.delete(params[:id]) + validation.delete end \ No newline at end of file -- cgit v1.2.3 From 148e4eaccf2e406586914150cf2f953fa5f12ece Mon Sep 17 00:00:00 2001 From: mguetlein Date: Wed, 4 Aug 2010 11:01:20 +0200 Subject: add new /predictions funcionality --- validation/validation_application.rb | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 1987623..5740263 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -85,6 +85,18 @@ get '/crossvalidation/:id/statistics' do v.to_yaml end +get '/crossvalidation/:id/predictions' do + LOGGER.info "get predictions for crossvalidation with id "+params[:id].to_s + begin + crossvalidation = Validation::Crossvalidation.find(params[:id]) + rescue ActiveRecord::RecordNotFound => ex + halt 404, "Crossvalidation '#{params[:id]}' not found." + end + content_type "application/x-yaml" + validations = Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) + Lib::OTPredictions.to_array( validations.collect{ |v| v.compute_validation_stats_with_model(nil, true) } ).to_yaml +end + post '/crossvalidation/?' do content_type "text/uri-list" @@ -227,6 +239,18 @@ post '/validate_datasets' do halt 202,task_uri end +get '/:id/:predictions' do + LOGGER.info "get validation predictions "+params.inspect + begin + validation = Validation::Validation.find(params[:id]) + rescue ActiveRecord::RecordNotFound => ex + halt 404, "Validation '#{params[:id]}' not found." + end + content_type "text/x-yaml" + p = validation.compute_validation_stats_with_model(nil, true) + p.to_array.to_yaml +end + get '/:id/:attribute' do LOGGER.info "access validation attribute "+params.inspect begin -- cgit v1.2.3 From 566786bdd7e253880b7fe6c00cb40fbc46f771a2 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Wed, 11 Aug 2010 10:58:59 +0200 Subject: move to wrapper 1.6.2, remove report-dir-check, initial commit of reach reporting stuff --- validation/validation_application.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 5740263..263c88c 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -239,7 +239,7 @@ post '/validate_datasets' do halt 202,task_uri end -get '/:id/:predictions' do +get '/:id/predictions' do LOGGER.info "get validation predictions "+params.inspect begin validation = Validation::Validation.find(params[:id]) -- cgit v1.2.3 From f4c065998f6c918e67058b05ac17778cfbc57f58 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Thu, 19 Aug 2010 11:26:00 +0200 Subject: task title and creator, reach report minor fixes --- validation/validation_application.rb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 263c88c..2da9694 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -100,7 +100,7 @@ end post '/crossvalidation/?' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task do + task_uri = OpenTox::Task.as_task( "Perform crossvalidation", url_for("/crossvalidation", :full) ) do LOGGER.info "creating crossvalidation "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] @@ -153,7 +153,7 @@ end post '/?' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task do |task| + task_uri = OpenTox::Task.as_task( "Perform validation", url_for("/", :full) ) do |task| LOGGER.info "creating validation "+params.inspect if params[:model_uri] and params[:test_dataset_uri] and !params[:training_dataset_uri] and !params[:algorithm_uri] v = Validation::Validation.new :model_uri => params[:model_uri], @@ -182,7 +182,7 @@ end post '/training_test_split' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task do + task_uri = OpenTox::Task.as_task( "Perform training test split validation", url_for("/training_test_split", :full) ) do LOGGER.info "creating training test split "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] @@ -213,7 +213,7 @@ end post '/validate_datasets' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task do + task_uri = OpenTox::Task.as_task( "Perform dataset validation", url_for("/validate_datasets", :full) ) do LOGGER.info "validating values "+params.inspect halt 400, "test_dataset_uri missing" unless params[:test_dataset_uri] halt 400, "prediction_datset_uri missing" unless params[:prediction_dataset_uri] -- cgit v1.2.3 From 95ac5d0b0f79fe3fb20b380e6aec2e2e64f329ef Mon Sep 17 00:00:00 2001 From: mguetlein Date: Thu, 2 Sep 2010 16:32:07 +0200 Subject: fix activerecord version, improve rake init script --- validation/validation_application.rb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 2da9694..7ba968f 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -1,12 +1,13 @@ -[ 'rubygems', 'sinatra', 'sinatra/url_for', 'active_record', 'ar-extensions', 'opentox-ruby-api-wrapper' ].each do |lib| +[ 'rubygems', 'sinatra', 'sinatra/url_for', 'opentox-ruby-api-wrapper' ].each do |lib| require lib end -require 'validation/validation_service.rb' require 'lib/merge.rb' require 'lib/active_record_setup.rb' +require 'validation/validation_service.rb' + get '/crossvalidation/?' do LOGGER.info "list all crossvalidations" content_type "text/uri-list" @@ -125,7 +126,7 @@ get '/training_test_split' do end get '/?' do - LOGGER.info "list all validations" + LOGGER.info "list all validations, params: "+params.inspect content_type "text/uri-list" Validation::Validation.find_like(params).collect{ |d| url_for("/", :full) + d.id.to_s }.join("\n") end -- cgit v1.2.3 From 7d69d09e79882cb826dacac2b6474fade13e8690 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Tue, 7 Sep 2010 09:25:39 +0200 Subject: add validation to qmrf-report, bootstrapping --- validation/validation_application.rb | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 7ba968f..a79de22 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -121,10 +121,17 @@ post '/crossvalidation/?' do halt 202,task_uri end + get '/training_test_split' do halt 400, "GET operation not supported, use POST to perform a training_test_split, see "+url_for("/", :full)+" for validation results" end + +get '/bootstrapping' do + halt 400, "GET operation not supported, use POST to perform a bootstrapping, see "+url_for("/", :full)+" for validation results" +end + + get '/?' do LOGGER.info "list all validations, params: "+params.inspect content_type "text/uri-list" @@ -203,6 +210,28 @@ post '/training_test_split' do end +post '/bootstrapping' do + content_type "text/uri-list" + task_uri = OpenTox::Task.as_task( "Perform bootstrapping validation", url_for("/bootstrapping", :full) ) do + LOGGER.info "performing bootstrapping validation "+params.inspect + halt 400, "dataset_uri missing" unless params[:dataset_uri] + halt 400, "algorithm_uri missing" unless params[:algorithm_uri] + halt 400, "prediction_feature missing" unless params[:prediction_feature] + + params.merge!(Validation::Util.bootstrapping(params[:dataset_uri], params[:prediction_feature], params[:random_seed])) + v = Validation::Validation.new :training_dataset_uri => params[:training_dataset_uri], + :test_dataset_uri => params[:test_dataset_uri], + :test_target_dataset_uri => params[:dataset_uri], + :prediction_feature => params[:prediction_feature], + :algorithm_uri => params[:algorithm_uri] + v.validate_algorithm( params[:algorithm_params]) + content_type "text/uri-list" + v.validation_uri + end + halt 202,task_uri +end + + post '/plain_training_test_split' do LOGGER.info "creating pure training test split "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] -- cgit v1.2.3 From a3b0b9fbd81303e212bf063b9bf14f5f82941c36 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Tue, 7 Sep 2010 11:32:06 +0200 Subject: fix minor qmrf error --- validation/validation_application.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index a79de22..96387fe 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -11,7 +11,7 @@ require 'validation/validation_service.rb' get '/crossvalidation/?' do LOGGER.info "list all crossvalidations" content_type "text/uri-list" - Validation::Crossvalidation.find_like(params).collect{ |d| url_for("/crossvalidation/", :full) + d.id.to_s }.join("\n") + Validation::Crossvalidation.find_like(params).collect{ |d| url_for("/crossvalidation/", :full) + d.id.to_s }.join("\n")+"\n" end post '/crossvalidation/loo/?' do @@ -135,7 +135,7 @@ end get '/?' do LOGGER.info "list all validations, params: "+params.inspect content_type "text/uri-list" - Validation::Validation.find_like(params).collect{ |d| url_for("/", :full) + d.id.to_s }.join("\n") + Validation::Validation.find_like(params).collect{ |d| url_for("/", :full) + d.id.to_s }.join("\n")+"\n" end get '/:id' do -- cgit v1.2.3 From 941da14e7e4444cdb8e81d7a144bbe0c069f20a7 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Tue, 7 Sep 2010 12:34:09 +0200 Subject: added cv cleanup function --- validation/validation_application.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 96387fe..ff6cc4c 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -14,6 +14,22 @@ get '/crossvalidation/?' do Validation::Crossvalidation.find_like(params).collect{ |d| url_for("/crossvalidation/", :full) + d.id.to_s }.join("\n")+"\n" end +post '/crossvalidation/cleanup/?' do + LOGGER.info "crossvalidation cleanup, starting..." + content_type "text/uri-list" + deleted = [] + Validation::Crossvalidation.find_like(params).each do |cv| + num_vals = Validation::Validation.find( :all, :conditions => { :crossvalidation_id => cv.id } ).size + if cv.num_folds != num_vals + LOGGER.debug "delete cv with id:"+cv.id.to_s+" num-folds should be "+cv.num_folds.to_s+", is "+num_vals.to_s + deleted << url_for("/crossvalidation/", :full) + cv.id.to_s + Validation::Crossvalidation.delete(cv.id) + end + end + LOGGER.info "crossvalidation cleanup, deleted "+deleted.size.to_s+" cvs" + deleted.join("\n")+"\n" +end + post '/crossvalidation/loo/?' do halt 500, "not yet implemented" end -- cgit v1.2.3 From 543490dc2bc883412ed25d03a33d94b52786873d Mon Sep 17 00:00:00 2001 From: mguetlein Date: Fri, 10 Sep 2010 10:39:44 +0200 Subject: params for task and qmrf jnlp --- validation/validation_application.rb | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index ff6cc4c..ecaab4f 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -117,7 +117,7 @@ end post '/crossvalidation/?' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform crossvalidation", url_for("/crossvalidation", :full) ) do + task_uri = OpenTox::Task.as_task( "Perform crossvalidation", url_for("/crossvalidation", :full), params ) do LOGGER.info "creating crossvalidation "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] @@ -177,7 +177,7 @@ end post '/?' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform validation", url_for("/", :full) ) do |task| + task_uri = OpenTox::Task.as_task( "Perform validation", url_for("/", :full), params ) do |task| LOGGER.info "creating validation "+params.inspect if params[:model_uri] and params[:test_dataset_uri] and !params[:training_dataset_uri] and !params[:algorithm_uri] v = Validation::Validation.new :model_uri => params[:model_uri], @@ -206,7 +206,7 @@ end post '/training_test_split' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform training test split validation", url_for("/training_test_split", :full) ) do + task_uri = OpenTox::Task.as_task( "Perform training test split validation", url_for("/training_test_split", :full), params ) do LOGGER.info "creating training test split "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] @@ -228,7 +228,7 @@ end post '/bootstrapping' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform bootstrapping validation", url_for("/bootstrapping", :full) ) do + task_uri = OpenTox::Task.as_task( "Perform bootstrapping validation", url_for("/bootstrapping", :full), params ) do LOGGER.info "performing bootstrapping validation "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] @@ -259,7 +259,7 @@ end post '/validate_datasets' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform dataset validation", url_for("/validate_datasets", :full) ) do + task_uri = OpenTox::Task.as_task( "Perform dataset validation", url_for("/validate_datasets", :full), params ) do LOGGER.info "validating values "+params.inspect halt 400, "test_dataset_uri missing" unless params[:test_dataset_uri] halt 400, "prediction_datset_uri missing" unless params[:prediction_dataset_uri] -- cgit v1.2.3 From 11105ce48ce21750dd88a8cf48a37cefdacb87cf Mon Sep 17 00:00:00 2001 From: mguetlein Date: Tue, 14 Sep 2010 13:42:34 +0200 Subject: add cleanup for validations --- validation/validation_application.rb | 14 ++++++++++++++ 1 file changed, 14 insertions(+) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index ecaab4f..2073844 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -204,6 +204,20 @@ post '/?' do halt 202,task_uri end + +post '/cleanup/?' do + LOGGER.info "validation cleanup, starting..." + content_type "text/uri-list" + deleted = [] + Validation::Validation.find( :all, :conditions => { :prediction_dataset_uri => nil } ).each do |val| + LOGGER.debug "delete val with id:"+val.id.to_s+" prediction_dataset_uri is nil" + deleted << url_for("/", :full) + val.id.to_s + Validation::Validation.delete(val.id) + end + LOGGER.info "validation cleanup, deleted "+deleted.size.to_s+" validations" + deleted.join("\n")+"\n" +end + post '/training_test_split' do content_type "text/uri-list" task_uri = OpenTox::Task.as_task( "Perform training test split validation", url_for("/training_test_split", :full), params ) do -- cgit v1.2.3 From 18e1ec84378d711b36b1a77b29baa9b5ef664faa Mon Sep 17 00:00:00 2001 From: mguetlein Date: Tue, 14 Sep 2010 20:29:58 +0200 Subject: tmp disable delete for rhodes --- validation/validation_application.rb | 2 ++ 1 file changed, 2 insertions(+) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 2073844..1fdf8a4 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -60,6 +60,7 @@ get '/crossvalidation/:id' do end delete '/crossvalidation/:id/?' do + halt 400,"delete temporarily disabled" LOGGER.info "delete crossvalidation with id "+params[:id].to_s content_type "text/plain" begin @@ -328,6 +329,7 @@ get '/:id/:attribute' do end delete '/:id' do + halt 400,"delete temporarily disabled" LOGGER.info "delete validation with id "+params[:id].to_s begin validation = Validation::Validation.find(params[:id]) -- cgit v1.2.3 From f72a88dcb8fd18778445b4e6678cdfdee7feda28 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Wed, 6 Oct 2010 12:09:08 +0200 Subject: add text/html support, remove delete disabling, add new line to uri-list returns --- validation/validation_application.rb | 407 ++++++++++++++++++++++++----------- 1 file changed, 283 insertions(+), 124 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 1fdf8a4..983f3bd 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -10,8 +10,42 @@ require 'validation/validation_service.rb' get '/crossvalidation/?' do LOGGER.info "list all crossvalidations" + uri_list = Validation::Crossvalidation.find_like(params).collect{ |d| url_for("/crossvalidation/", :full) + d.id.to_s }.join("\n")+"\n" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ + related_links = + "Single validations: "+$sinatra.url_for("/",:full)+"\n"+ + "Crossvalidation reports: "+$sinatra.url_for("/report/crossvalidation",:full) + description = + "A list of all crossvalidations.\n"+ + "Use the POST method to perform a crossvalidation." + post_params = [[:dataset_uri,:algorithm_uri,:prediction_feature,[:num_folds,10],[:random_seed,1],[:stratified,false],[:algorithm_params,""]]] + content_type "text/html" + OpenTox.text_to_html uri_list,related_links,description,post_params + else + content_type "text/uri-list" + uri_list + end +end + +post '/crossvalidation/?' do content_type "text/uri-list" - Validation::Crossvalidation.find_like(params).collect{ |d| url_for("/crossvalidation/", :full) + d.id.to_s }.join("\n")+"\n" + task_uri = OpenTox::Task.as_task( "Perform crossvalidation", url_for("/crossvalidation", :full), params ) do + LOGGER.info "creating crossvalidation "+params.inspect + halt 400, "dataset_uri missing" unless params[:dataset_uri] + halt 400, "algorithm_uri missing" unless params[:algorithm_uri] + halt 400, "prediction_feature missing" unless params[:prediction_feature] + halt 400, "illegal param-value num_folds: '"+params[:num_folds].to_s+"', must be integer >1" unless params[:num_folds]==nil or + params[:num_folds].to_i>1 + + cv_params = { :dataset_uri => params[:dataset_uri], + :algorithm_uri => params[:algorithm_uri] } + [ :num_folds, :random_seed, :stratified ].each{ |sym| cv_params[sym] = params[sym] if params[sym] } + cv = Validation::Crossvalidation.new cv_params + cv.create_cv_datasets( params[:prediction_feature] ) + cv.perform_cv( params[:algorithm_params]) + cv.crossvalidation_uri + end + halt 202,task_uri+"\n" end post '/crossvalidation/cleanup/?' do @@ -49,18 +83,57 @@ get '/crossvalidation/:id' do case request.env['HTTP_ACCEPT'].to_s when "application/rdf+xml" content_type "application/rdf+xml" - result = crossvalidation.to_rdf - when /application\/x-yaml|\*\/\*|/ # matches 'text/x-yaml', '*/*', '' + crossvalidation.to_rdf + when /application\/x-yaml/ content_type "application/x-yaml" - result = crossvalidation.to_yaml + crossvalidation.to_yaml + when /text\/html/ + related_links = + "Search for corresponding cv report: "+$sinatra.url_for("/report/crossvalidation?crossvalidation="+crossvalidation.crossvalidation_uri,:full)+"\n"+ + "Statistics for this crossvalidation: "+$sinatra.url_for("/crossvalidation/"+params[:id]+"/statistics",:full)+"\n"+ + "All crossvalidations: "+$sinatra.url_for("/crossvalidation",:full)+"\n"+ + "All crossvalidation reports: "+$sinatra.url_for("/report/crossvalidation",:full) + description = + "A crossvalidation resource." + content_type "text/html" + OpenTox.text_to_html crossvalidation.to_yaml,related_links,description else - halt 400, "MIME type '"+request.env['HTTP_ACCEPT'].to_s+"' not supported." + halt 400, "MIME type '"+request.env['HTTP_ACCEPT'].to_s+"' not supported, valid Accept-Headers: \"application/rdf+xml\", \"application/x-yaml\", \"text/html\"." + end +end + +get '/crossvalidation/:id/statistics' do + LOGGER.info "get merged validation-result for crossvalidation with id "+params[:id].to_s + begin + crossvalidation = Validation::Crossvalidation.find(params[:id]) + rescue ActiveRecord::RecordNotFound => ex + halt 404, "Crossvalidation '#{params[:id]}' not found." + end + + Lib::MergeObjects.register_merge_attributes( Validation::Validation, + Lib::VAL_MERGE_AVG,Lib::VAL_MERGE_SUM,Lib::VAL_MERGE_GENERAL-[:validation_uri]) unless + Lib::MergeObjects.merge_attributes_registered?(Validation::Validation) + + v = Lib::MergeObjects.merge_array_objects( Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) ) + v.validation_uri = nil + v.date = nil + v.id = nil + + case request.env['HTTP_ACCEPT'].to_s + when /text\/html/ + related_links = + "The corresponding crossvalidation resource: "+$sinatra.url_for("/crossvalidation/"+params[:id],:full) + description = + "The averaged statistics for the crossvalidation." + content_type "text/html" + OpenTox.text_to_html v.to_yaml,related_links,description + else + content_type "application/x-yaml" + v.to_yaml end - result end delete '/crossvalidation/:id/?' do - halt 400,"delete temporarily disabled" LOGGER.info "delete crossvalidation with id "+params[:id].to_s content_type "text/plain" begin @@ -82,27 +155,6 @@ get '/crossvalidation/:id/validations' do Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ).collect{ |v| v.validation_uri.to_s }.join("\n")+"\n" end - -get '/crossvalidation/:id/statistics' do - LOGGER.info "get merged validation-result for crossvalidation with id "+params[:id].to_s - begin - crossvalidation = Validation::Crossvalidation.find(params[:id]) - rescue ActiveRecord::RecordNotFound => ex - halt 404, "Crossvalidation '#{params[:id]}' not found." - end - - Lib::MergeObjects.register_merge_attributes( Validation::Validation, - Lib::VAL_MERGE_AVG,Lib::VAL_MERGE_SUM,Lib::VAL_MERGE_GENERAL-[:validation_uri]) unless - Lib::MergeObjects.merge_attributes_registered?(Validation::Validation) - - v = Lib::MergeObjects.merge_array_objects( Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) ) - v.validation_uri = nil - v.date = nil - v.id = nil - content_type "application/x-yaml" - v.to_yaml -end - get '/crossvalidation/:id/predictions' do LOGGER.info "get predictions for crossvalidation with id "+params[:id].to_s begin @@ -115,154 +167,222 @@ get '/crossvalidation/:id/predictions' do Lib::OTPredictions.to_array( validations.collect{ |v| v.compute_validation_stats_with_model(nil, true) } ).to_yaml end - -post '/crossvalidation/?' do - content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform crossvalidation", url_for("/crossvalidation", :full), params ) do - LOGGER.info "creating crossvalidation "+params.inspect - halt 400, "dataset_uri missing" unless params[:dataset_uri] - halt 400, "algorithm_uri missing" unless params[:algorithm_uri] - halt 400, "prediction_feature missing" unless params[:prediction_feature] - halt 400, "illegal param-value num_folds: '"+params[:num_folds].to_s+"', must be integer >1" unless params[:num_folds]==nil or - params[:num_folds].to_i>1 - - cv_params = { :dataset_uri => params[:dataset_uri], - :algorithm_uri => params[:algorithm_uri] } - [ :num_folds, :random_seed, :stratified ].each{ |sym| cv_params[sym] = params[sym] if params[sym] } - cv = Validation::Crossvalidation.new cv_params - cv.create_cv_datasets( params[:prediction_feature] ) - cv.perform_cv( params[:algorithm_params]) +get '/?' do + LOGGER.info "list all validations, params: "+params.inspect + uri_list = Validation::Validation.find_like(params).collect{ |d| url_for("/", :full) + d.id.to_s }.join("\n")+"\n" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ + related_links = + "To perform a validation:\n"+ + "* "+$sinatra.url_for("/test_set_validation",:full)+"\n"+ + "* "+$sinatra.url_for("/training_test_validation",:full)+"\n"+ + "* "+$sinatra.url_for("/bootstrapping",:full)+"\n"+ + "* "+$sinatra.url_for("/training_test_split",:full)+"\n"+ + "* "+$sinatra.url_for("/crossvalidation",:full)+"\n"+ + "Validation reports: "+$sinatra.url_for("/report/validation",:full)+"\n"+ + "Examples for using this service: "+$sinatra.url_for("/examples",:full)+"\n" + description = + "A validation web service for the OpenTox project ( http://opentox.org ).\n"+ + "In the root directory (this is where you are now), a list of all validation resources is returned." + content_type "text/html" + OpenTox.text_to_html uri_list,related_links,description + else content_type "text/uri-list" - cv.crossvalidation_uri + uri_list end - halt 202,task_uri end - -get '/training_test_split' do - halt 400, "GET operation not supported, use POST to perform a training_test_split, see "+url_for("/", :full)+" for validation results" -end - - -get '/bootstrapping' do - halt 400, "GET operation not supported, use POST to perform a bootstrapping, see "+url_for("/", :full)+" for validation results" +post '/?' do + halt 400, "Post not supported, to perfom a validation use '/test_set_validation', '/training_test_validation', 'bootstrapping', 'training_test_split'" end - -get '/?' do - LOGGER.info "list all validations, params: "+params.inspect +post '/test_set_validation' do content_type "text/uri-list" - Validation::Validation.find_like(params).collect{ |d| url_for("/", :full) + d.id.to_s }.join("\n")+"\n" -end - -get '/:id' do - LOGGER.info "get validation with id "+params[:id].to_s+" '"+request.env['HTTP_ACCEPT'].to_s+"'" - begin - validation = Validation::Validation.find(params[:id]) - rescue ActiveRecord::RecordNotFound => ex - halt 404, "Validation '#{params[:id]}' not found." + LOGGER.info "creating test-set-validation "+params.inspect + if params[:model_uri] and params[:test_dataset_uri] and !params[:training_dataset_uri] and !params[:algorithm_uri] + task_uri = OpenTox::Task.as_task( "Perform test-set-validation", url_for("/", :full), params ) do |task| + v = Validation::Validation.new :model_uri => params[:model_uri], + :test_dataset_uri => params[:test_dataset_uri], + :test_target_dataset_uri => params[:test_target_dataset_uri], + :prediction_feature => params[:prediction_feature] + v.validate_model + v.validation_uri + end + halt 202,task_uri+"\n" + else + halt 400, "illegal parameters, pls specify model_uri and test_dataset_uri\n"+ + "params given: "+params.inspect end +end - case request.env['HTTP_ACCEPT'].to_s - when "application/rdf+xml" - content_type "application/rdf+xml" - result = validation.to_rdf - when /application\/x-yaml|\*\/\*|^$/ # matches 'application/x-yaml', '*/*', '' - content_type "application/x-yaml" - result = validation.to_yaml +get '/test_set_validation' do + LOGGER.info "list all test-set-validations, params: "+params.inspect + uri_list = "NOT YET IMPLEMENTED" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ + related_links = + "All validations: "+$sinatra.url_for("/",:full)+"\n"+ + "Validation reports: "+$sinatra.url_for("/report/validation",:full) + description = + "A list of all test-set-validations.\n"+ + "To perform a test-set-validation use the POST method." + post_params = [[:model_uri, :test_dataset_uri, [:test_target_dataset_uri,"same-as-test_dataset_uri"], [:prediction_feature, "dependent-variable-of-model"]]] + content_type "text/html" + OpenTox.text_to_html uri_list,related_links,description,post_params else - halt 400, "MIME type '"+request.env['HTTP_ACCEPT'].to_s+"' not supported, valid Accept-Headers are \"application/rdf+xml\" and \"application/x-yaml\"." + content_type "text/uri-list" + uri_list end - result end -post '/?' do +post '/training_test_validation/?' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform validation", url_for("/", :full), params ) do |task| - LOGGER.info "creating validation "+params.inspect - if params[:model_uri] and params[:test_dataset_uri] and !params[:training_dataset_uri] and !params[:algorithm_uri] - v = Validation::Validation.new :model_uri => params[:model_uri], - :test_dataset_uri => params[:test_dataset_uri], - :test_target_dataset_uri => params[:test_target_dataset_uri], - :prediction_feature => params[:prediction_feature] - v.validate_model - elsif params[:algorithm_uri] and params[:training_dataset_uri] and params[:test_dataset_uri] and params[:prediction_feature] and !params[:model_uri] - v = Validation::Validation.new :algorithm_uri => params[:algorithm_uri], + LOGGER.info "creating training-test-validation "+params.inspect + if params[:algorithm_uri] and params[:training_dataset_uri] and params[:test_dataset_uri] and params[:prediction_feature] and !params[:model_uri] + task_uri = OpenTox::Task.as_task( "Perform training-test-validation", url_for("/", :full), params ) do |task| + v = Validation::Validation.new :algorithm_uri => params[:algorithm_uri], :training_dataset_uri => params[:training_dataset_uri], :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:test_target_dataset_uri], :prediction_feature => params[:prediction_feature] - v.validate_algorithm( params[:algorithm_params]) - else - halt 400, "illegal parameter combination for validation, use either\n"+ - "* model_uri, test_dataset_uri\n"+ - "* algorithm_uri, training_dataset_uri, test_dataset_uri, prediction_feature\n"+ - "params given: "+params.inspect + v.validate_algorithm( params[:algorithm_params]) + v.validation_uri end - content_type "text/uri-list" - v.validation_uri + halt 202,task_uri+"\n" + else + halt 400, "illegal parameters, pls specify algorithm_uri, training_dataset_uri, test_dataset_uri, prediction_feature\n"+ + "params given: "+params.inspect end - halt 202,task_uri end - -post '/cleanup/?' do - LOGGER.info "validation cleanup, starting..." - content_type "text/uri-list" - deleted = [] - Validation::Validation.find( :all, :conditions => { :prediction_dataset_uri => nil } ).each do |val| - LOGGER.debug "delete val with id:"+val.id.to_s+" prediction_dataset_uri is nil" - deleted << url_for("/", :full) + val.id.to_s - Validation::Validation.delete(val.id) +get '/training_test_validation' do + LOGGER.info "list all training-test-validations, params: "+params.inspect + uri_list = "NOT YET IMPLEMENTED" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ + related_links = + "All validations: "+$sinatra.url_for("/",:full)+"\n"+ + "Validation reports: "+$sinatra.url_for("/report/validation",:full) + description = + "A list of all training-test-validations.\n"+ + "To perform a training-test-validation use the POST method." + post_params = [[:algorithm_uri, + :training_dataset_uri, + :test_dataset_uri, + [:test_target_dataset_uri,"same-as-test_dataset_uri"], + :prediction_feature, + [:algorithm_params, ""]]] + content_type "text/html" + OpenTox.text_to_html uri_list,related_links,description,post_params + else + content_type "text/uri-list" + uri_list end - LOGGER.info "validation cleanup, deleted "+deleted.size.to_s+" validations" - deleted.join("\n")+"\n" end -post '/training_test_split' do +post '/bootstrapping' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform training test split validation", url_for("/training_test_split", :full), params ) do - LOGGER.info "creating training test split "+params.inspect + task_uri = OpenTox::Task.as_task( "Perform bootstrapping validation", url_for("/bootstrapping", :full), params ) do + LOGGER.info "performing bootstrapping validation "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] halt 400, "prediction_feature missing" unless params[:prediction_feature] - params.merge!(Validation::Util.train_test_dataset_split(params[:dataset_uri], params[:prediction_feature], params[:split_ratio], params[:random_seed])) + params.merge!(Validation::Util.bootstrapping(params[:dataset_uri], params[:prediction_feature], params[:random_seed])) v = Validation::Validation.new :training_dataset_uri => params[:training_dataset_uri], :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:dataset_uri], :prediction_feature => params[:prediction_feature], :algorithm_uri => params[:algorithm_uri] v.validate_algorithm( params[:algorithm_params]) - content_type "text/uri-list" v.validation_uri end - halt 202,task_uri + halt 202,task_uri+"\n" end +get '/bootstrapping' do + LOGGER.info "list all bootstrapping-validations, params: "+params.inspect + uri_list = "NOT YET IMPLEMENTED" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ + related_links = + "All validations: "+$sinatra.url_for("/",:full)+"\n"+ + "Validation reports: "+$sinatra.url_for("/report/validation",:full) + description = + "A list of all bootstrapping-validations.\n"+ + "To perform a bootstrapping-validation use the POST method." + post_params = [[:algorithm_uri, + :dataset_uri, + :prediction_feature, + [:algorithm_params, ""], + [:random_seed, 1]]] + content_type "text/html" + OpenTox.text_to_html uri_list,related_links,description,post_params + else + content_type "text/uri-list" + uri_list + end +end -post '/bootstrapping' do +post '/training_test_split' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform bootstrapping validation", url_for("/bootstrapping", :full), params ) do - LOGGER.info "performing bootstrapping validation "+params.inspect + task_uri = OpenTox::Task.as_task( "Perform training test split validation", url_for("/training_test_split", :full), params ) do + LOGGER.info "creating training test split "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] halt 400, "prediction_feature missing" unless params[:prediction_feature] - params.merge!(Validation::Util.bootstrapping(params[:dataset_uri], params[:prediction_feature], params[:random_seed])) + params.merge!(Validation::Util.train_test_dataset_split(params[:dataset_uri], params[:prediction_feature], params[:split_ratio], params[:random_seed])) v = Validation::Validation.new :training_dataset_uri => params[:training_dataset_uri], :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:dataset_uri], :prediction_feature => params[:prediction_feature], :algorithm_uri => params[:algorithm_uri] v.validate_algorithm( params[:algorithm_params]) - content_type "text/uri-list" v.validation_uri end - halt 202,task_uri + halt 202,task_uri+"\n" +end + +get '/training_test_split' do + LOGGER.info "list all training-test-split-validations, params: "+params.inspect + uri_list = "NOT YET IMPLEMENTED" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ + related_links = + "All validations: "+$sinatra.url_for("/",:full)+"\n"+ + "Validation reports: "+$sinatra.url_for("/report/validation",:full) + description = + "A list of all training-test-split-validations.\n"+ + "To perform a training-test-split-validation use the POST method." + post_params = [[:algorithm_uri, + :dataset_uri, + :prediction_feature, + [:algorithm_params, ""], + [:random_seed, 1], + [:split_ratio, 0.66]]] + content_type "text/html" + OpenTox.text_to_html uri_list,related_links,description,post_params + else + content_type "text/uri-list" + uri_list + end +end + +post '/cleanup/?' do + LOGGER.info "validation cleanup, starting..." + content_type "text/uri-list" + deleted = [] + Validation::Validation.find( :all, :conditions => { :prediction_dataset_uri => nil } ).each do |val| + LOGGER.debug "delete val with id:"+val.id.to_s+" prediction_dataset_uri is nil" + deleted << url_for("/", :full) + val.id.to_s + Validation::Validation.delete(val.id) + end + LOGGER.info "validation cleanup, deleted "+deleted.size.to_s+" validations" + deleted.join("\n")+"\n" end + + + + + post '/plain_training_test_split' do LOGGER.info "creating pure training test split "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] @@ -294,10 +414,9 @@ post '/validate_datasets' do v = Validation::Validation.new params v.compute_validation_stats((clazz and !regr),predicted_feature) end - content_type "text/uri-list" v.validation_uri end - halt 202,task_uri + halt 202,task_uri+"\n" end get '/:id/predictions' do @@ -307,9 +426,20 @@ get '/:id/predictions' do rescue ActiveRecord::RecordNotFound => ex halt 404, "Validation '#{params[:id]}' not found." end - content_type "text/x-yaml" p = validation.compute_validation_stats_with_model(nil, true) - p.to_array.to_yaml + case request.env['HTTP_ACCEPT'].to_s + when /text\/html/ + content_type "text/html" + description = + "The validation predictions as (yaml-)array." + related_links = + "All validations: "+$sinatra.url_for("/",:full)+"\n"+ + "Correspoding validation: "+$sinatra.url_for("/"+params[:id],:full) + OpenTox.text_to_html p.to_array.to_yaml, related_links, description + else + content_type "text/x-yaml" + p.to_array.to_yaml + end end get '/:id/:attribute' do @@ -328,8 +458,37 @@ get '/:id/:attribute' do return validation.send(params[:attribute]) end +get '/:id' do + LOGGER.info "get validation with id "+params[:id].to_s+" '"+request.env['HTTP_ACCEPT'].to_s+"'" + begin + validation = Validation::Validation.find(params[:id]) + rescue ActiveRecord::RecordNotFound => ex + halt 404, "Validation '#{params[:id]}' not found." + end + + case request.env['HTTP_ACCEPT'].to_s + when "application/rdf+xml" + content_type "application/rdf+xml" + validation.to_rdf + when /application\/x-yaml/ + content_type "application/x-yaml" + validation.to_yaml + when /text\/html/ + content_type "text/html" + description = + "A validation resource." + related_links = + "Search for corresponding report: "+$sinatra.url_for("/report/validation?validation="+validation.validation_uri,:full)+"\n"+ + "Get validation predictions: "+$sinatra.url_for("/"+params[:id]+"/predictions",:full)+"\n"+ + "All validations: "+$sinatra.url_for("/",:full)+"\n"+ + "All validation reports: "+$sinatra.url_for("/report/validation",:full) + OpenTox.text_to_html validation.to_yaml,related_links,description + else + halt 400, "MIME type '"+request.env['HTTP_ACCEPT'].to_s+"' not supported, valid Accept-Headers: \"application/rdf+xml\", \"application/x-yaml\", \"text/html\"." + end +end + delete '/:id' do - halt 400,"delete temporarily disabled" LOGGER.info "delete validation with id "+params[:id].to_s begin validation = Validation::Validation.find(params[:id]) -- cgit v1.2.3 From a6d79dffc5f65300f06f3a33451ef26d0fb96f08 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Mon, 11 Oct 2010 14:38:13 +0200 Subject: example fix, format-reports as task, report-format-simplified, validation resource with */* --- validation/validation_application.rb | 79 +++++++++++++++++++++--------------- 1 file changed, 47 insertions(+), 32 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 983f3bd..cf6fc78 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -84,19 +84,20 @@ get '/crossvalidation/:id' do when "application/rdf+xml" content_type "application/rdf+xml" crossvalidation.to_rdf - when /application\/x-yaml/ - content_type "application/x-yaml" - crossvalidation.to_yaml when /text\/html/ related_links = "Search for corresponding cv report: "+$sinatra.url_for("/report/crossvalidation?crossvalidation="+crossvalidation.crossvalidation_uri,:full)+"\n"+ "Statistics for this crossvalidation: "+$sinatra.url_for("/crossvalidation/"+params[:id]+"/statistics",:full)+"\n"+ + "Predictions of this crossvalidation: "+$sinatra.url_for("/crossvalidation/"+params[:id]+"/predictions",:full)+"\n"+ "All crossvalidations: "+$sinatra.url_for("/crossvalidation",:full)+"\n"+ "All crossvalidation reports: "+$sinatra.url_for("/report/crossvalidation",:full) description = "A crossvalidation resource." content_type "text/html" OpenTox.text_to_html crossvalidation.to_yaml,related_links,description + when /application\/x-yaml|\*\/\*/ + content_type "application/x-yaml" + crossvalidation.to_yaml else halt 400, "MIME type '"+request.env['HTTP_ACCEPT'].to_s+"' not supported, valid Accept-Headers: \"application/rdf+xml\", \"application/x-yaml\", \"text/html\"." end @@ -144,16 +145,16 @@ delete '/crossvalidation/:id/?' do Validation::Crossvalidation.delete(params[:id]) end -get '/crossvalidation/:id/validations' do - LOGGER.info "get all validations for crossvalidation with id "+params[:id].to_s - begin - crossvalidation = Validation::Crossvalidation.find(params[:id]) - rescue ActiveRecord::RecordNotFound => ex - halt 404, "Crossvalidation '#{params[:id]}' not found." - end - content_type "text/uri-list" - Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ).collect{ |v| v.validation_uri.to_s }.join("\n")+"\n" -end +#get '/crossvalidation/:id/validations' do +# LOGGER.info "get all validations for crossvalidation with id "+params[:id].to_s +# begin +# crossvalidation = Validation::Crossvalidation.find(params[:id]) +# rescue ActiveRecord::RecordNotFound => ex +# halt 404, "Crossvalidation '#{params[:id]}' not found." +# end +# content_type "text/uri-list" +# Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ).collect{ |v| v.validation_uri.to_s }.join("\n")+"\n" +#end get '/crossvalidation/:id/predictions' do LOGGER.info "get predictions for crossvalidation with id "+params[:id].to_s @@ -164,7 +165,21 @@ get '/crossvalidation/:id/predictions' do end content_type "application/x-yaml" validations = Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) - Lib::OTPredictions.to_array( validations.collect{ |v| v.compute_validation_stats_with_model(nil, true) } ).to_yaml + p = Lib::OTPredictions.to_array( validations.collect{ |v| v.compute_validation_stats_with_model(nil, true) } ).to_yaml + + case request.env['HTTP_ACCEPT'].to_s + when /text\/html/ + content_type "text/html" + description = + "The crossvalidation predictions as (yaml-)array." + related_links = + "All crossvalidations: "+$sinatra.url_for("/crossvalidation",:full)+"\n"+ + "Correspoding crossvalidation: "+$sinatra.url_for("/crossvalidation/"+params[:id],:full) + OpenTox.text_to_html p, related_links, description + else + content_type "text/x-yaml" + p + end end get '/?' do @@ -442,21 +457,21 @@ get '/:id/predictions' do end end -get '/:id/:attribute' do - LOGGER.info "access validation attribute "+params.inspect - begin - validation = Validation::Validation.find(params[:id]) - rescue ActiveRecord::RecordNotFound => ex - halt 404, "Validation '#{params[:id]}' not found." - end - begin - raise unless validation.attribute_loaded?(params[:attribute]) - rescue - halt 400, "Not a validation attribute: "+params[:attribute].to_s - end - content_type "text/plain" - return validation.send(params[:attribute]) -end +#get '/:id/:attribute' do +# LOGGER.info "access validation attribute "+params.inspect +# begin +# validation = Validation::Validation.find(params[:id]) +# rescue ActiveRecord::RecordNotFound => ex +# halt 404, "Validation '#{params[:id]}' not found." +# end +# begin +# raise unless validation.attribute_loaded?(params[:attribute]) +# rescue +# halt 400, "Not a validation attribute: "+params[:attribute].to_s +# end +# content_type "text/plain" +# return validation.send(params[:attribute]) +#end get '/:id' do LOGGER.info "get validation with id "+params[:id].to_s+" '"+request.env['HTTP_ACCEPT'].to_s+"'" @@ -470,9 +485,6 @@ get '/:id' do when "application/rdf+xml" content_type "application/rdf+xml" validation.to_rdf - when /application\/x-yaml/ - content_type "application/x-yaml" - validation.to_yaml when /text\/html/ content_type "text/html" description = @@ -483,6 +495,9 @@ get '/:id' do "All validations: "+$sinatra.url_for("/",:full)+"\n"+ "All validation reports: "+$sinatra.url_for("/report/validation",:full) OpenTox.text_to_html validation.to_yaml,related_links,description + when /application\/x-yaml|\*\/\*/ + content_type "application/x-yaml" + validation.to_yaml else halt 400, "MIME type '"+request.env['HTTP_ACCEPT'].to_s+"' not supported, valid Accept-Headers: \"application/rdf+xml\", \"application/x-yaml\", \"text/html\"." end -- cgit v1.2.3 From 16a25a63ba7882901a778745d0a32baaafc22cad Mon Sep 17 00:00:00 2001 From: mguetlein Date: Fri, 26 Nov 2010 16:05:25 +0100 Subject: huge commit, main changes: validation_type and .finished introduced, supporting subtasks, reporting slightly refactored --- validation/validation_application.rb | 73 +++++++++++++++++++----------------- 1 file changed, 39 insertions(+), 34 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index cf6fc78..6785943 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -10,7 +10,7 @@ require 'validation/validation_service.rb' get '/crossvalidation/?' do LOGGER.info "list all crossvalidations" - uri_list = Validation::Crossvalidation.find_like(params).collect{ |d| url_for("/crossvalidation/", :full) + d.id.to_s }.join("\n")+"\n" + uri_list = Validation::Crossvalidation.find_like(params).collect{ |cv| cv.crossvalidation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "Single validations: "+$sinatra.url_for("/",:full)+"\n"+ @@ -29,7 +29,7 @@ end post '/crossvalidation/?' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform crossvalidation", url_for("/crossvalidation", :full), params ) do + task_uri = OpenTox::Task.as_task( "Perform crossvalidation", url_for("/crossvalidation", :full), params ) do |task| LOGGER.info "creating crossvalidation "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] @@ -41,8 +41,7 @@ post '/crossvalidation/?' do :algorithm_uri => params[:algorithm_uri] } [ :num_folds, :random_seed, :stratified ].each{ |sym| cv_params[sym] = params[sym] if params[sym] } cv = Validation::Crossvalidation.new cv_params - cv.create_cv_datasets( params[:prediction_feature] ) - cv.perform_cv( params[:algorithm_params]) + cv.perform_cv( params[:prediction_feature], params[:algorithm_params], task ) cv.crossvalidation_uri end halt 202,task_uri+"\n" @@ -56,7 +55,7 @@ post '/crossvalidation/cleanup/?' do num_vals = Validation::Validation.find( :all, :conditions => { :crossvalidation_id => cv.id } ).size if cv.num_folds != num_vals LOGGER.debug "delete cv with id:"+cv.id.to_s+" num-folds should be "+cv.num_folds.to_s+", is "+num_vals.to_s - deleted << url_for("/crossvalidation/", :full) + cv.id.to_s + deleted << cv.crossvalidation_uri Validation::Crossvalidation.delete(cv.id) end end @@ -110,13 +109,13 @@ get '/crossvalidation/:id/statistics' do rescue ActiveRecord::RecordNotFound => ex halt 404, "Crossvalidation '#{params[:id]}' not found." end + halt 400,"Crossvalidation '"+params[:id].to_s+"' not finished" unless crossvalidation.finished Lib::MergeObjects.register_merge_attributes( Validation::Validation, - Lib::VAL_MERGE_AVG,Lib::VAL_MERGE_SUM,Lib::VAL_MERGE_GENERAL-[:validation_uri]) unless + Lib::VAL_MERGE_AVG,Lib::VAL_MERGE_SUM,Lib::VAL_MERGE_GENERAL-[:validation_uri,:crossvalidation_uri]) unless Lib::MergeObjects.merge_attributes_registered?(Validation::Validation) v = Lib::MergeObjects.merge_array_objects( Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) ) - v.validation_uri = nil v.date = nil v.id = nil @@ -163,6 +162,8 @@ get '/crossvalidation/:id/predictions' do rescue ActiveRecord::RecordNotFound => ex halt 404, "Crossvalidation '#{params[:id]}' not found." end + halt 400,"Crossvalidation '"+params[:id].to_s+"' not finished" unless crossvalidation.finished + content_type "application/x-yaml" validations = Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) p = Lib::OTPredictions.to_array( validations.collect{ |v| v.compute_validation_stats_with_model(nil, true) } ).to_yaml @@ -184,7 +185,7 @@ end get '/?' do LOGGER.info "list all validations, params: "+params.inspect - uri_list = Validation::Validation.find_like(params).collect{ |d| url_for("/", :full) + d.id.to_s }.join("\n")+"\n" + uri_list = Validation::Validation.find_like(params).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "To perform a validation:\n"+ @@ -215,11 +216,12 @@ post '/test_set_validation' do LOGGER.info "creating test-set-validation "+params.inspect if params[:model_uri] and params[:test_dataset_uri] and !params[:training_dataset_uri] and !params[:algorithm_uri] task_uri = OpenTox::Task.as_task( "Perform test-set-validation", url_for("/", :full), params ) do |task| - v = Validation::Validation.new :model_uri => params[:model_uri], + v = Validation::Validation.new :validation_type => "test_set_validation", + :model_uri => params[:model_uri], :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:test_target_dataset_uri], :prediction_feature => params[:prediction_feature] - v.validate_model + v.validate_model( task ) v.validation_uri end halt 202,task_uri+"\n" @@ -231,7 +233,7 @@ end get '/test_set_validation' do LOGGER.info "list all test-set-validations, params: "+params.inspect - uri_list = "NOT YET IMPLEMENTED" + uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "test_set_validation" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "All validations: "+$sinatra.url_for("/",:full)+"\n"+ @@ -253,12 +255,13 @@ post '/training_test_validation/?' do LOGGER.info "creating training-test-validation "+params.inspect if params[:algorithm_uri] and params[:training_dataset_uri] and params[:test_dataset_uri] and params[:prediction_feature] and !params[:model_uri] task_uri = OpenTox::Task.as_task( "Perform training-test-validation", url_for("/", :full), params ) do |task| - v = Validation::Validation.new :algorithm_uri => params[:algorithm_uri], + v = Validation::Validation.new :validation_type => "training_test_validation", + :algorithm_uri => params[:algorithm_uri], :training_dataset_uri => params[:training_dataset_uri], :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:test_target_dataset_uri], :prediction_feature => params[:prediction_feature] - v.validate_algorithm( params[:algorithm_params]) + v.validate_algorithm( params[:algorithm_params], task ) v.validation_uri end halt 202,task_uri+"\n" @@ -270,7 +273,7 @@ end get '/training_test_validation' do LOGGER.info "list all training-test-validations, params: "+params.inspect - uri_list = "NOT YET IMPLEMENTED" + uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "training_test_validation" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "All validations: "+$sinatra.url_for("/",:full)+"\n"+ @@ -294,19 +297,21 @@ end post '/bootstrapping' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform bootstrapping validation", url_for("/bootstrapping", :full), params ) do + task_uri = OpenTox::Task.as_task( "Perform bootstrapping validation", url_for("/bootstrapping", :full), params ) do |task| LOGGER.info "performing bootstrapping validation "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] halt 400, "prediction_feature missing" unless params[:prediction_feature] - params.merge!(Validation::Util.bootstrapping(params[:dataset_uri], params[:prediction_feature], params[:random_seed])) - v = Validation::Validation.new :training_dataset_uri => params[:training_dataset_uri], + params.merge!( Validation::Util.bootstrapping( params[:dataset_uri], + params[:prediction_feature], params[:random_seed], OpenTox::SubTask.create(task,0,33)) ) + v = Validation::Validation.new :validation_type => "bootstrapping", + :training_dataset_uri => params[:training_dataset_uri], :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:dataset_uri], :prediction_feature => params[:prediction_feature], :algorithm_uri => params[:algorithm_uri] - v.validate_algorithm( params[:algorithm_params]) + v.validate_algorithm( params[:algorithm_params], OpenTox::SubTask.create(task,33,100)) v.validation_uri end halt 202,task_uri+"\n" @@ -314,7 +319,7 @@ end get '/bootstrapping' do LOGGER.info "list all bootstrapping-validations, params: "+params.inspect - uri_list = "NOT YET IMPLEMENTED" + uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "bootstrapping" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "All validations: "+$sinatra.url_for("/",:full)+"\n"+ @@ -336,20 +341,24 @@ get '/bootstrapping' do end post '/training_test_split' do + content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform training test split validation", url_for("/training_test_split", :full), params ) do + task_uri = OpenTox::Task.as_task( "Perform training test split validation", url_for("/training_test_split", :full), params ) do |task| + LOGGER.info "creating training test split "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] halt 400, "prediction_feature missing" unless params[:prediction_feature] - params.merge!(Validation::Util.train_test_dataset_split(params[:dataset_uri], params[:prediction_feature], params[:split_ratio], params[:random_seed])) - v = Validation::Validation.new :training_dataset_uri => params[:training_dataset_uri], + params.merge!( Validation::Util.train_test_dataset_split(params[:dataset_uri], params[:prediction_feature], + params[:split_ratio], params[:random_seed], OpenTox::SubTask.create(task,0,33))) + v = Validation::Validation.new :validation_type => "training_test_split", + :training_dataset_uri => params[:training_dataset_uri], :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:dataset_uri], :prediction_feature => params[:prediction_feature], :algorithm_uri => params[:algorithm_uri] - v.validate_algorithm( params[:algorithm_params]) + v.validate_algorithm( params[:algorithm_params], OpenTox::SubTask.create(task,33,100)) v.validation_uri end halt 202,task_uri+"\n" @@ -357,7 +366,7 @@ end get '/training_test_split' do LOGGER.info "list all training-test-split-validations, params: "+params.inspect - uri_list = "NOT YET IMPLEMENTED" + uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "training_test_split" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "All validations: "+$sinatra.url_for("/",:full)+"\n"+ @@ -385,19 +394,13 @@ post '/cleanup/?' do deleted = [] Validation::Validation.find( :all, :conditions => { :prediction_dataset_uri => nil } ).each do |val| LOGGER.debug "delete val with id:"+val.id.to_s+" prediction_dataset_uri is nil" - deleted << url_for("/", :full) + val.id.to_s + deleted << val.validation_uri Validation::Validation.delete(val.id) end LOGGER.info "validation cleanup, deleted "+deleted.size.to_s+" validations" deleted.join("\n")+"\n" end - - - - - - post '/plain_training_test_split' do LOGGER.info "creating pure training test split "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] @@ -409,14 +412,15 @@ end post '/validate_datasets' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform dataset validation", url_for("/validate_datasets", :full), params ) do + task_uri = OpenTox::Task.as_task( "Perform dataset validation", url_for("/validate_datasets", :full), params ) do |task| LOGGER.info "validating values "+params.inspect halt 400, "test_dataset_uri missing" unless params[:test_dataset_uri] halt 400, "prediction_datset_uri missing" unless params[:prediction_dataset_uri] + params[:validation_type] = "validate_datasets" if params[:model_uri] v = Validation::Validation.new params - v.compute_validation_stats_with_model() + v.compute_validation_stats_with_model(nil,false,task) else halt 400, "please specify 'model_uri' or 'prediction_feature'" unless params[:prediction_feature] halt 400, "please specify 'model_uri' or 'predicted_feature'" unless params[:predicted_feature] @@ -427,7 +431,7 @@ post '/validate_datasets' do clazz = params.delete("classification")!=nil regr = params.delete("regression")!=nil v = Validation::Validation.new params - v.compute_validation_stats((clazz and !regr),predicted_feature) + v.compute_validation_stats((clazz and !regr),predicted_feature,nil,false,task) end v.validation_uri end @@ -441,6 +445,7 @@ get '/:id/predictions' do rescue ActiveRecord::RecordNotFound => ex halt 404, "Validation '#{params[:id]}' not found." end + halt 400,"Validation '"+params[:id].to_s+"' not finished" unless validation.finished p = validation.compute_validation_stats_with_model(nil, true) case request.env['HTTP_ACCEPT'].to_s when /text\/html/ -- cgit v1.2.3 From 3d8db6648a7831d41aad27d1509f29f87a30723e Mon Sep 17 00:00:00 2001 From: mguetlein Date: Mon, 29 Nov 2010 12:44:19 +0100 Subject: add qmrf to examples, add text/html support for qmrf --- validation/validation_application.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 6785943..2a2bcb0 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -194,7 +194,8 @@ get '/?' do "* "+$sinatra.url_for("/bootstrapping",:full)+"\n"+ "* "+$sinatra.url_for("/training_test_split",:full)+"\n"+ "* "+$sinatra.url_for("/crossvalidation",:full)+"\n"+ - "Validation reports: "+$sinatra.url_for("/report/validation",:full)+"\n"+ + "Validation reporting: "+$sinatra.url_for("/report",:full)+"\n"+ + "REACH relevant reporting: "+$sinatra.url_for("/reach_report",:full)+"\n"+ "Examples for using this service: "+$sinatra.url_for("/examples",:full)+"\n" description = "A validation web service for the OpenTox project ( http://opentox.org ).\n"+ -- cgit v1.2.3 From eeb0b6df2dbdae29ccf3f4ccd923002e0ed65506 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Thu, 13 Jan 2011 15:18:45 +0100 Subject: adjust to new wrapper, replace activerecord with datamapper (remove activerecord code), is_classification to feature_type --- validation/validation_application.rb | 161 +++++++++++++++++++++-------------- 1 file changed, 98 insertions(+), 63 deletions(-) mode change 100644 => 100755 validation/validation_application.rb (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb old mode 100644 new mode 100755 index 2a2bcb0..9c6c60c --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -1,16 +1,17 @@ -[ 'rubygems', 'sinatra', 'sinatra/url_for', 'opentox-ruby-api-wrapper' ].each do |lib| +[ 'rubygems', 'sinatra', 'sinatra/url_for', 'opentox-ruby' ].each do |lib| require lib end require 'lib/merge.rb' -require 'lib/active_record_setup.rb' +#require 'lib/active_record_setup.rb' require 'validation/validation_service.rb' get '/crossvalidation/?' do LOGGER.info "list all crossvalidations" - uri_list = Validation::Crossvalidation.find_like(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" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "Single validations: "+$sinatra.url_for("/",:full)+"\n"+ @@ -28,8 +29,7 @@ get '/crossvalidation/?' do end post '/crossvalidation/?' do - content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform crossvalidation", url_for("/crossvalidation", :full), params ) do |task| + task = OpenTox::Task.create( "Perform crossvalidation", url_for("/crossvalidation", :full) ) do |task| #, params LOGGER.info "creating crossvalidation "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] @@ -44,20 +44,25 @@ post '/crossvalidation/?' do cv.perform_cv( params[:prediction_feature], params[:algorithm_params], task ) cv.crossvalidation_uri end - halt 202,task_uri+"\n" + content_type 'text/uri-list' + halt 503,task.uri+"\n" if task.status == "Cancelled" + halt 202,task.uri end post '/crossvalidation/cleanup/?' do LOGGER.info "crossvalidation cleanup, starting..." content_type "text/uri-list" deleted = [] - Validation::Crossvalidation.find_like(params).each do |cv| - num_vals = Validation::Validation.find( :all, :conditions => { :crossvalidation_id => cv.id } ).size - if cv.num_folds != num_vals - LOGGER.debug "delete cv with id:"+cv.id.to_s+" num-folds should be "+cv.num_folds.to_s+", is "+num_vals.to_s + #Validation::Crossvalidation.find_like(params).each do |cv| + Validation::Crossvalidation.all( { :finished => false } ).each do |cv| + #num_vals = Validation::Validation.find( :all, :conditions => { :crossvalidation_id => cv.id } ).size + #num_vals = Validation::Validation.all( :crossvalidation_id => cv.id ).size + #if cv.num_folds != num_vals || !cv.finished + LOGGER.debug "delete cv with id:"+cv.id.to_s+", finished is false" deleted << cv.crossvalidation_uri - Validation::Crossvalidation.delete(cv.id) - end + #Validation::Crossvalidation.delete(cv.id) + cv.delete + #end end LOGGER.info "crossvalidation cleanup, deleted "+deleted.size.to_s+" cvs" deleted.join("\n")+"\n" @@ -73,11 +78,13 @@ end get '/crossvalidation/:id' do LOGGER.info "get crossvalidation with id "+params[:id].to_s - begin - crossvalidation = Validation::Crossvalidation.find(params[:id]) - rescue ActiveRecord::RecordNotFound => ex - halt 404, "Crossvalidation '#{params[:id]}' not found." - end +# begin +# #crossvalidation = Validation::Crossvalidation.find(params[:id]) +# rescue ActiveRecord::RecordNotFound => ex +# halt 404, "Crossvalidation '#{params[:id]}' not found." +# end + crossvalidation = Validation::Crossvalidation.get(params[:id]) + halt 404,"Crossvalidation '#{params[:id]}' not found." unless crossvalidation case request.env['HTTP_ACCEPT'].to_s when "application/rdf+xml" @@ -104,19 +111,24 @@ end get '/crossvalidation/:id/statistics' do LOGGER.info "get merged validation-result for crossvalidation with id "+params[:id].to_s - begin - crossvalidation = Validation::Crossvalidation.find(params[:id]) - rescue ActiveRecord::RecordNotFound => ex - halt 404, "Crossvalidation '#{params[:id]}' not found." - end +# begin + #crossvalidation = Validation::Crossvalidation.find(params[:id]) +# rescue ActiveRecord::RecordNotFound => ex +# halt 404, "Crossvalidation '#{params[:id]}' not found." +# end + #crossvalidation = Validation::Crossvalidation.find(params[:id]) + crossvalidation = Validation::Crossvalidation.get(params[:id]) + + halt 404,"Crossvalidation '#{params[:id]}' not found." unless crossvalidation halt 400,"Crossvalidation '"+params[:id].to_s+"' not finished" unless crossvalidation.finished Lib::MergeObjects.register_merge_attributes( Validation::Validation, - Lib::VAL_MERGE_AVG,Lib::VAL_MERGE_SUM,Lib::VAL_MERGE_GENERAL-[:validation_uri,:crossvalidation_uri]) unless + Lib::VAL_MERGE_AVG,Lib::VAL_MERGE_SUM,Lib::VAL_MERGE_GENERAL-[:date,:validation_uri,:crossvalidation_uri]) unless Lib::MergeObjects.merge_attributes_registered?(Validation::Validation) - v = Lib::MergeObjects.merge_array_objects( Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) ) - v.date = nil + #v = Lib::MergeObjects.merge_array_objects( Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) ) + v = Lib::MergeObjects.merge_array_objects( Validation::Validation.all( :crossvalidation_id => params[:id] ) ) + v.created_at = nil v.id = nil case request.env['HTTP_ACCEPT'].to_s @@ -136,12 +148,16 @@ end delete '/crossvalidation/:id/?' do LOGGER.info "delete crossvalidation with id "+params[:id].to_s content_type "text/plain" - begin - crossvalidation = Validation::Crossvalidation.find(params[:id]) - rescue ActiveRecord::RecordNotFound => ex - halt 404, "Crossvalidation '#{params[:id]}' not found." - end - Validation::Crossvalidation.delete(params[:id]) +# begin + #crossvalidation = Validation::Crossvalidation.find(params[:id]) +# rescue ActiveRecord::RecordNotFound => ex +# halt 404, "Crossvalidation '#{params[:id]}' not found." +# end +# Validation::Crossvalidation.delete(params[:id]) + + cv = Validation::Crossvalidation.get(params[:id]) + halt 404,"Crossvalidation '#{params[:id]}' not found." unless cv + cv.delete end #get '/crossvalidation/:id/validations' do @@ -158,14 +174,16 @@ end get '/crossvalidation/:id/predictions' do LOGGER.info "get predictions for crossvalidation with id "+params[:id].to_s begin - crossvalidation = Validation::Crossvalidation.find(params[:id]) + #crossvalidation = Validation::Crossvalidation.find(params[:id]) + crossvalidation = Validation::Crossvalidation.get(params[:id]) rescue ActiveRecord::RecordNotFound => ex halt 404, "Crossvalidation '#{params[:id]}' not found." end halt 400,"Crossvalidation '"+params[:id].to_s+"' not finished" unless crossvalidation.finished content_type "application/x-yaml" - validations = Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) + #validations = Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) + validations = Validation::Validation.all( :crossvalidation_id => params[:id] ) p = Lib::OTPredictions.to_array( validations.collect{ |v| v.compute_validation_stats_with_model(nil, true) } ).to_yaml case request.env['HTTP_ACCEPT'].to_s @@ -184,8 +202,11 @@ get '/crossvalidation/:id/predictions' do 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.find_like(params).collect{ |v| v.validation_uri }.join("\n")+"\n" + uri_list = Validation::Validation.all.collect{ |v| v.validation_uri }.join("\n")+"\n" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "To perform a validation:\n"+ @@ -216,7 +237,7 @@ post '/test_set_validation' do content_type "text/uri-list" LOGGER.info "creating test-set-validation "+params.inspect if params[:model_uri] and params[:test_dataset_uri] and !params[:training_dataset_uri] and !params[:algorithm_uri] - task_uri = OpenTox::Task.as_task( "Perform test-set-validation", url_for("/", :full), params ) do |task| + task = OpenTox::Task.create( "Perform test-set-validation", url_for("/", :full) ) do |task| #, params v = Validation::Validation.new :validation_type => "test_set_validation", :model_uri => params[:model_uri], :test_dataset_uri => params[:test_dataset_uri], @@ -225,7 +246,7 @@ post '/test_set_validation' do v.validate_model( task ) v.validation_uri end - halt 202,task_uri+"\n" + halt 202,task.uri+"\n" else halt 400, "illegal parameters, pls specify model_uri and test_dataset_uri\n"+ "params given: "+params.inspect @@ -234,7 +255,10 @@ end get '/test_set_validation' do LOGGER.info "list all test-set-validations, params: "+params.inspect - uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "test_set_validation" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" + + #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "test_set_validation" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" + uri_list = Validation::Validation.all( :validation_type => "test_set_validation" ).collect{ |v| v.validation_uri }.join("\n")+"\n" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "All validations: "+$sinatra.url_for("/",:full)+"\n"+ @@ -252,10 +276,9 @@ get '/test_set_validation' do end post '/training_test_validation/?' do - content_type "text/uri-list" LOGGER.info "creating training-test-validation "+params.inspect if params[:algorithm_uri] and params[:training_dataset_uri] and params[:test_dataset_uri] and params[:prediction_feature] and !params[:model_uri] - task_uri = OpenTox::Task.as_task( "Perform training-test-validation", url_for("/", :full), params ) do |task| + task = OpenTox::Task.create( "Perform training-test-validation", url_for("/", :full) ) do |task| #, params v = Validation::Validation.new :validation_type => "training_test_validation", :algorithm_uri => params[:algorithm_uri], :training_dataset_uri => params[:training_dataset_uri], @@ -265,7 +288,8 @@ post '/training_test_validation/?' do v.validate_algorithm( params[:algorithm_params], task ) v.validation_uri end - halt 202,task_uri+"\n" + content_type "text/uri-list" + halt 202,task.uri+"\n" else halt 400, "illegal parameters, pls specify algorithm_uri, training_dataset_uri, test_dataset_uri, prediction_feature\n"+ "params given: "+params.inspect @@ -274,7 +298,8 @@ end get '/training_test_validation' do LOGGER.info "list all training-test-validations, params: "+params.inspect - uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "training_test_validation" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" + #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "training_test_validation" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" + uri_list = Validation::Validation.all( :validation_type => "training_test_validation" ).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "All validations: "+$sinatra.url_for("/",:full)+"\n"+ @@ -298,7 +323,7 @@ end post '/bootstrapping' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform bootstrapping validation", url_for("/bootstrapping", :full), params ) do |task| + task = OpenTox::Task.create( "Perform bootstrapping validation", url_for("/bootstrapping", :full) ) do |task| #, params LOGGER.info "performing bootstrapping validation "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] halt 400, "algorithm_uri missing" unless params[:algorithm_uri] @@ -315,12 +340,13 @@ post '/bootstrapping' do v.validate_algorithm( params[:algorithm_params], OpenTox::SubTask.create(task,33,100)) v.validation_uri end - halt 202,task_uri+"\n" + halt 202,task.uri+"\n" end get '/bootstrapping' do LOGGER.info "list all bootstrapping-validations, params: "+params.inspect - uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "bootstrapping" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" + #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "bootstrapping" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" + uri_list = Validation::Validation.all( :validation_type => "bootstrapping" ).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "All validations: "+$sinatra.url_for("/",:full)+"\n"+ @@ -343,8 +369,7 @@ end post '/training_test_split' do - content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform training test split validation", url_for("/training_test_split", :full), params ) do |task| + task = OpenTox::Task.create( "Perform training test split validation", url_for("/training_test_split", :full) ) do |task| #, params LOGGER.info "creating training test split "+params.inspect halt 400, "dataset_uri missing" unless params[:dataset_uri] @@ -362,12 +387,16 @@ post '/training_test_split' do v.validate_algorithm( params[:algorithm_params], OpenTox::SubTask.create(task,33,100)) v.validation_uri end - halt 202,task_uri+"\n" + content_type 'text/uri-list' + halt 503,task.uri+"\n" if task.status == "Cancelled" + halt 202,task.uri + end get '/training_test_split' do LOGGER.info "list all training-test-split-validations, params: "+params.inspect - uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "training_test_split" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" + #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "training_test_split" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" + uri_list = Validation::Validation.all( :validation_type => "training_test_split" ).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "All validations: "+$sinatra.url_for("/",:full)+"\n"+ @@ -393,10 +422,12 @@ post '/cleanup/?' do LOGGER.info "validation cleanup, starting..." content_type "text/uri-list" deleted = [] - Validation::Validation.find( :all, :conditions => { :prediction_dataset_uri => nil } ).each do |val| - LOGGER.debug "delete val with id:"+val.id.to_s+" prediction_dataset_uri is nil" + #Validation::Validation.find( :all, :conditions => { :prediction_dataset_uri => nil } ).each do |val| + Validation::Validation.all( :finished => false ).each do |val| + LOGGER.debug "delete val with id:"+val.id.to_s+", finished is false" deleted << val.validation_uri - Validation::Validation.delete(val.id) + #Validation::Validation.delete(val.id) + val.delete end LOGGER.info "validation cleanup, deleted "+deleted.size.to_s+" validations" deleted.join("\n")+"\n" @@ -413,7 +444,7 @@ end post '/validate_datasets' do content_type "text/uri-list" - task_uri = OpenTox::Task.as_task( "Perform dataset validation", url_for("/validate_datasets", :full), params ) do |task| + task = OpenTox::Task.create( "Perform dataset validation", url_for("/validate_datasets", :full) ) do |task| #, params LOGGER.info "validating values "+params.inspect halt 400, "test_dataset_uri missing" unless params[:test_dataset_uri] halt 400, "prediction_datset_uri missing" unless params[:prediction_dataset_uri] @@ -429,20 +460,21 @@ post '/validate_datasets' do params[:classification] or params[:regression] predicted_feature = params.delete("predicted_feature") - clazz = params.delete("classification")!=nil - regr = params.delete("regression")!=nil + feature_type = "classification" if params.delete("classification")!=nil + feature_type = "regression" if params.delete("regression")!=nil v = Validation::Validation.new params - v.compute_validation_stats((clazz and !regr),predicted_feature,nil,false,task) + v.compute_validation_stats(feature_type,predicted_feature,nil,nil,false,task) end v.validation_uri end - halt 202,task_uri+"\n" + halt 202,task.uri+"\n" end get '/:id/predictions' do LOGGER.info "get validation predictions "+params.inspect begin - validation = Validation::Validation.find(params[:id]) + #validation = Validation::Validation.find(params[:id]) + validation = Validation::Validation.get(params[:id]) rescue ActiveRecord::RecordNotFound => ex halt 404, "Validation '#{params[:id]}' not found." end @@ -482,7 +514,8 @@ end get '/:id' do LOGGER.info "get validation with id "+params[:id].to_s+" '"+request.env['HTTP_ACCEPT'].to_s+"'" begin - validation = Validation::Validation.find(params[:id]) + #validation = Validation::Validation.find(params[:id]) + validation = Validation::Validation.get(params[:id]) rescue ActiveRecord::RecordNotFound => ex halt 404, "Validation '#{params[:id]}' not found." end @@ -511,11 +544,13 @@ end delete '/:id' do LOGGER.info "delete validation with id "+params[:id].to_s - begin - validation = Validation::Validation.find(params[:id]) - rescue ActiveRecord::RecordNotFound => ex - halt 404, "Validation '#{params[:id]}' not found." - end +# begin + #validation = Validation::Validation.find(params[:id]) +# rescue ActiveRecord::RecordNotFound => ex +# halt 404, "Validation '#{params[:id]}' not found." +# end + validation = Validation::Validation.get(params[:id]) + halt 404, "Validation '#{params[:id]}' not found." unless validation content_type "text/plain" validation.delete end \ No newline at end of file -- cgit v1.2.3 From 7b06ce45180a5b2c0dd0095cd1a60ec974b46aa5 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Wed, 19 Jan 2011 16:12:21 +0100 Subject: aa suport, rdf support --- validation/validation_application.rb | 85 ++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 38 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 9c6c60c..5d521a8 100755 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -5,7 +5,6 @@ end require 'lib/merge.rb' #require 'lib/active_record_setup.rb' - require 'validation/validation_service.rb' get '/crossvalidation/?' do @@ -14,8 +13,8 @@ get '/crossvalidation/?' do #uri_list = Validation::Crossvalidation.find_like(params).collect{ |cv| cv.crossvalidation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = - "Single validations: "+$sinatra.url_for("/",:full)+"\n"+ - "Crossvalidation reports: "+$sinatra.url_for("/report/crossvalidation",:full) + "Single validations: "+url_for("/",:full)+"\n"+ + "Crossvalidation reports: "+url_for("/report/crossvalidation",:full) description = "A list of all crossvalidations.\n"+ "Use the POST method to perform a crossvalidation." @@ -41,6 +40,7 @@ post '/crossvalidation/?' do :algorithm_uri => params[:algorithm_uri] } [ :num_folds, :random_seed, :stratified ].each{ |sym| cv_params[sym] = params[sym] if params[sym] } cv = Validation::Crossvalidation.new cv_params + cv.subjectid = @subjectid cv.perform_cv( params[:prediction_feature], params[:algorithm_params], task ) cv.crossvalidation_uri end @@ -61,6 +61,7 @@ post '/crossvalidation/cleanup/?' do LOGGER.debug "delete cv with id:"+cv.id.to_s+", finished is false" deleted << cv.crossvalidation_uri #Validation::Crossvalidation.delete(cv.id) + cv.subjectid = @subjectid cv.delete #end end @@ -92,11 +93,11 @@ get '/crossvalidation/:id' do crossvalidation.to_rdf when /text\/html/ related_links = - "Search for corresponding cv report: "+$sinatra.url_for("/report/crossvalidation?crossvalidation="+crossvalidation.crossvalidation_uri,:full)+"\n"+ - "Statistics for this crossvalidation: "+$sinatra.url_for("/crossvalidation/"+params[:id]+"/statistics",:full)+"\n"+ - "Predictions of this crossvalidation: "+$sinatra.url_for("/crossvalidation/"+params[:id]+"/predictions",:full)+"\n"+ - "All crossvalidations: "+$sinatra.url_for("/crossvalidation",:full)+"\n"+ - "All crossvalidation reports: "+$sinatra.url_for("/report/crossvalidation",:full) + "Search for corresponding cv report: "+url_for("/report/crossvalidation?crossvalidation="+crossvalidation.crossvalidation_uri,:full)+"\n"+ + "Statistics for this crossvalidation: "+url_for("/crossvalidation/"+params[:id]+"/statistics",:full)+"\n"+ + "Predictions of this crossvalidation: "+url_for("/crossvalidation/"+params[:id]+"/predictions",:full)+"\n"+ + "All crossvalidations: "+url_for("/crossvalidation",:full)+"\n"+ + "All crossvalidation reports: "+url_for("/report/crossvalidation",:full) description = "A crossvalidation resource." content_type "text/html" @@ -134,7 +135,7 @@ get '/crossvalidation/:id/statistics' do case request.env['HTTP_ACCEPT'].to_s when /text\/html/ related_links = - "The corresponding crossvalidation resource: "+$sinatra.url_for("/crossvalidation/"+params[:id],:full) + "The corresponding crossvalidation resource: "+url_for("/crossvalidation/"+params[:id],:full) description = "The averaged statistics for the crossvalidation." content_type "text/html" @@ -156,6 +157,7 @@ delete '/crossvalidation/:id/?' do # Validation::Crossvalidation.delete(params[:id]) cv = Validation::Crossvalidation.get(params[:id]) + cv.subjectid = @subjectid halt 404,"Crossvalidation '#{params[:id]}' not found." unless cv cv.delete end @@ -192,8 +194,8 @@ get '/crossvalidation/:id/predictions' do description = "The crossvalidation predictions as (yaml-)array." related_links = - "All crossvalidations: "+$sinatra.url_for("/crossvalidation",:full)+"\n"+ - "Correspoding crossvalidation: "+$sinatra.url_for("/crossvalidation/"+params[:id],:full) + "All crossvalidations: "+url_for("/crossvalidation",:full)+"\n"+ + "Correspoding crossvalidation: "+url_for("/crossvalidation/"+params[:id],:full) OpenTox.text_to_html p, related_links, description else content_type "text/x-yaml" @@ -210,14 +212,14 @@ get '/?' do if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "To perform a validation:\n"+ - "* "+$sinatra.url_for("/test_set_validation",:full)+"\n"+ - "* "+$sinatra.url_for("/training_test_validation",:full)+"\n"+ - "* "+$sinatra.url_for("/bootstrapping",:full)+"\n"+ - "* "+$sinatra.url_for("/training_test_split",:full)+"\n"+ - "* "+$sinatra.url_for("/crossvalidation",:full)+"\n"+ - "Validation reporting: "+$sinatra.url_for("/report",:full)+"\n"+ - "REACH relevant reporting: "+$sinatra.url_for("/reach_report",:full)+"\n"+ - "Examples for using this service: "+$sinatra.url_for("/examples",:full)+"\n" + "* "+url_for("/test_set_validation",:full)+"\n"+ + "* "+url_for("/training_test_validation",:full)+"\n"+ + "* "+url_for("/bootstrapping",:full)+"\n"+ + "* "+url_for("/training_test_split",:full)+"\n"+ + "* "+url_for("/crossvalidation",:full)+"\n"+ + "Validation reporting: "+url_for("/report",:full)+"\n"+ + "REACH relevant reporting: "+url_for("/reach_report",:full)+"\n"+ + "Examples for using this service: "+url_for("/examples",:full)+"\n" description = "A validation web service for the OpenTox project ( http://opentox.org ).\n"+ "In the root directory (this is where you are now), a list of all validation resources is returned." @@ -243,6 +245,7 @@ post '/test_set_validation' do :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:test_target_dataset_uri], :prediction_feature => params[:prediction_feature] + v.subjectid = @subjectid v.validate_model( task ) v.validation_uri end @@ -261,8 +264,8 @@ get '/test_set_validation' do if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = - "All validations: "+$sinatra.url_for("/",:full)+"\n"+ - "Validation reports: "+$sinatra.url_for("/report/validation",:full) + "All validations: "+url_for("/",:full)+"\n"+ + "Validation reports: "+url_for("/report/validation",:full) description = "A list of all test-set-validations.\n"+ "To perform a test-set-validation use the POST method." @@ -285,6 +288,7 @@ post '/training_test_validation/?' do :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:test_target_dataset_uri], :prediction_feature => params[:prediction_feature] + v.subjectid = @subjectid v.validate_algorithm( params[:algorithm_params], task ) v.validation_uri end @@ -302,8 +306,8 @@ get '/training_test_validation' do uri_list = Validation::Validation.all( :validation_type => "training_test_validation" ).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = - "All validations: "+$sinatra.url_for("/",:full)+"\n"+ - "Validation reports: "+$sinatra.url_for("/report/validation",:full) + "All validations: "+url_for("/",:full)+"\n"+ + "Validation reports: "+url_for("/report/validation",:full) description = "A list of all training-test-validations.\n"+ "To perform a training-test-validation use the POST method." @@ -330,13 +334,13 @@ post '/bootstrapping' do halt 400, "prediction_feature missing" unless params[:prediction_feature] params.merge!( Validation::Util.bootstrapping( params[:dataset_uri], - params[:prediction_feature], params[:random_seed], OpenTox::SubTask.create(task,0,33)) ) + params[:prediction_feature], @subjectid, + params[:random_seed], OpenTox::SubTask.create(task,0,33)) ) v = Validation::Validation.new :validation_type => "bootstrapping", - :training_dataset_uri => params[:training_dataset_uri], - :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:dataset_uri], :prediction_feature => params[:prediction_feature], :algorithm_uri => params[:algorithm_uri] + v.subjectid = @subjectid v.validate_algorithm( params[:algorithm_params], OpenTox::SubTask.create(task,33,100)) v.validation_uri end @@ -349,8 +353,8 @@ get '/bootstrapping' do uri_list = Validation::Validation.all( :validation_type => "bootstrapping" ).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = - "All validations: "+$sinatra.url_for("/",:full)+"\n"+ - "Validation reports: "+$sinatra.url_for("/report/validation",:full) + "All validations: "+url_for("/",:full)+"\n"+ + "Validation reports: "+url_for("/report/validation",:full) description = "A list of all bootstrapping-validations.\n"+ "To perform a bootstrapping-validation use the POST method." @@ -377,13 +381,14 @@ post '/training_test_split' do halt 400, "prediction_feature missing" unless params[:prediction_feature] params.merge!( Validation::Util.train_test_dataset_split(params[:dataset_uri], params[:prediction_feature], - params[:split_ratio], params[:random_seed], OpenTox::SubTask.create(task,0,33))) + @subjectid, params[:split_ratio], params[:random_seed], OpenTox::SubTask.create(task,0,33))) v = Validation::Validation.new :validation_type => "training_test_split", :training_dataset_uri => params[:training_dataset_uri], :test_dataset_uri => params[:test_dataset_uri], :test_target_dataset_uri => params[:dataset_uri], :prediction_feature => params[:prediction_feature], :algorithm_uri => params[:algorithm_uri] + v.subjectid = @subjectid v.validate_algorithm( params[:algorithm_params], OpenTox::SubTask.create(task,33,100)) v.validation_uri end @@ -399,8 +404,8 @@ get '/training_test_split' do uri_list = Validation::Validation.all( :validation_type => "training_test_split" ).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = - "All validations: "+$sinatra.url_for("/",:full)+"\n"+ - "Validation reports: "+$sinatra.url_for("/report/validation",:full) + "All validations: "+url_for("/",:full)+"\n"+ + "Validation reports: "+url_for("/report/validation",:full) description = "A list of all training-test-split-validations.\n"+ "To perform a training-test-split-validation use the POST method." @@ -427,6 +432,7 @@ post '/cleanup/?' do LOGGER.debug "delete val with id:"+val.id.to_s+", finished is false" deleted << val.validation_uri #Validation::Validation.delete(val.id) + val.subjectid = @subjectid val.delete end LOGGER.info "validation cleanup, deleted "+deleted.size.to_s+" validations" @@ -452,6 +458,7 @@ post '/validate_datasets' do if params[:model_uri] v = Validation::Validation.new params + v.subjectid = @subjectid v.compute_validation_stats_with_model(nil,false,task) else halt 400, "please specify 'model_uri' or 'prediction_feature'" unless params[:prediction_feature] @@ -462,7 +469,8 @@ post '/validate_datasets' do predicted_feature = params.delete("predicted_feature") feature_type = "classification" if params.delete("classification")!=nil feature_type = "regression" if params.delete("regression")!=nil - v = Validation::Validation.new params + v = Validation::Validation.new params + v.subjectid = @subjectid v.compute_validation_stats(feature_type,predicted_feature,nil,nil,false,task) end v.validation_uri @@ -486,8 +494,8 @@ get '/:id/predictions' do description = "The validation predictions as (yaml-)array." related_links = - "All validations: "+$sinatra.url_for("/",:full)+"\n"+ - "Correspoding validation: "+$sinatra.url_for("/"+params[:id],:full) + "All validations: "+url_for("/",:full)+"\n"+ + "Correspoding validation: "+url_for("/"+params[:id],:full) OpenTox.text_to_html p.to_array.to_yaml, related_links, description else content_type "text/x-yaml" @@ -529,10 +537,10 @@ get '/:id' do description = "A validation resource." related_links = - "Search for corresponding report: "+$sinatra.url_for("/report/validation?validation="+validation.validation_uri,:full)+"\n"+ - "Get validation predictions: "+$sinatra.url_for("/"+params[:id]+"/predictions",:full)+"\n"+ - "All validations: "+$sinatra.url_for("/",:full)+"\n"+ - "All validation reports: "+$sinatra.url_for("/report/validation",:full) + "Search for corresponding report: "+url_for("/report/validation?validation="+validation.validation_uri,:full)+"\n"+ + "Get validation predictions: "+url_for("/"+params[:id]+"/predictions",:full)+"\n"+ + "All validations: "+url_for("/",:full)+"\n"+ + "All validation reports: "+url_for("/report/validation",:full) OpenTox.text_to_html validation.to_yaml,related_links,description when /application\/x-yaml|\*\/\*/ content_type "application/x-yaml" @@ -550,6 +558,7 @@ delete '/:id' do # halt 404, "Validation '#{params[:id]}' not found." # end validation = Validation::Validation.get(params[:id]) + validation.subjectid = @subjectid halt 404, "Validation '#{params[:id]}' not found." unless validation content_type "text/plain" validation.delete -- cgit v1.2.3 From c4d553732ff4cfa3a4de4d439c5e174ca0e57b53 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Thu, 20 Jan 2011 11:33:07 +0100 Subject: adjust to rdf method name, add new error handling support --- validation/validation_application.rb | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 5d521a8..7819114 100755 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -521,13 +521,14 @@ end get '/:id' do LOGGER.info "get validation with id "+params[:id].to_s+" '"+request.env['HTTP_ACCEPT'].to_s+"'" - begin +# begin #validation = Validation::Validation.find(params[:id]) - validation = Validation::Validation.get(params[:id]) - rescue ActiveRecord::RecordNotFound => ex - halt 404, "Validation '#{params[:id]}' not found." - end - +# rescue ActiveRecord::RecordNotFound => ex +# halt 404, "Validation '#{params[:id]}' not found." +# end + validation = Validation::Validation.get(params[:id]) + raise OpenTox::NotFoundError.new "Validation '#{params[:id]}' not found." unless validation + case request.env['HTTP_ACCEPT'].to_s when "application/rdf+xml" content_type "application/rdf+xml" -- cgit v1.2.3 From e9af5334f70c5a80ad5f63b6028a3d0a27340360 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Mon, 31 Jan 2011 09:45:40 +0100 Subject: update serach facilities, minor test fixes --- validation/validation_application.rb | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 7819114..b2bb400 100755 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -9,7 +9,9 @@ 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 = 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.find_like(params).collect{ |cv| cv.crossvalidation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = @@ -207,7 +209,9 @@ 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.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" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = @@ -260,7 +264,9 @@ get '/test_set_validation' do LOGGER.info "list all test-set-validations, params: "+params.inspect #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "test_set_validation" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" - uri_list = Validation::Validation.all( :validation_type => "test_set_validation" ).collect{ |v| v.validation_uri }.join("\n")+"\n" + #uri_list = Validation::Validation.all( :validation_type => "test_set_validation" ).collect{ |v| v.validation_uri }.join("\n")+"\n" + params[:validation_type] = "test_set_validation" + uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = @@ -303,7 +309,10 @@ end get '/training_test_validation' do LOGGER.info "list all training-test-validations, params: "+params.inspect #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "training_test_validation" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" - uri_list = Validation::Validation.all( :validation_type => "training_test_validation" ).collect{ |v| v.validation_uri }.join("\n")+"\n" + #uri_list = Validation::Validation.all( :validation_type => "training_test_validation" ).collect{ |v| v.validation_uri }.join("\n")+"\n" + params[:validation_type] = "training_test_validation" + uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "All validations: "+url_for("/",:full)+"\n"+ @@ -350,7 +359,10 @@ end get '/bootstrapping' do LOGGER.info "list all bootstrapping-validations, params: "+params.inspect #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "bootstrapping" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" - uri_list = Validation::Validation.all( :validation_type => "bootstrapping" ).collect{ |v| v.validation_uri }.join("\n")+"\n" + #uri_list = Validation::Validation.all( :validation_type => "bootstrapping" ).collect{ |v| v.validation_uri }.join("\n")+"\n" + params[:validation_type] = "bootstrapping" + uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "All validations: "+url_for("/",:full)+"\n"+ @@ -401,7 +413,10 @@ end get '/training_test_split' do LOGGER.info "list all training-test-split-validations, params: "+params.inspect #uri_list = Validation::Validation.find( :all, :conditions => { :validation_type => "training_test_split" } ).collect{ |v| v.validation_uri }.join("\n")+"\n" - uri_list = Validation::Validation.all( :validation_type => "training_test_split" ).collect{ |v| v.validation_uri }.join("\n")+"\n" + #uri_list = Validation::Validation.all( :validation_type => "training_test_split" ).collect{ |v| v.validation_uri }.join("\n")+"\n" + params[:validation_type] = "training_test_split" + uri_list = Lib::DataMapperUtil.all(Validation::Validation,params).collect{ |v| v.validation_uri }.join("\n")+"\n" + if request.env['HTTP_ACCEPT'] =~ /text\/html/ related_links = "All validations: "+url_for("/",:full)+"\n"+ -- cgit v1.2.3 From 068bdeb4a6e73ae3c932428b9174be121d8c4b48 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Tue, 1 Feb 2011 13:42:12 +0100 Subject: replace halts with raise OT:Error --- validation/validation_application.rb | 86 ++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 43 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index b2bb400..f9b8b51 100755 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -32,10 +32,10 @@ end post '/crossvalidation/?' do task = OpenTox::Task.create( "Perform crossvalidation", url_for("/crossvalidation", :full) ) do |task| #, params LOGGER.info "creating crossvalidation "+params.inspect - halt 400, "dataset_uri missing" unless params[:dataset_uri] - halt 400, "algorithm_uri missing" unless params[:algorithm_uri] - halt 400, "prediction_feature missing" unless params[:prediction_feature] - halt 400, "illegal param-value num_folds: '"+params[:num_folds].to_s+"', must be integer >1" unless params[:num_folds]==nil or + raise OpenTox::BadRequestError "dataset_uri missing" unless params[:dataset_uri] + raise OpenTox::BadRequestError "algorithm_uri missing" unless params[:algorithm_uri] + raise OpenTox::BadRequestError "prediction_feature missing" unless params[:prediction_feature] + raise OpenTox::BadRequestError "illegal param-value num_folds: '"+params[:num_folds].to_s+"', must be integer >1" unless params[:num_folds]==nil or params[:num_folds].to_i>1 cv_params = { :dataset_uri => params[:dataset_uri], @@ -47,8 +47,8 @@ post '/crossvalidation/?' do cv.crossvalidation_uri end content_type 'text/uri-list' - halt 503,task.uri+"\n" if task.status == "Cancelled" - halt 202,task.uri + raise OpenTox::ServiceUnavailableError.new task.uri+"\n" if task.status == "Cancelled" + halt 202, task.uri end post '/crossvalidation/cleanup/?' do @@ -72,11 +72,11 @@ post '/crossvalidation/cleanup/?' do end post '/crossvalidation/loo/?' do - halt 500, "not yet implemented" + raise "not yet implemented" end get '/crossvalidation/loo/?' do - halt 400, "GET operation not supported, use POST for performing a loo-crossvalidation, see "+url_for("/crossvalidation", :full)+" for crossvalidation results" + raise OpenTox::BadRequestError "GET operation not supported, use POST for performing a loo-crossvalidation, see "+url_for("/crossvalidation", :full)+" for crossvalidation results" end get '/crossvalidation/:id' do @@ -84,10 +84,10 @@ get '/crossvalidation/:id' do # begin # #crossvalidation = Validation::Crossvalidation.find(params[:id]) # rescue ActiveRecord::RecordNotFound => ex -# halt 404, "Crossvalidation '#{params[:id]}' not found." +# raise OpenTox::NotFoundError.new "Crossvalidation '#{params[:id]}' not found." # end crossvalidation = Validation::Crossvalidation.get(params[:id]) - halt 404,"Crossvalidation '#{params[:id]}' not found." unless crossvalidation + raise OpenTox::NotFoundError.new "Crossvalidation '#{params[:id]}' not found." unless crossvalidation case request.env['HTTP_ACCEPT'].to_s when "application/rdf+xml" @@ -108,7 +108,7 @@ get '/crossvalidation/:id' do content_type "application/x-yaml" crossvalidation.to_yaml else - halt 400, "MIME type '"+request.env['HTTP_ACCEPT'].to_s+"' not supported, valid Accept-Headers: \"application/rdf+xml\", \"application/x-yaml\", \"text/html\"." + raise OpenTox::BadRequestError.new "MIME type '"+request.env['HTTP_ACCEPT'].to_s+"' not supported, valid Accept-Headers: \"application/rdf+xml\", \"application/x-yaml\", \"text/html\"." end end @@ -117,13 +117,13 @@ get '/crossvalidation/:id/statistics' do # begin #crossvalidation = Validation::Crossvalidation.find(params[:id]) # rescue ActiveRecord::RecordNotFound => ex -# halt 404, "Crossvalidation '#{params[:id]}' not found." +# raise OpenTox::NotFoundError.new "Crossvalidation '#{params[:id]}' not found." # end #crossvalidation = Validation::Crossvalidation.find(params[:id]) crossvalidation = Validation::Crossvalidation.get(params[:id]) - halt 404,"Crossvalidation '#{params[:id]}' not found." unless crossvalidation - halt 400,"Crossvalidation '"+params[:id].to_s+"' not finished" unless crossvalidation.finished + raise OpenTox::NotFoundError.new "Crossvalidation '#{params[:id]}' not found." unless crossvalidation + raise OpenTox::BadRequestError.new "Crossvalidation '"+params[:id].to_s+"' not finished" unless crossvalidation.finished Lib::MergeObjects.register_merge_attributes( Validation::Validation, Lib::VAL_MERGE_AVG,Lib::VAL_MERGE_SUM,Lib::VAL_MERGE_GENERAL-[:date,:validation_uri,:crossvalidation_uri]) unless @@ -154,13 +154,13 @@ delete '/crossvalidation/:id/?' do # begin #crossvalidation = Validation::Crossvalidation.find(params[:id]) # rescue ActiveRecord::RecordNotFound => ex -# halt 404, "Crossvalidation '#{params[:id]}' not found." +# raise OpenTox::NotFoundError.new "Crossvalidation '#{params[:id]}' not found." # end # Validation::Crossvalidation.delete(params[:id]) cv = Validation::Crossvalidation.get(params[:id]) cv.subjectid = @subjectid - halt 404,"Crossvalidation '#{params[:id]}' not found." unless cv + raise OpenTox::NotFoundError.new "Crossvalidation '#{params[:id]}' not found." unless cv cv.delete end @@ -169,7 +169,7 @@ end # begin # crossvalidation = Validation::Crossvalidation.find(params[:id]) # rescue ActiveRecord::RecordNotFound => ex -# halt 404, "Crossvalidation '#{params[:id]}' not found." +# raise OpenTox::NotFoundError.new "Crossvalidation '#{params[:id]}' not found." # end # content_type "text/uri-list" # Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ).collect{ |v| v.validation_uri.to_s }.join("\n")+"\n" @@ -181,9 +181,9 @@ get '/crossvalidation/:id/predictions' do #crossvalidation = Validation::Crossvalidation.find(params[:id]) crossvalidation = Validation::Crossvalidation.get(params[:id]) rescue ActiveRecord::RecordNotFound => ex - halt 404, "Crossvalidation '#{params[:id]}' not found." + raise OpenTox::NotFoundError.new "Crossvalidation '#{params[:id]}' not found." end - halt 400,"Crossvalidation '"+params[:id].to_s+"' not finished" unless crossvalidation.finished + raise OpenTox::BadRequestError.new "Crossvalidation '"+params[:id].to_s+"' not finished" unless crossvalidation.finished content_type "application/x-yaml" #validations = Validation::Validation.find( :all, :conditions => { :crossvalidation_id => params[:id] } ) @@ -236,7 +236,7 @@ get '/?' do end post '/?' do - halt 400, "Post not supported, to perfom a validation use '/test_set_validation', '/training_test_validation', 'bootstrapping', 'training_test_split'" + raise OpenTox::BadRequestError.new "Post not supported, to perfom a validation use '/test_set_validation', '/training_test_validation', 'bootstrapping', 'training_test_split'" end post '/test_set_validation' do @@ -255,7 +255,7 @@ post '/test_set_validation' do end halt 202,task.uri+"\n" else - halt 400, "illegal parameters, pls specify model_uri and test_dataset_uri\n"+ + raise OpenTox::BadRequestError.new "illegal parameters, pls specify model_uri and test_dataset_uri\n"+ "params given: "+params.inspect end end @@ -301,7 +301,7 @@ post '/training_test_validation/?' do content_type "text/uri-list" halt 202,task.uri+"\n" else - halt 400, "illegal parameters, pls specify algorithm_uri, training_dataset_uri, test_dataset_uri, prediction_feature\n"+ + raise OpenTox::BadRequestError.new "illegal parameters, pls specify algorithm_uri, training_dataset_uri, test_dataset_uri, prediction_feature\n"+ "params given: "+params.inspect end end @@ -338,9 +338,9 @@ post '/bootstrapping' do content_type "text/uri-list" task = OpenTox::Task.create( "Perform bootstrapping validation", url_for("/bootstrapping", :full) ) do |task| #, params LOGGER.info "performing bootstrapping validation "+params.inspect - halt 400, "dataset_uri missing" unless params[:dataset_uri] - halt 400, "algorithm_uri missing" unless params[:algorithm_uri] - halt 400, "prediction_feature missing" unless params[:prediction_feature] + raise OpenTox::BadRequestError.new "dataset_uri missing" unless params[:dataset_uri] + raise OpenTox::BadRequestError.new "algorithm_uri missing" unless params[:algorithm_uri] + raise OpenTox::BadRequestError.new "prediction_feature missing" unless params[:prediction_feature] params.merge!( Validation::Util.bootstrapping( params[:dataset_uri], params[:prediction_feature], @subjectid, @@ -388,9 +388,9 @@ post '/training_test_split' do task = OpenTox::Task.create( "Perform training test split validation", url_for("/training_test_split", :full) ) do |task| #, params LOGGER.info "creating training test split "+params.inspect - halt 400, "dataset_uri missing" unless params[:dataset_uri] - halt 400, "algorithm_uri missing" unless params[:algorithm_uri] - halt 400, "prediction_feature missing" unless params[:prediction_feature] + raise OpenTox::BadRequestError.new "dataset_uri missing" unless params[:dataset_uri] + raise OpenTox::BadRequestError.new "algorithm_uri missing" unless params[:algorithm_uri] + raise OpenTox::BadRequestError.new "prediction_feature missing" unless params[:prediction_feature] params.merge!( Validation::Util.train_test_dataset_split(params[:dataset_uri], params[:prediction_feature], @subjectid, params[:split_ratio], params[:random_seed], OpenTox::SubTask.create(task,0,33))) @@ -405,7 +405,7 @@ post '/training_test_split' do v.validation_uri end content_type 'text/uri-list' - halt 503,task.uri+"\n" if task.status == "Cancelled" + raise OpenTox::ServiceUnavailableError.new task.uri+"\n" if task.status == "Cancelled" halt 202,task.uri end @@ -456,7 +456,7 @@ end post '/plain_training_test_split' do LOGGER.info "creating pure training test split "+params.inspect - halt 400, "dataset_uri missing" unless params[:dataset_uri] + raise OpenTox::BadRequestError.new "dataset_uri missing" unless params[:dataset_uri] result = Validation::Util.train_test_dataset_split(params[:dataset_uri], params[:prediction_feature], params[:split_ratio], params[:random_seed]) content_type "text/uri-list" @@ -467,8 +467,8 @@ post '/validate_datasets' do content_type "text/uri-list" task = OpenTox::Task.create( "Perform dataset validation", url_for("/validate_datasets", :full) ) do |task| #, params LOGGER.info "validating values "+params.inspect - halt 400, "test_dataset_uri missing" unless params[:test_dataset_uri] - halt 400, "prediction_datset_uri missing" unless params[:prediction_dataset_uri] + raise OpenTox::BadRequestError.new "test_dataset_uri missing" unless params[:test_dataset_uri] + raise OpenTox::BadRequestError.new "prediction_datset_uri missing" unless params[:prediction_dataset_uri] params[:validation_type] = "validate_datasets" if params[:model_uri] @@ -476,9 +476,9 @@ post '/validate_datasets' do v.subjectid = @subjectid v.compute_validation_stats_with_model(nil,false,task) else - halt 400, "please specify 'model_uri' or 'prediction_feature'" unless params[:prediction_feature] - halt 400, "please specify 'model_uri' or 'predicted_feature'" unless params[:predicted_feature] - halt 400, "please specify 'model_uri' or set either 'classification' or 'regression' flag" unless + raise OpenTox::BadRequestError.new "please specify 'model_uri' or 'prediction_feature'" unless params[:prediction_feature] + raise OpenTox::BadRequestError.new "please specify 'model_uri' or 'predicted_feature'" unless params[:predicted_feature] + raise OpenTox::BadRequestError.new "please specify 'model_uri' or set either 'classification' or 'regression' flag" unless params[:classification] or params[:regression] predicted_feature = params.delete("predicted_feature") @@ -499,9 +499,9 @@ get '/:id/predictions' do #validation = Validation::Validation.find(params[:id]) validation = Validation::Validation.get(params[:id]) rescue ActiveRecord::RecordNotFound => ex - halt 404, "Validation '#{params[:id]}' not found." + raise OpenTox::NotFoundError.new "Validation '#{params[:id]}' not found." end - halt 400,"Validation '"+params[:id].to_s+"' not finished" unless validation.finished + raise OpenTox::BadRequestError.new "Validation '"+params[:id].to_s+"' not finished" unless validation.finished p = validation.compute_validation_stats_with_model(nil, true) case request.env['HTTP_ACCEPT'].to_s when /text\/html/ @@ -523,12 +523,12 @@ end # begin # validation = Validation::Validation.find(params[:id]) # rescue ActiveRecord::RecordNotFound => ex -# halt 404, "Validation '#{params[:id]}' not found." +# raise OpenTox::NotFoundError.new "Validation '#{params[:id]}' not found." # end # begin # raise unless validation.attribute_loaded?(params[:attribute]) # rescue -# halt 400, "Not a validation attribute: "+params[:attribute].to_s +# raise OpenTox::BadRequestError.new "Not a validation attribute: "+params[:attribute].to_s # end # content_type "text/plain" # return validation.send(params[:attribute]) @@ -539,7 +539,7 @@ get '/:id' do # begin #validation = Validation::Validation.find(params[:id]) # rescue ActiveRecord::RecordNotFound => ex -# halt 404, "Validation '#{params[:id]}' not found." +# raise OpenTox::NotFoundError.new "Validation '#{params[:id]}' not found." # end validation = Validation::Validation.get(params[:id]) raise OpenTox::NotFoundError.new "Validation '#{params[:id]}' not found." unless validation @@ -562,7 +562,7 @@ get '/:id' do content_type "application/x-yaml" validation.to_yaml else - halt 400, "MIME type '"+request.env['HTTP_ACCEPT'].to_s+"' not supported, valid Accept-Headers: \"application/rdf+xml\", \"application/x-yaml\", \"text/html\"." + raise OpenTox::BadRequestError.new "MIME type '"+request.env['HTTP_ACCEPT'].to_s+"' not supported, valid Accept-Headers: \"application/rdf+xml\", \"application/x-yaml\", \"text/html\"." end end @@ -571,11 +571,11 @@ delete '/:id' do # begin #validation = Validation::Validation.find(params[:id]) # rescue ActiveRecord::RecordNotFound => ex -# halt 404, "Validation '#{params[:id]}' not found." +# raise OpenTox::NotFoundError.new "Validation '#{params[:id]}' not found." # end validation = Validation::Validation.get(params[:id]) validation.subjectid = @subjectid - halt 404, "Validation '#{params[:id]}' not found." unless validation + raise OpenTox::NotFoundError.new "Validation '#{params[:id]}' not found." unless validation content_type "text/plain" validation.delete end \ No newline at end of file -- cgit v1.2.3 From 7906047a423d94692581ac6aa15295924c8b89db Mon Sep 17 00:00:00 2001 From: mguetlein Date: Thu, 3 Feb 2011 09:47:46 +0100 Subject: use return task method for sinatra --- validation/validation_application.rb | 31 +++++++++++-------------------- 1 file changed, 11 insertions(+), 20 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index f9b8b51..b444b3f 100755 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -32,10 +32,10 @@ end post '/crossvalidation/?' do task = OpenTox::Task.create( "Perform crossvalidation", url_for("/crossvalidation", :full) ) do |task| #, params LOGGER.info "creating crossvalidation "+params.inspect - raise OpenTox::BadRequestError "dataset_uri missing" unless params[:dataset_uri] - raise OpenTox::BadRequestError "algorithm_uri missing" unless params[:algorithm_uri] - raise OpenTox::BadRequestError "prediction_feature missing" unless params[:prediction_feature] - raise OpenTox::BadRequestError "illegal param-value num_folds: '"+params[:num_folds].to_s+"', must be integer >1" unless params[:num_folds]==nil or + raise OpenTox::BadRequestError.new "dataset_uri missing" unless params[:dataset_uri] + raise OpenTox::BadRequestError.new "algorithm_uri missing" unless params[:algorithm_uri] + raise OpenTox::BadRequestError.new "prediction_feature missing" unless params[:prediction_feature] + raise OpenTox::BadRequestError.new "illegal param-value num_folds: '"+params[:num_folds].to_s+"', must be integer >1" unless params[:num_folds]==nil or params[:num_folds].to_i>1 cv_params = { :dataset_uri => params[:dataset_uri], @@ -46,9 +46,7 @@ post '/crossvalidation/?' do cv.perform_cv( params[:prediction_feature], params[:algorithm_params], task ) cv.crossvalidation_uri end - content_type 'text/uri-list' - raise OpenTox::ServiceUnavailableError.new task.uri+"\n" if task.status == "Cancelled" - halt 202, task.uri + return_task(task) end post '/crossvalidation/cleanup/?' do @@ -76,7 +74,7 @@ post '/crossvalidation/loo/?' do end get '/crossvalidation/loo/?' do - raise OpenTox::BadRequestError "GET operation not supported, use POST for performing a loo-crossvalidation, see "+url_for("/crossvalidation", :full)+" for crossvalidation results" + raise OpenTox::BadRequestError.new "GET operation not supported, use POST for performing a loo-crossvalidation, see "+url_for("/crossvalidation", :full)+" for crossvalidation results" end get '/crossvalidation/:id' do @@ -240,7 +238,6 @@ post '/?' do end post '/test_set_validation' do - content_type "text/uri-list" LOGGER.info "creating test-set-validation "+params.inspect if params[:model_uri] and params[:test_dataset_uri] and !params[:training_dataset_uri] and !params[:algorithm_uri] task = OpenTox::Task.create( "Perform test-set-validation", url_for("/", :full) ) do |task| #, params @@ -253,7 +250,7 @@ post '/test_set_validation' do v.validate_model( task ) v.validation_uri end - halt 202,task.uri+"\n" + return_task(task) else raise OpenTox::BadRequestError.new "illegal parameters, pls specify model_uri and test_dataset_uri\n"+ "params given: "+params.inspect @@ -298,8 +295,7 @@ post '/training_test_validation/?' do v.validate_algorithm( params[:algorithm_params], task ) v.validation_uri end - content_type "text/uri-list" - halt 202,task.uri+"\n" + return_task(task) else raise OpenTox::BadRequestError.new "illegal parameters, pls specify algorithm_uri, training_dataset_uri, test_dataset_uri, prediction_feature\n"+ "params given: "+params.inspect @@ -335,7 +331,6 @@ get '/training_test_validation' do end post '/bootstrapping' do - content_type "text/uri-list" task = OpenTox::Task.create( "Perform bootstrapping validation", url_for("/bootstrapping", :full) ) do |task| #, params LOGGER.info "performing bootstrapping validation "+params.inspect raise OpenTox::BadRequestError.new "dataset_uri missing" unless params[:dataset_uri] @@ -353,7 +348,7 @@ post '/bootstrapping' do v.validate_algorithm( params[:algorithm_params], OpenTox::SubTask.create(task,33,100)) v.validation_uri end - halt 202,task.uri+"\n" + return_task(task) end get '/bootstrapping' do @@ -386,7 +381,6 @@ end post '/training_test_split' do task = OpenTox::Task.create( "Perform training test split validation", url_for("/training_test_split", :full) ) do |task| #, params - LOGGER.info "creating training test split "+params.inspect raise OpenTox::BadRequestError.new "dataset_uri missing" unless params[:dataset_uri] raise OpenTox::BadRequestError.new "algorithm_uri missing" unless params[:algorithm_uri] @@ -404,9 +398,7 @@ post '/training_test_split' do v.validate_algorithm( params[:algorithm_params], OpenTox::SubTask.create(task,33,100)) v.validation_uri end - content_type 'text/uri-list' - raise OpenTox::ServiceUnavailableError.new task.uri+"\n" if task.status == "Cancelled" - halt 202,task.uri + return_task(task) end @@ -464,7 +456,6 @@ post '/plain_training_test_split' do end post '/validate_datasets' do - content_type "text/uri-list" task = OpenTox::Task.create( "Perform dataset validation", url_for("/validate_datasets", :full) ) do |task| #, params LOGGER.info "validating values "+params.inspect raise OpenTox::BadRequestError.new "test_dataset_uri missing" unless params[:test_dataset_uri] @@ -490,7 +481,7 @@ post '/validate_datasets' do end v.validation_uri end - halt 202,task.uri+"\n" + return_task(task) end get '/:id/predictions' do -- cgit v1.2.3 From aca886bf82e7ebf5a9d76642614418ed983ab45e Mon Sep 17 00:00:00 2001 From: mguetlein Date: Thu, 3 Feb 2011 18:14:20 +0100 Subject: adding weighted_accuracy, change accuracy computation, some minor changes --- validation/validation_application.rb | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index b444b3f..9b517cf 100755 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -549,11 +549,9 @@ get '/:id' do "All validations: "+url_for("/",:full)+"\n"+ "All validation reports: "+url_for("/report/validation",:full) OpenTox.text_to_html validation.to_yaml,related_links,description - when /application\/x-yaml|\*\/\*/ + else #default is yaml content_type "application/x-yaml" validation.to_yaml - else - raise OpenTox::BadRequestError.new "MIME type '"+request.env['HTTP_ACCEPT'].to_s+"' not supported, valid Accept-Headers: \"application/rdf+xml\", \"application/x-yaml\", \"text/html\"." end end -- cgit v1.2.3 From e77fd138b4de5e467ded21ef075828e2b04e7928 Mon Sep 17 00:00:00 2001 From: mguetlein Date: Sat, 19 Feb 2011 11:28:29 +0100 Subject: add subject-id to to-html, minor changes --- validation/validation_application.rb | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'validation/validation_application.rb') diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 9b517cf..e07acf0 100755 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -22,7 +22,7 @@ get '/crossvalidation/?' do "Use the POST method to perform a crossvalidation." post_params = [[:dataset_uri,:algorithm_uri,:prediction_feature,[:num_folds,10],[:random_seed,1],[:stratified,false],[:algorithm_params,""]]] content_type "text/html" - OpenTox.text_to_html uri_list,related_links,description,post_params + OpenTox.text_to_html uri_list,@subjectid,related_links,description,post_params else content_type "text/uri-list" uri_list @@ -101,7 +101,7 @@ get '/crossvalidation/:id' do description = "A crossvalidation resource." content_type "text/html" - OpenTox.text_to_html crossvalidation.to_yaml,related_links,description + OpenTox.text_to_html crossvalidation.to_yaml,@subjectid,related_links,description when /application\/x-yaml|\*\/\*/ content_type "application/x-yaml" crossvalidation.to_yaml @@ -139,7 +139,7 @@ get '/crossvalidation/:id/statistics' do description = "The averaged statistics for the crossvalidation." content_type "text/html" - OpenTox.text_to_html v.to_yaml,related_links,description + OpenTox.text_to_html v.to_yaml,@subjectid,related_links,description else content_type "application/x-yaml" v.to_yaml @@ -196,7 +196,7 @@ get '/crossvalidation/:id/predictions' do related_links = "All crossvalidations: "+url_for("/crossvalidation",:full)+"\n"+ "Correspoding crossvalidation: "+url_for("/crossvalidation/"+params[:id],:full) - OpenTox.text_to_html p, related_links, description + OpenTox.text_to_html p,@subjectid, related_links, description else content_type "text/x-yaml" p @@ -226,7 +226,7 @@ get '/?' do "A validation web service for the OpenTox project ( http://opentox.org ).\n"+ "In the root directory (this is where you are now), a list of all validation resources is returned." content_type "text/html" - OpenTox.text_to_html uri_list,related_links,description + OpenTox.text_to_html uri_list,@subjectid,related_links,description else content_type "text/uri-list" uri_list @@ -274,7 +274,7 @@ get '/test_set_validation' do "To perform a test-set-validation use the POST method." post_params = [[:model_uri, :test_dataset_uri, [:test_target_dataset_uri,"same-as-test_dataset_uri"], [:prediction_feature, "dependent-variable-of-model"]]] content_type "text/html" - OpenTox.text_to_html uri_list,related_links,description,post_params + OpenTox.text_to_html uri_list,@subjectid,related_links,description,post_params else content_type "text/uri-list" uri_list @@ -323,7 +323,7 @@ get '/training_test_validation' do :prediction_feature, [:algorithm_params, ""]]] content_type "text/html" - OpenTox.text_to_html uri_list,related_links,description,post_params + OpenTox.text_to_html uri_list,@subjectid,related_links,description,post_params else content_type "text/uri-list" uri_list @@ -371,7 +371,7 @@ get '/bootstrapping' do [:algorithm_params, ""], [:random_seed, 1]]] content_type "text/html" - OpenTox.text_to_html uri_list,related_links,description,post_params + OpenTox.text_to_html uri_list,@subjectid,related_links,description,post_params else content_type "text/uri-list" uri_list @@ -423,7 +423,7 @@ get '/training_test_split' do [:random_seed, 1], [:split_ratio, 0.66]]] content_type "text/html" - OpenTox.text_to_html uri_list,related_links,description,post_params + OpenTox.text_to_html uri_list,@subjectid,related_links,description,post_params else content_type "text/uri-list" uri_list @@ -502,7 +502,7 @@ get '/:id/predictions' do related_links = "All validations: "+url_for("/",:full)+"\n"+ "Correspoding validation: "+url_for("/"+params[:id],:full) - OpenTox.text_to_html p.to_array.to_yaml, related_links, description + OpenTox.text_to_html p.to_array.to_yaml,@subjectid, related_links, description else content_type "text/x-yaml" p.to_array.to_yaml @@ -548,7 +548,7 @@ get '/:id' do "Get validation predictions: "+url_for("/"+params[:id]+"/predictions",:full)+"\n"+ "All validations: "+url_for("/",:full)+"\n"+ "All validation reports: "+url_for("/report/validation",:full) - OpenTox.text_to_html validation.to_yaml,related_links,description + OpenTox.text_to_html validation.to_yaml,@subjectid,related_links,description else #default is yaml content_type "application/x-yaml" validation.to_yaml -- cgit v1.2.3