diff options
-rw-r--r-- | EXAMPLES | 25 | ||||
-rw-r--r-- | application.rb | 9 | ||||
-rw-r--r-- | example.rb | 8 | ||||
-rw-r--r-- | lib/predictions.rb | 7 | ||||
-rw-r--r-- | report/r_plot_factory.rb | 7 | ||||
-rw-r--r-- | report/report_test.rb | 14 | ||||
-rw-r--r-- | report/validation_access.rb | 2 | ||||
-rw-r--r-- | validation/validation_application.rb | 16 | ||||
-rw-r--r-- | validation/validation_service.rb | 6 | ||||
-rw-r--r-- | validation/validation_test.rb | 26 |
10 files changed, 68 insertions, 52 deletions
@@ -15,21 +15,21 @@ the examples listed below can be performed with the command line tool curl get list of available validations ------------------------------------------------------------------- ->>> curl <validation_service>/validations +>>> curl <validation_service> result example (accept-header: application/rdf-xml) <<< not yet supported result example (accept-header: text/uri-list) -<<< <validation_service>/validation/<validation_id> -<<< <validation_service>/validation/validation_id_i -<<< <validation_service>/validation/validation_id_j +<<< <validation_service>/<validation_id> +<<< <validation_service>/validation_id_i +<<< <validation_service>/validation_id_j get validation ------------------------------------------------------------------- ->>> curl <validation_service>/validation/<validation_id> +>>> curl <validation_service>/<validation_id> supported accept-headers: "text/x-yaml" and "application/rdf-xml" @@ -40,13 +40,13 @@ validate model on test-dateset >>> curl -X POST -d model_uri="<model_uri>" \ -d test_dataset_uri="<test_dataset_uri>" \ -d prediction_feature="<prediction_feature>" \ - <validation_service>/validation + <validation_service> result example (accept-header: application/rdf-xml) <<< not yet supported result example (accept-header: text/uri-list) -<<< <validation_service>/validation/id_i +<<< <validation_service>/id_i validate an algorithm on a training- and test-dataset @@ -57,7 +57,7 @@ validate an algorithm on a training- and test-dataset -d test_dataset_uri="<test_dataset_uri>" \ -d prediction_feature="<prediction_feature>" \ -d algorithm_params="<algorithm_params>" \ - <validation_service>/validation + <validation_service> optional params: algorithm_params, default is empty @@ -66,7 +66,7 @@ result example (accept-header: application/rdf-xml) <<< not yet supported result example (accept-header: text/uri-list) -<<< <validation_service>/validation/id_i +<<< <validation_service>/id_i validate an algorithm on a dataset via training-test-split @@ -78,7 +78,7 @@ validate an algorithm on a dataset via training-test-split -d algorithm_params="<algorithm_params>" \ -d split_ratio=0.9 \ -d random_seed=2 \ - <validation_service>/validation/training_test_split + <validation_service>/training_test_split optional params: algorithm_params, default is empty @@ -89,13 +89,13 @@ result example (accept-header: application/rdf-xml) <<< not yet supported result example (accept-header: text/uri-list) -<<< <validation_service>/validation/id_i +<<< <validation_service>/id_i get list of available crossvalidations ------------------------------------------------------------------- ->>> curl <validation_service>/crossvalidations +>>> curl <validation_service>/crossvalidation result example (accept-header: application/rdf-xml) <<< not yet supported @@ -115,6 +115,7 @@ supported accept-headers: "text/x-yaml" and "application/rdf-xml" validate an algorithm on a dataset via crossvalidation +(may take a couple of minutes) ------------------------------------------------------------------- >>> curl -X POST -d algorithm_uri="<algorithm_uri>" \ diff --git a/application.rb b/application.rb index feb19b1..82be7bb 100644 --- a/application.rb +++ b/application.rb @@ -1,6 +1,5 @@ -require "validation/validation_application.rb" -require "report/report_application.rb" + require "example.rb" [ 'rubygems', 'sinatra', 'sinatra/url_for' ].each do |lib| @@ -17,5 +16,11 @@ get '/prepare_examples/?' do "done" end +# order is important, first add example methods, than validation +# (otherwise sinatra will try to locate a validation with name examples) + +require "validation/validation_application.rb" +require "report/report_application.rb" + @@ -1,4 +1,8 @@ +[ 'opentox-ruby-api-wrapper' ].each do |lib| + require lib +end + class Example @@file=File.new("data/hamster_carcinogenicity.owl","r") @@ -53,12 +57,12 @@ class Example Lib::Validation.auto_migrate! delete_all(@@config[:services]["opentox-model"]) - vali_uri = RestClient.post File.join(@@config[:services]["opentox-validation"],'/validation/training_test_split'), { :dataset_uri => data_uri, + vali_uri = RestClient.post File.join(@@config[:services]["opentox-validation"],'/training_test_split'), { :dataset_uri => data_uri, :algorithm_uri => @@alg, :prediction_feature => @@feature, :algorithm_params => @@alg_params } puts "created validation via training test split "+vali_uri - raise "failed to prepare demo" unless vali_uri==File.join(@@config[:services]["opentox-validation"],'/validation/1') + raise "failed to prepare demo" unless vali_uri==File.join(@@config[:services]["opentox-validation"],'/1') Lib::Crossvalidation.auto_migrate! cv_uri = RestClient.post File.join(@@config[:services]["opentox-validation"],'/crossvalidation'), { :dataset_uri => data_uri, diff --git a/lib/predictions.rb b/lib/predictions.rb index 88e8d6c..adc5882 100644 --- a/lib/predictions.rb +++ b/lib/predictions.rb @@ -1,6 +1,9 @@ -raise "Environment variable R_HOME missing" unless ENV['R_HOME'] -ENV['PATH'] = ENV['R_HOME']+":"+ENV['PATH'] unless ENV['PATH'].split(":").index(ENV['R_HOME']) +if ENV['R_HOME'] + ENV['PATH'] = ENV['R_HOME']+":"+ENV['PATH'] unless ENV['PATH'].split(":").index(ENV['R_HOME']) +else + LOGGER.warn "Environment variable R_HOME not set" +end require 'rinruby' module Lib diff --git a/report/r_plot_factory.rb b/report/r_plot_factory.rb index cff8e14..5c154b4 100644 --- a/report/r_plot_factory.rb +++ b/report/r_plot_factory.rb @@ -1,7 +1,10 @@ # the r-path has to be added for the rinruby plugin -raise "Environment variable R_HOME missing" unless ENV['R_HOME'] -ENV['PATH'] = ENV['R_HOME']+":"+ENV['PATH'] unless ENV['PATH'].split(":").index(ENV['R_HOME']) +if ENV['R_HOME'] + ENV['PATH'] = ENV['R_HOME']+":"+ENV['PATH'] unless ENV['PATH'].split(":").index(ENV['R_HOME']) +else + LOGGER.warn "Environment variable R_HOME not set" +end require "rinruby" diff --git a/report/report_test.rb b/report/report_test.rb index 6ac8810..279e968 100644 --- a/report/report_test.rb +++ b/report/report_test.rb @@ -31,26 +31,26 @@ require "'lib/test_util.rb" # get '/osterhase' # assert last_response.not_found? # -# post '/validation', :uri_list => "validation_uri_1\nvalidation_uri_2" +# post '', :uri_list => "validation_uri_1\nvalidation_uri_2" # assert last_response.status == 400 # -# post '/validation', :uri_list => "validation_uri_1" +# post '', :uri_list => "validation_uri_1" # assert last_response.ok? # report_uri = last_response.body # type = $rep.parse_type(report_uri) # assert type == "validation" # id = $rep.parse_id(report_uri) # -# get '/validation/'+id.to_s, {}, {"HTTP_ACCEPT" => "weihnachtsmann"} +# get '/'+id.to_s, {}, {"HTTP_ACCEPT" => "weihnachtsmann"} # assert last_response.status == 400 -# get '/validation/'+id.to_s, {}, {"HTTP_ACCEPT" => "text/xml"} +# get '/'+id.to_s, {}, {"HTTP_ACCEPT" => "text/xml"} # assert last_response.ok? -# get '/validation/'+id.to_s, {}, {"HTTP_ACCEPT" => "text/html"} +# get '/'+id.to_s, {}, {"HTTP_ACCEPT" => "text/html"} # assert last_response.ok? # -# delete '/validation/43984398' +# delete '/43984398' # assert last_response.not_found? -# delete '/validation/'+id.to_s +# delete '/'+id.to_s # assert last_response.ok? # # map = {"crossvalidation"=>"validation_uri_1\nvalidation_uri_2\nvalidation_uri_3\nvalidation_uri_4\nvalidation_uri_5", diff --git a/report/validation_access.rb b/report/validation_access.rb index 2526e01..2187f46 100644 --- a/report/validation_access.rb +++ b/report/validation_access.rb @@ -48,7 +48,7 @@ class Reports::ValidationDB < Reports::ValidationAccess def init_validation(validation, uri) - raise Reports::BadRequest.new "not a validation uri: "+uri.to_s unless uri =~ /.*\/validation\/[0-9]+/ + raise Reports::BadRequest.new "not a validation uri: "+uri.to_s unless uri =~ /.*\/[0-9]+/ validation_id = uri.split("/")[-1] v = Lib::Validation.get(validation_id) raise Reports::BadRequest.new "no validation found with id "+validation_id.to_s unless v diff --git a/validation/validation_application.rb b/validation/validation_application.rb index 05909c5..5921907 100644 --- a/validation/validation_application.rb +++ b/validation/validation_application.rb @@ -23,7 +23,7 @@ class Sinatra::Base end ## REST API -get '/crossvalidations/?' do +get '/crossvalidation/?' do LOGGER.info "list all crossvalidations" Crossvalidation.all.collect{ |d| url_for("/crossvalidation/", :full) + d.id.to_s }.join("\n") end @@ -71,12 +71,12 @@ post '/crossvalidation/?' do cv.uri end -get '/validations/?' do +get '/?' do LOGGER.info "list all validations" - Validation.all.collect{ |d| url_for("/validation/", :full) + d.id.to_s }.join("\n") + Validation.all.collect{ |d| url_for("/", :full) + d.id.to_s }.join("\n") end -get '/validation/:id' do +get '/:id' do LOGGER.info "get validation with id "+params[:id].to_s+" '"+request.env['HTTP_ACCEPT'].to_s+"'" halt 404, "Validation '#{params[:id]}' not found." unless validation = Validation.get(params[:id]) @@ -93,7 +93,7 @@ get '/validation/:id' do result end -post '/validation/?' do +post '/?' do LOGGER.info "creating validation "+params.inspect if params[:model_uri] and params[:test_dataset_uri] and !params[:training_dataset_uri] and !params[:algorithm_uri] and params[:prediction_feature] v = Validation.new :model_uri => params[:model_uri], @@ -115,7 +115,7 @@ post '/validation/?' do v.uri end -post '/validation/training_test_split' do +post '/training_test_split' 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] @@ -129,7 +129,7 @@ post '/validation/training_test_split' do v.uri end -get '/validation/:id/:attribute' do +get '/:id/:attribute' do LOGGER.info "access validation attribute "+params.inspect halt 404, "Validation #{params[:id]} not found." unless validation = Validation.get(params[:id]) begin @@ -140,7 +140,7 @@ get '/validation/:id/:attribute' do return validation.send(params[:attribute]) end -delete '/validation/:id' do +delete '/:id' do LOGGER.info "delete validation with id "+params[:id].to_s halt 404, "Validation #{params[:id]} not found." unless validation = Validation.get(params[:id]) validation.delete diff --git a/validation/validation_service.rb b/validation/validation_service.rb index 4f738fb..88ac28f 100644 --- a/validation/validation_service.rb +++ b/validation/validation_service.rb @@ -41,7 +41,7 @@ class Validation < Lib::Validation super params save unless attribute_dirty?("id") raise "internal error, id not set "+to_yaml unless @id - update :uri => $sinatra.url_for("/validation/"+@id.to_s, :full) + update :uri => $sinatra.url_for("/"+@id.to_s, :full) end # deletes a validation @@ -240,7 +240,7 @@ class Crossvalidation < Lib::Crossvalidation '_f'+n.to_s+'of'+@num_folds.to_s+ '_r'+@random_seed.to_s+ '_s'+@stratified.to_s - source = $sinatra.url_for('/validation/crossvalidation',:full) + source = $sinatra.url_for('/crossvalidation',:full) test_compounds = [] train_compounds = [] @@ -345,7 +345,7 @@ module ValidationUtil else title = "Test dataset split of "+orig_dataset.title.to_s end - source = $sinatra.url_for('/validation/training_test_split',:full) + source = $sinatra.url_for('/training_test_split',:full) result[sym] = create_new_dataset( data, compound_array, title, source ) end diff --git a/validation/validation_test.rb b/validation/validation_test.rb index 350e973..680e459 100644 --- a/validation/validation_test.rb +++ b/validation/validation_test.rb @@ -42,7 +42,7 @@ class ValidationTest < Test::Unit::TestCase end # def test_all_validations -# get '/validations' +# get '/' # assert last_response.ok? # puts "all validations:\n"+last_response.body # validations = last_response.body.split("\n") @@ -101,11 +101,11 @@ class ValidationTest < Test::Unit::TestCase ## # assert that both cross validaitons use the same datasets ## first_validation2 = last_response.body.split("\n")[0].split("/")[-1] ## -## get '/validation/'+first_validation+'/test_dataset_uri' +## get '/'+first_validation+'/test_dataset_uri' ## assert last_response.ok? ## first_val_test_data = last_response.body ## -## get '/validation/'+first_validation2+'/test_dataset_uri' +## get '/'+first_validation2+'/test_dataset_uri' ## assert last_response.ok? ## first_val2_test_data = last_response.body ## assert first_val_test_data==first_val2_test_data @@ -137,7 +137,7 @@ class ValidationTest < Test::Unit::TestCase # model_uri = "http://ot.model.de/45" #trained with training split from hamster # data_uri_test = "http://ot.dataset.de/367" #hamster test split # -# post '/validation', {:test_dataset_uri => data_uri_test, :model_uri => model_uri, :prediction_feature => FEATURE_URI} +# post '', {:test_dataset_uri => data_uri_test, :model_uri => model_uri, :prediction_feature => FEATURE_URI} # verify_validation # ensure # #delete_resources @@ -147,13 +147,13 @@ class ValidationTest < Test::Unit::TestCase # def test_validate_algorithm # begin # -# #get '/validation/41',nil,'HTTP_ACCEPT' => "application/rdf+xml" #"text/x-yaml" +# #get '/41',nil,'HTTP_ACCEPT' => "application/rdf+xml" #"text/x-yaml" # #puts last_response.body # data_uri_train = upload_data(WS_DATA, FILE_TRAIN) # data_uri_test = upload_data(WS_DATA, FILE_TEST) # #data_uri_train = WS_DATA+"/"+DATA_TRAIN # #data_uri_test = WS_DATA+"/"+DATA_TEST -# post '/validation', { :training_dataset_uri => data_uri_train, :test_dataset_uri => data_uri_test, +# post '', { :training_dataset_uri => data_uri_train, :test_dataset_uri => data_uri_test, # :algorithm_uri => WS_CLASS_ALG, :prediction_feature => FEATURE_URI, :feature_generation_uri => WS_FEATURE_ALG} # verify_validation # ensure @@ -168,7 +168,7 @@ class ValidationTest < Test::Unit::TestCase # #data_uri = "http://ot.dataset.de/67" #hamster # # #data_uri=WS_DATA+"/"+DATA -# post '/validation/training_test_split', { :dataset_uri => data_uri, :algorithm_uri => WS_CLASS_ALG, :prediction_feature => FEATURE_URI, +# post '/training_test_split', { :dataset_uri => data_uri, :algorithm_uri => WS_CLASS_ALG, :prediction_feature => FEATURE_URI, # :algorithm_params => "feature_generation_uri="+WS_FEATURE_ALG, :split_ratio=>0.8, :random_seed=>5} # verify_validation # ensure @@ -182,8 +182,8 @@ class ValidationTest < Test::Unit::TestCase get '/examples' - #get '/validation/350',nil,'HTTP_ACCEPT' => "application/rdf+xml" - #get '/validation/350',nil,'HTTP_ACCEPT' => "text/x-yaml" + #get '/350',nil,'HTTP_ACCEPT' => "application/rdf+xml" + #get '/350',nil,'HTTP_ACCEPT' => "text/x-yaml" #get '/crossvalidation/1',nil,'HTTP_ACCEPT' => "application/rdf+xml" #get '/crossvalidation/1',nil,'HTTP_ACCEPT' => "text/x-yaml" @@ -200,15 +200,15 @@ class ValidationTest < Test::Unit::TestCase puts "uri: "+last_response.body puts "id:"+validation_id - add_resource("/validation/"+validation_id) if delete + add_resource("/"+validation_id) if delete - #get '/validation/'+validation_id,nil,'HTTP_ACCEPT' => "application/rdf+xml" - get '/validation/'+validation_id,nil,'HTTP_ACCEPT' => "text/x-yaml" + #get '/'+validation_id,nil,'HTTP_ACCEPT' => "application/rdf+xml" + get '/'+validation_id,nil,'HTTP_ACCEPT' => "text/x-yaml" puts last_response.body assert last_response.ok? || last_response.status==202 # ["test_dataset_uri", "model_uri", "prediction_dataset_uri"].each do |t| -# get '/validation/'+validation_id+'/'+t +# get '/'+validation_id+'/'+t # puts ""+t+": "+last_response.body # assert last_response.ok? # |