opentox-ruby 1.0.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -28,8 +28,17 @@ begin
28
28
  "tmail",
29
29
  "rinruby",
30
30
  "ohm",
31
+ "ohm-contrib",
31
32
  "SystemTimer",
32
- "rjb"
33
+ "rjb",
34
+ #valiation-gems
35
+ "dm-core",
36
+ "dm-serializer",
37
+ "dm-timestamps",
38
+ "dm-types",
39
+ "dm-migrations",
40
+ "dm-validations",
41
+ "dm-sqlite-adapter"
33
42
  ].each { |dep| gem.add_dependency dep }
34
43
  =begin
35
44
  [ "dm-core",
@@ -41,11 +50,12 @@ begin
41
50
  "dm-validations",
42
51
  ].each {|dep| gem.add_dependency dep, ">= 1" }
43
52
  =end
53
+ #valiation-gem
44
54
  gem.add_dependency "haml", ">=3"
55
+ # validation-gems
56
+ gem.add_dependency "ruby-plot", "~>0.4.0"
45
57
  ['jeweler'].each { |dep| gem.add_development_dependency dep }
46
58
  gem.files = FileList["[A-Z]*", "{bin,generators,lib,test}/**/*", 'lib/jeweler/templates/.gitignore']
47
- #gem.files.include %w(lib/environment.rb, lib/algorithm.rb, lib/compound.rb, lib/dataset.rb, lib/model.rb, lib/validation.rb, lib/templates/*)
48
- # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
49
59
  end
50
60
  Jeweler::GemcutterTasks.new
51
61
  rescue LoadError
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.0.2
1
+ 2.0.0
@@ -52,9 +52,9 @@ module OpenTox
52
52
  class BBRC
53
53
  include Fminer
54
54
  # Initialize bbrc algorithm
55
- def initialize
55
+ def initialize(subjectid=nil)
56
56
  super File.join(CONFIG[:services]["opentox-algorithm"], "fminer/bbrc")
57
- load_metadata
57
+ load_metadata(subjectid)
58
58
  end
59
59
  end
60
60
 
@@ -62,9 +62,9 @@ module OpenTox
62
62
  class LAST
63
63
  include Fminer
64
64
  # Initialize last algorithm
65
- def initialize
65
+ def initialize(subjectid=nil)
66
66
  super File.join(CONFIG[:services]["opentox-algorithm"], "fminer/last")
67
- load_metadata
67
+ load_metadata(subjectid)
68
68
  end
69
69
  end
70
70
 
@@ -74,9 +74,9 @@ module OpenTox
74
74
  class Lazar
75
75
  include Algorithm
76
76
  # Initialize lazar algorithm
77
- def initialize
77
+ def initialize(subjectid=nil)
78
78
  super File.join(CONFIG[:services]["opentox-algorithm"], "lazar")
79
- load_metadata
79
+ load_metadata(subjectid)
80
80
  end
81
81
  end
82
82
 
@@ -165,11 +165,19 @@ module OpenTox
165
165
  # @param [Hash] params Keys `:similarity_algorithm,:p_values` are required
166
166
  # @return [Hash] Hash with keys `:prediction, :confidence`
167
167
  def self.local_svm_regression(neighbors,params )
168
- sims = neighbors.collect{ |n| n[:similarity] } # similarity values between query and neighbors
168
+ sims = neighbors.collect{ |n| Algorithm.gauss(n[:similarity]) } # similarity values between query and neighbors
169
169
  conf = sims.inject{|sum,x| sum + x }
170
+
171
+ # AM: Control log taking
172
+ take_logs=true
173
+ neighbors.each do |n|
174
+ if (! n[:activity].nil?) && (n[:activity].to_f < 0.0)
175
+ take_logs = false
176
+ end
177
+ end
170
178
  acts = neighbors.collect do |n|
171
179
  act = n[:activity]
172
- Math.log10(act.to_f)
180
+ take_logs ? Math.log10(act.to_f) : act.to_f
173
181
  end # activities of neighbors for supervised learning
174
182
 
175
183
  neighbor_matches = neighbors.collect{ |n| n[:features] } # as in classification: URIs of matches
@@ -214,8 +222,8 @@ module OpenTox
214
222
  @r.eval "sims<-as.kernelMatrix(matrix(sims,1))"
215
223
  LOGGER.debug "Predicting ..."
216
224
  @r.eval "p<-predict(model,sims)[1,1]"
217
- prediction = 10**(@r.p.to_f)
218
- LOGGER.debug "Prediction is: '" + @prediction.to_s + "'."
225
+ prediction = 10**(@r.p.to_f) if take_logs
226
+ LOGGER.debug "Prediction is: '" + prediction.to_s + "'."
219
227
  @r.quit # free R
220
228
  end
221
229
  confidence = conf/neighbors.size if neighbors.size > 0
@@ -137,16 +137,23 @@ module OpenTox
137
137
  # Lists policies alongside with affected uris
138
138
  # @param [String] subjectid
139
139
  # @return [Hash] keys: all policies of the subjectid owner, values: uris affected by those policies
140
- def self.list_policy_uris( subjectid )
140
+ def self.list_policies_uris( subjectid )
141
141
  names = list_policies(subjectid)
142
142
  policies = {}
143
143
  names.each do |n|
144
- p = OpenTox::Policies.new
145
- p.load_xml( list_policy(n, subjectid) )
146
- policies[n] = p.uris
144
+ policies[n] = list_policy_uris( n, subjectid )
147
145
  end
148
146
  policies
149
147
  end
148
+
149
+ # Lists policies alongside with affected uris
150
+ # @param [String] subjectid
151
+ # @return [Hash] keys: all policies of the subjectid owner, values: uris affected by those policies
152
+ def self.list_policy_uris( policy, subjectid )
153
+ p = OpenTox::Policies.new
154
+ p.load_xml( list_policy(policy, subjectid) )
155
+ p.uris
156
+ end
150
157
 
151
158
  #Returns the owner (who created the first policy) of an URI
152
159
  # @param [String, String]uri,subjectid
@@ -220,7 +227,9 @@ module OpenTox
220
227
  begin
221
228
  resource = RestClient::Resource.new("#{AA_SERVER}/opensso/identity/search")
222
229
  grps = resource.post(:admin => subjectid, :attributes_names => "objecttype", :attributes_values_objecttype => "group")
223
- grps.split("\n").collect{|x| x.sub("string=","")}
230
+ grps = grps.split("\n").collect{|x| x.sub("string=","")}
231
+ grps.delete_if{|g|g=="MemberManagement"||g=="Webmasters"}
232
+ grps
224
233
  rescue
225
234
  []
226
235
  end
@@ -279,10 +288,12 @@ module OpenTox
279
288
  # @return [Boolean]
280
289
  def self.delete_policies_from_uri(uri, subjectid)
281
290
  policies = list_uri_policies(uri, subjectid)
282
- policies.each do |policy|
283
- ret = delete_policy(policy, subjectid)
284
- LOGGER.debug "OpenTox::Authorization delete policy: #{policy} - with result: #{ret}"
285
- end
291
+ if policies
292
+ policies.each do |policy|
293
+ ret = delete_policy(policy, subjectid)
294
+ LOGGER.debug "OpenTox::Authorization delete policy: #{policy} - with result: #{ret}"
295
+ end
296
+ end
286
297
  return true
287
298
  end
288
299
 
@@ -74,7 +74,7 @@ module OpenTox
74
74
  # @param [optional,String] uri URI of the dataset service, defaults to service specified in configuration
75
75
  # @return [Array] Array of dataset object without data (use one of the load_* methods to pull data from the server)
76
76
  def self.all(uri=CONFIG[:services]["opentox-dataset"], subjectid=nil)
77
- RestClientWrapper.get(uri,{:accept => "text/uri-list",:subjectid => subjectid}).to_s.each_line.collect{|u| Dataset.new(u, subjectid)}
77
+ RestClientWrapper.get(uri,{:accept => "text/uri-list",:subjectid => subjectid}).to_s.each_line.collect{|u| Dataset.new(u.chomp, subjectid)}
78
78
  end
79
79
 
80
80
  # Load YAML representation into the dataset
@@ -158,29 +158,42 @@ module OpenTox
158
158
  # Load and return only features from the dataset service
159
159
  # @return [Hash] Features of the dataset
160
160
  def load_features(subjectid=nil)
161
- parser = Parser::Owl::Dataset.new(@uri, subjectid)
162
- @features = parser.load_features(subjectid)
161
+ if (CONFIG[:yaml_hosts].include?(URI.parse(@uri).host))
162
+ @features = YAML.load(RestClientWrapper.get(File.join(@uri,"features"), {:accept => "application/x-yaml", :subjectid => subjectid}))
163
+ else
164
+ parser = Parser::Owl::Dataset.new(@uri, subjectid)
165
+ @features = parser.load_features(subjectid)
166
+ end
163
167
  @features
164
168
  end
165
169
 
170
+ def feature_classes(feature, subjectid=nil)
171
+ if Feature.find(feature, subjectid).feature_type == "classification"
172
+ classes = []
173
+ @data_entries.each do |c,e|
174
+ e[feature].each { |v| classes << v.to_s }
175
+ end
176
+ classes.uniq.sort
177
+ else
178
+ nil
179
+ end
180
+ end
181
+
182
+ =begin
166
183
  # Detect feature type(s) in the dataset
167
184
  # @return [String] `classification", "regression", "mixed" or unknown`
168
185
  def feature_type(subjectid=nil)
169
186
  load_features(subjectid)
170
- feature_types = @features.collect{|f,metadata| metadata[OT.isA]}.uniq
171
- if feature_types.size > 1
172
- "mixed"
187
+ feature_types = @features.collect{|f,metadata| metadata[RDF.type]}.flatten.uniq
188
+ if feature_types.include?(OT.NominalFeature)
189
+ "classification"
190
+ elsif feature_types.include?(OT.NumericFeature)
191
+ "regression"
173
192
  else
174
- case feature_types.first
175
- when /NominalFeature/
176
- "classification"
177
- when /NumericFeature/
178
- "regression"
179
- else
180
- "unknown"
181
- end
193
+ "unknown"
182
194
  end
183
195
  end
196
+ =end
184
197
 
185
198
  # Get Spreadsheet representation
186
199
  # @return [Spreadsheet::Workbook] Workbook which can be written with the spreadsheet gem (data_entries only, metadata will will be discarded))
@@ -284,7 +297,7 @@ module OpenTox
284
297
  else
285
298
  compounds.each do |c|
286
299
  features.each do |f|
287
- unless @data_entries[c][f]
300
+ if @data_entries[c]==nil or @data_entries[c][f]==nil
288
301
  dataset.add(c,f,nil)
289
302
  else
290
303
  @data_entries[c][f].each do |v|
@@ -23,7 +23,7 @@ else
23
23
  end
24
24
 
25
25
  # database
26
- `redis-server /opt/redis/redis.conf` unless File.exists? "/var/run/redis.pid"
26
+ #`redis-server /opt/redis/redis.conf` unless File.exists? "/var/run/redis.pid" # removed by AM
27
27
  Ohm.connect :thread_safe => true
28
28
 
29
29
  # load mail settings for error messages
@@ -69,7 +69,7 @@ module OpenTox
69
69
 
70
70
  def rdf_content()
71
71
  c = {
72
- RDF.type => OT.ErrorReport,
72
+ RDF.type => [OT.ErrorReport],
73
73
  OT.statusCode => @http_code,
74
74
  OT.message => @message,
75
75
  OT.actor => @actor,
@@ -96,4 +96,4 @@ class Array
96
96
  end
97
97
  short.join("\n")
98
98
  end
99
- end
99
+ end
@@ -16,23 +16,19 @@ module OpenTox
16
16
  feature
17
17
  end
18
18
 
19
- # provides domain (possible target values) of classification feature
20
- # @return [Array] list with possible target values
21
- def domain
22
- if metadata[OT.acceptValue]
23
- raise "accept value found, remove hack and implement correctly"
24
- else
25
- if @uri=~/feature\/26221/ || @uri=~/feature\/221726/
26
- return ["mutagen" , "nonmutagen"]
27
- end
28
- return [true, false]
29
- end
30
- end
31
-
32
19
  # provides feature type, possible types are "regression" or "classification"
33
20
  # @return [String] feature type, unknown if OT.isA property is unknown/ not set
34
21
  def feature_type
35
- case metadata[OT.isA]
22
+ if metadata[RDF.type].flatten.include?(OT.NominalFeature)
23
+ "classification"
24
+ elsif metadata[RDF.type].flatten.include?(OT.NumericFeature)
25
+ "regression"
26
+ else
27
+ #"unknown"
28
+ metadata[RDF.type].inspect
29
+ end
30
+ =begin
31
+ case metadata[RDF.type]
36
32
  when /NominalFeature/
37
33
  "classification"
38
34
  when /NumericFeature/
@@ -40,6 +36,7 @@ module OpenTox
40
36
  else
41
37
  "unknown"
42
38
  end
39
+ =end
43
40
  end
44
41
 
45
42
  end
@@ -44,21 +44,12 @@ helpers do
44
44
 
45
45
  def uri_available?(urlStr)
46
46
  url = URI.parse(urlStr)
47
- unless @subjectid
48
- Net::HTTP.start(url.host, url.port) do |http|
49
- return http.head(url.request_uri).code == "200"
50
- end
51
- else
52
- Net::HTTP.start(url.host, url.port) do |http|
53
- return http.post(url.request_uri, "subjectid=#{@subjectid}").code == "202"
54
- end
47
+ Net::HTTP.start(url.host, url.port) do |http|
48
+ return http.head("#{url.request_uri}?subjectid=#{CGI.escape @subjectid}").code == "200"
55
49
  end
56
50
  end
57
51
 
58
- end
59
-
60
- before do
61
- unless !AA_SERVER or login_requests or CONFIG[:authorization][:free_request].include?(env['REQUEST_METHOD'])
52
+ def get_subjectid
62
53
  begin
63
54
  subjectid = nil
64
55
  subjectid = session[:subjectid] if session[:subjectid]
@@ -69,31 +60,37 @@ before do
69
60
  subjectid = CGI.unescape(subjectid) if subjectid.include?("%23")
70
61
  @subjectid = subjectid
71
62
  rescue
72
- #LOGGER.debug "OpenTox ruby api wrapper: helper before filter: NO subjectid for URI: #{request.env['rack.url_scheme']}://#{request.env['HTTP_HOST']}#{request.env['REQUEST_URI']}"
73
- subjectid = ""
63
+ subjectid = nil
74
64
  end
75
- @subjectid = subjectid
76
- protected!(subjectid)
77
-
78
- extension = File.extname(request.path_info) # params[:id] is not yet available
65
+ end
66
+ def get_extension
67
+ extension = File.extname(request.path_info)
79
68
  unless extension.empty?
80
- #request.path_info.sub!(/\.#{extension}$/,'')
81
- case extension
82
- when "html"
83
- @accept = 'text/html'
84
- when "yaml"
85
- @accept = 'application/x-yaml'
86
- when "csv"
87
- @accept = 'text/csv'
88
- when "rdfxml"
89
- @accept = 'application/rdf+xml'
90
- when "xls"
91
- @accept = 'application/ms-excel'
92
- else
93
- halt 404, "File format #{extension} not supported."
94
- end
95
- end
96
-
69
+ case extension.gsub(".","")
70
+ when "html"
71
+ @accept = 'text/html'
72
+ when "yaml"
73
+ @accept = 'application/x-yaml'
74
+ when "csv"
75
+ @accept = 'text/csv'
76
+ when "rdfxml"
77
+ @accept = 'application/rdf+xml'
78
+ when "xls"
79
+ @accept = 'application/ms-excel'
80
+ when "css"
81
+ @accept = 'text/css'
82
+ else
83
+ # halt 404, "File format #{extension} not supported."
84
+ end
85
+ end
86
+ end
87
+ end
88
+
89
+ before do
90
+ @subjectid = get_subjectid()
91
+ @accept = get_extension()
92
+ unless !AA_SERVER or login_requests or CONFIG[:authorization][:free_request].include?(env['REQUEST_METHOD'])
93
+ protected!(@subjectid)
97
94
  end
98
95
  end
99
96
 
@@ -44,11 +44,10 @@ module OpenTox
44
44
  load_metadata(subjectid) if @metadata==nil or @metadata.size==0 or (@metadata.size==1 && @metadata.values[0]==@uri)
45
45
  algorithm = OpenTox::Algorithm::Generic.find(@metadata[OT.algorithm], subjectid)
46
46
  algorithm_title = algorithm ? algorithm.metadata[DC.title] : nil
47
- algorithm_type = algorithm ? algorithm.metadata[OT.isA] : nil
47
+ algorithm_type = algorithm ? algorithm.metadata[RDF.type] : nil
48
48
  dependent_variable = OpenTox::Feature.find( @metadata[OT.dependentVariables],subjectid )
49
49
  dependent_variable_type = dependent_variable ? dependent_variable.feature_type : nil
50
- type_indicators = [dependent_variable_type, @metadata[OT.isA], @metadata[DC.title],
51
- @uri, algorithm_type, algorithm_title]
50
+ type_indicators = [dependent_variable_type, @metadata[RDF.type], @metadata[DC.title], @uri, algorithm_type, algorithm_title].flatten
52
51
  type_indicators.each do |type|
53
52
  case type
54
53
  when /(?i)classification/
@@ -113,9 +112,10 @@ module OpenTox
113
112
  # @param [optional,Hash] params Parameters for the lazar algorithm (OpenTox::Algorithm::Lazar)
114
113
  # @return [OpenTox::Model::Lazar] lazar model
115
114
  def self.create(params)
115
+ subjectid = params[:subjectid]
116
116
  lazar_algorithm = OpenTox::Algorithm::Generic.new File.join( CONFIG[:services]["opentox-algorithm"],"lazar")
117
117
  model_uri = lazar_algorithm.run(params)
118
- OpenTox::Model::Lazar.find(model_uri, params[:subjectid])
118
+ OpenTox::Model::Lazar.find(model_uri, subjectid)
119
119
  end
120
120
 
121
121
  # Get a parameter value
@@ -187,7 +187,7 @@ module OpenTox
187
187
 
188
188
  if @neighbors.size == 0
189
189
  @prediction_dataset.add_feature(prediction_feature_uri, {
190
- OT.isA => OT.MeasuredFeature,
190
+ RDF.type => [OT.MeasuredFeature],
191
191
  OT.hasSource => @uri,
192
192
  DC.creator => @uri,
193
193
  DC.title => URI.decode(File.basename( @metadata[OT.dependentVariables] )),
@@ -198,7 +198,7 @@ module OpenTox
198
198
 
199
199
  else
200
200
  @prediction_dataset.add_feature(prediction_feature_uri, {
201
- OT.isA => OT.ModelPrediction,
201
+ RDF.type => [OT.ModelPrediction],
202
202
  OT.hasSource => @uri,
203
203
  DC.creator => @uri,
204
204
  DC.title => URI.decode(File.basename( @metadata[OT.dependentVariables] )),
@@ -215,7 +215,7 @@ module OpenTox
215
215
  feature_uri = File.join( @prediction_dataset.uri, "feature", "descriptor", f.to_s)
216
216
  features[feature] = feature_uri
217
217
  @prediction_dataset.add_feature(feature_uri, {
218
- OT.isA => OT.Substructure,
218
+ RDF.type => [OT.Substructure],
219
219
  OT.smarts => feature,
220
220
  OT.pValue => @p_values[feature],
221
221
  OT.effect => @effects[feature]
@@ -236,7 +236,7 @@ module OpenTox
236
236
  OT.compound => neighbor[:compound],
237
237
  OT.similarity => neighbor[:similarity],
238
238
  OT.measuredActivity => neighbor[:activity],
239
- OT.isA => OT.Neighbor
239
+ RDF.type => [OT.Neighbor]
240
240
  })
241
241
  @prediction_dataset.add @compound.uri, neighbor_uri, true
242
242
  f = 0 unless f
@@ -250,7 +250,7 @@ module OpenTox
250
250
  unless features.has_key? feature
251
251
  features[feature] = feature_uri
252
252
  @prediction_dataset.add_feature(feature_uri, {
253
- OT.isA => OT.Substructure,
253
+ RDF.type => [OT.Substructure],
254
254
  OT.smarts => feature,
255
255
  OT.pValue => @p_values[feature],
256
256
  OT.effect => @effects[feature]
@@ -1,6 +1,7 @@
1
1
  module OpenTox
2
- module OntologyService
3
- module Endpoints
2
+ module Ontology
3
+ module Echa
4
+ =begin
4
5
  require 'sparql/client'
5
6
  @sparql = SPARQL::Client.new("http://apps.ideaconsult.net:8080/ontology")
6
7
  def self.qs(classname="Endpoints")
@@ -12,11 +13,11 @@ module OpenTox
12
13
  PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
13
14
  PREFIX otee:<http://www.opentox.org/echaEndpoints.owl#>
14
15
  PREFIX toxcast:<http://www.opentox.org/toxcast.owl#>
15
- select ?Endpoints ?title ?id
16
- where {?Endpoints rdfs:subClassOf otee:#{classname}.
17
- OPTIONAL {?Endpoints dc:title ?title}.
18
- OPTIONAL {?Endpoints dc:identifier ?id}.}
19
- ORDER BY ?title"
16
+ select *
17
+ where {
18
+ ?endpoint rdfs:subClassOf otee:#{classname}.
19
+ ?endpoint dc:title ?title.
20
+ }"
20
21
  end
21
22
 
22
23
  def self.make_option_list(endpoint="Endpoints", level=1)
@@ -38,6 +39,17 @@ module OpenTox
38
39
  out += "</select>\n"
39
40
  return out
40
41
  end
42
+ =end
43
+
44
+ def self.endpoints
45
+ RestClientWrapper.get("http://apps.ideaconsult.net:8080/ambit2/query/ndatasets_endpoint",:accept => "text/csv").collect { |line| line.split(',').first if line.match(/^http/) }.compact
46
+ end
47
+
48
+ def self.datasets(endpoint)
49
+ RestClientWrapper.get("http://apps.ideaconsult.net:8080/ambit2/dataset?feature_sameas=#{URI.encode endpoint}", :accept => "text/uri-list").split("\n")
50
+ end
51
+
41
52
  end
53
+
42
54
  end
43
- end
55
+ end
@@ -9,6 +9,6 @@ rescue LoadError
9
9
  end
10
10
 
11
11
  ['opentox', 'compound','dataset', 'parser','serializer', 'algorithm','model','task','validation','feature',
12
- 'rest_client_wrapper', 'authorization', 'policy', 'helper', 'to-html' ].each do |lib|
12
+ 'rest_client_wrapper', 'authorization', 'policy', 'helper', 'to-html', 'ontology' ].each do |lib|
13
13
  require lib
14
14
  end
@@ -31,7 +31,14 @@ module OpenTox
31
31
  end
32
32
 
33
33
  def add_metadata(metadata)
34
- metadata.each { |k,v| @metadata[k] = v }
34
+ metadata.each do |k,v|
35
+ if v.is_a? Array
36
+ @metadata[k] = [] unless @metadata[k]
37
+ @metadata[k] << v
38
+ else
39
+ @metadata[k] = v
40
+ end
41
+ end
35
42
  end
36
43
 
37
44
  # Get OWL-DL representation in RDF/XML format
@@ -8,6 +8,7 @@ before {
8
8
  $url_provider = self
9
9
  # stupid internet explorer does not ask for text/html, add this manually
10
10
  request.env['HTTP_ACCEPT'] += ";text/html" if request.env["HTTP_USER_AGENT"]=~/MSIE/
11
+ request.env['HTTP_ACCEPT']=request.params["media"] if request.params["media"]
11
12
  }
12
13
 
13
14
  # Error handling
@@ -39,20 +40,24 @@ end
39
40
  class Sinatra::Base
40
41
 
41
42
  def return_task( task )
42
- code = task.running? ? 202 : 200
43
+ raise "http_code == nil" unless task.http_code!=nil
43
44
  case request.env['HTTP_ACCEPT']
44
45
  when /rdf/
45
46
  response['Content-Type'] = "application/rdf+xml"
46
- halt code,task.to_rdfxml
47
+ halt task.http_code,task.to_rdfxml
47
48
  when /yaml/
48
49
  response['Content-Type'] = "application/x-yaml"
49
- halt code,task.to_yaml # PENDING differs from task-webservice
50
+ halt task.http_code,task.to_yaml # PENDING differs from task-webservice
50
51
  when /html/
51
52
  response['Content-Type'] = "text/html"
52
- halt code,OpenTox.text_to_html(task.to_yaml, @subjectid)
53
+ halt task.http_code,OpenTox.text_to_html(task.to_yaml, @subjectid)
53
54
  else # default /uri-list/
54
55
  response['Content-Type'] = "text/uri-list"
55
- halt code,task.uri+"\n"
56
+ if task.completed?
57
+ halt task.http_code,task.resultURI+"\n"
58
+ else
59
+ halt task.http_code,task.uri+"\n"
60
+ end
56
61
  end
57
62
  end
58
63
  end
@@ -55,7 +55,14 @@ module OpenTox
55
55
  parameter_ids = []
56
56
  `rapper -i rdfxml -o ntriples #{file.path} 2>/dev/null`.each_line do |line|
57
57
  triple = line.to_triple
58
- @metadata[triple[1]] = triple[2].split('^^').first if triple[0] == @uri and triple[1] != RDF['type']
58
+ if triple[0] == @uri
59
+ if triple[1] == RDF.type # allow multiple types
60
+ @metadata[triple[1]] = [] unless @metadata[triple[1]]
61
+ @metadata[triple[1]] << triple[2].split('^^').first
62
+ else
63
+ @metadata[triple[1]] = triple[2].split('^^').first
64
+ end
65
+ end
59
66
  statements << triple
60
67
  parameter_ids << triple[2] if triple[1] == OT.parameters
61
68
  end
@@ -156,6 +163,7 @@ module OpenTox
156
163
  data = {}
157
164
  feature_values = {}
158
165
  feature = {}
166
+ feature_accept_values = {}
159
167
  other_statements = {}
160
168
  `rapper -i rdfxml -o ntriples #{file.path} 2>/dev/null`.each_line do |line|
161
169
  triple = line.chomp.split(' ',3)
@@ -175,6 +183,9 @@ module OpenTox
175
183
  if triple[2]=~/#{OT.Compound}/i and !data[triple[0]]
176
184
  data[triple[0]] = {:compound => triple[0], :values => []}
177
185
  end
186
+ when /#{OT.acceptValue}/i # acceptValue in ambit datasets is only provided in dataset/<id> no in dataset/<id>/features
187
+ feature_accept_values[triple[0]] = [] unless feature_accept_values[triple[0]]
188
+ feature_accept_values[triple[0]] << triple[2]
178
189
  else
179
190
  end
180
191
  end
@@ -185,20 +196,25 @@ module OpenTox
185
196
  @dataset.add_compound(entry[:compound])
186
197
  else
187
198
  entry[:values].each do |value_id|
188
- split = feature_values[value_id].split(/\^\^/)
189
- case split[-1]
190
- when XSD.double, XSD.float
191
- value = split.first.to_f
192
- when XSD.boolean
193
- value = split.first=~/(?i)true/ ? true : false
194
- else
195
- value = split.first
199
+ if feature_values[value_id]
200
+ split = feature_values[value_id].split(/\^\^/)
201
+ case split[-1]
202
+ when XSD.double, XSD.float
203
+ value = split.first.to_f
204
+ when XSD.boolean
205
+ value = split.first=~/(?i)true/ ? true : false
206
+ else
207
+ value = split.first
208
+ end
196
209
  end
197
210
  @dataset.add entry[:compound],feature[value_id],value
198
211
  end
199
212
  end
200
213
  end
201
214
  load_features subjectid
215
+ feature_accept_values.each do |feature, values|
216
+ @dataset.features[feature][OT.acceptValue] = values
217
+ end
202
218
  @dataset.metadata = load_metadata(subjectid)
203
219
  @dataset
204
220
  end
@@ -223,7 +239,7 @@ module OpenTox
223
239
  `rapper -i rdfxml -o ntriples #{file.path} 2>/dev/null`.each_line do |line|
224
240
  triple = line.chomp.split('> ').collect{|i| i.sub(/\s+.$/,'').gsub(/[<>"]/,'')}[0..2]
225
241
  statements << triple
226
- features << triple[0] if triple[1] == RDF['type'] and (triple[2] == OT.Feature || triple[2] == OT.NumericFeature)
242
+ features << triple[0] if triple[1] == RDF.type and (triple[2] =~ /Feature|Substructure/)
227
243
  end
228
244
  File.delete(to_delete) if to_delete
229
245
  statements.each do |triple|
@@ -289,7 +305,7 @@ module OpenTox
289
305
  else
290
306
  type = types.first
291
307
  end
292
- @dataset.add_feature_metadata(feature,{OT.isA => type})
308
+ @dataset.add_feature_metadata(feature,{RDF.type => [type]})
293
309
  info += "\"#{@dataset.feature_name(feature)}\" detected as #{type.split('#').last}."
294
310
 
295
311
  # TODO: rewrite feature values
@@ -341,16 +357,23 @@ module OpenTox
341
357
  when OT.NominalFeature
342
358
  case value.to_s
343
359
  when TRUE_REGEXP
344
- @dataset.add(compound.uri, feature, true )
360
+ val = true
345
361
  when FALSE_REGEXP
346
- @dataset.add(compound.uri, feature, false )
362
+ val = false
347
363
  end
348
364
  when OT.NumericFeature
349
- @dataset.add compound.uri, feature, value.to_f
365
+ val = value.to_f
350
366
  when OT.StringFeature
351
- @dataset.add compound.uri, feature, value.to_s
367
+ val = value.to_s
352
368
  @activity_errors << smiles+", "+row.join(", ")
353
369
  end
370
+ if val!=nil
371
+ @dataset.add(compound.uri, feature, val)
372
+ if type!=OT.NumericFeature
373
+ @dataset.features[feature][OT.acceptValue] = [] unless @dataset.features[feature][OT.acceptValue]
374
+ @dataset.features[feature][OT.acceptValue] << val.to_s unless @dataset.features[feature][OT.acceptValue].include?(val.to_s)
375
+ end
376
+ end
354
377
  end
355
378
  end
356
379
 
@@ -98,6 +98,8 @@ module OpenTox
98
98
 
99
99
  rescue RestClient::RequestTimeout => ex
100
100
  received_error ex.message, 408, nil, {:rest_uri => uri, :headers => headers, :payload => payload}
101
+ rescue Errno::ETIMEDOUT => ex
102
+ received_error ex.message, 408, nil, {:rest_uri => uri, :headers => headers, :payload => payload}
101
103
  rescue Errno::ECONNREFUSED => ex
102
104
  received_error ex.message, 500, nil, {:rest_uri => uri, :headers => headers, :payload => payload}
103
105
  rescue RestClient::ExceptionWithResponse => ex
@@ -26,6 +26,8 @@ module OpenTox
26
26
  OT.Algorithm => { RDF["type"] => [{ "type" => "uri", "value" => OWL['Class'] }] } ,
27
27
  OT.Parameter => { RDF["type"] => [{ "type" => "uri", "value" => OWL['Class'] }] } ,
28
28
  OT.Task => { RDF["type"] => [{ "type" => "uri", "value" => OWL['Class'] }] } ,
29
+ OTA.PatternMiningSupervised => { RDF["type"] => [{ "type" => "uri", "value" => OWL['Class'] }] } ,
30
+
29
31
  #classes for validation
30
32
  OT.Validation => { RDF["type"] => [{ "type" => "uri", "value" => OWL['Class'] }] } ,
31
33
  OT.ClassificationStatistics => { RDF["type"] => [{ "type" => "uri", "value" => OWL['Class'] }] } ,
@@ -40,10 +42,10 @@ module OpenTox
40
42
  OT.compound => { RDF["type"] => [{ "type" => "uri", "value" => OWL.ObjectProperty }] } ,
41
43
  OT.feature => { RDF["type"] => [{ "type" => "uri", "value" => OWL.ObjectProperty }] } ,
42
44
  OT.dataEntry => { RDF["type"] => [{ "type" => "uri", "value" => OWL.ObjectProperty }] } ,
43
- OT.acceptValue => { RDF["type"] => [{ "type" => "uri", "value" => OWL.ObjectProperty }] } ,
44
45
  OT.values => { RDF["type"] => [{ "type" => "uri", "value" => OWL.ObjectProperty }] } ,
45
46
  OT.algorithm => { RDF["type"] => [{ "type" => "uri", "value" => OWL.ObjectProperty }] } ,
46
47
  OT.parameters => { RDF["type"] => [{ "type" => "uri", "value" => OWL.ObjectProperty }] } ,
48
+
47
49
  #object props for validation#
48
50
  OT.model => { RDF["type"] => [{ "type" => "uri", "value" => OWL.ObjectProperty }] } ,
49
51
  OT.trainingDataset => { RDF["type"] => [{ "type" => "uri", "value" => OWL.ObjectProperty }] } ,
@@ -67,12 +69,14 @@ module OpenTox
67
69
  DC.creator => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
68
70
  DC.description => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
69
71
  DC.date => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
70
- OT.isA => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
72
+ #OT.isA => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
71
73
  OT.Warnings => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
72
74
  XSD.anyURI => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
73
75
  OT.hasStatus => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
74
76
  OT.resultURI => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
75
77
  OT.percentageCompleted => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
78
+ OT.acceptValue => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
79
+
76
80
  # annotation props for validation
77
81
  OT.numUnpredicted => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
78
82
  OT.crossvalidationFold => { RDF["type"] => [{ "type" => "uri", "value" => OWL.AnnotationProperty }] } ,
@@ -256,7 +260,8 @@ module OpenTox
256
260
  def add_metadata(uri,metadata)
257
261
  id = 0
258
262
  metadata.each do |u,v|
259
- if v.is_a? Array and u == OT.parameters
263
+ #if v.is_a? Array and (u == OT.parameters or u == RDF.type)
264
+ if v.is_a? Array and u == OT.parameters#or u == RDF.type)
260
265
  @object[uri][u] = [] unless @object[uri][u]
261
266
  v.each do |value|
262
267
  id+=1
@@ -267,7 +272,13 @@ module OpenTox
267
272
  @object[genid][name] = [{"type" => type(entry), "value" => entry }]
268
273
  end
269
274
  end
270
- else # v.is_a? String
275
+ elsif v.is_a? Array and u == RDF.type
276
+ @object[uri] = {} unless @object[uri]
277
+ v.each do |value|
278
+ @object[uri][u] = [] unless @object[uri][u]
279
+ @object[uri][u] << {"type" => type(value), "value" => value }
280
+ end
281
+ elsif v.is_a? String
271
282
  @object[uri] = {} unless @object[uri]
272
283
  @object[uri][u] = [{"type" => type(v), "value" => v }]
273
284
  end
@@ -309,6 +320,7 @@ module OpenTox
309
320
  OT.value => v
310
321
  }
311
322
  @object[feature][RDF["type"]] << { "type" => "uri", "value" => featuretype(value) }
323
+ #@object[feature][RDF["type"]] = { "type" => "uri", "value" => featuretype(value) }
312
324
  end
313
325
 
314
326
  # Serializers
@@ -8,6 +8,7 @@ module OpenTox
8
8
 
9
9
  def initialize(uri=nil)
10
10
  super uri
11
+ @http_code = 202
11
12
  @metadata = {
12
13
  DC.title => "",
13
14
  DC.date => "",
@@ -154,6 +155,7 @@ module OpenTox
154
155
 
155
156
  # not stored just for to_rdf
156
157
  def add_error_report( error_report )
158
+ raise "not an error report: "+error_report.class.to_s unless error_report.is_a?(ErrorReport)
157
159
  @error_report = error_report
158
160
  end
159
161
 
@@ -12,6 +12,40 @@ module OpenTox
12
12
  val
13
13
  end
14
14
 
15
+ # returns a filtered list of validation uris
16
+ # @param [Hash,optional] params, validation-params to filter the uris (could be model, training_dataset, ..)
17
+ # @return [Array]
18
+ def self.list( params={} )
19
+ filter_string = ""
20
+ params.each do |k,v|
21
+ filter_string = "?" if filter_string.length==0
22
+ filter_string += k.to_s+"="+v
23
+ end
24
+ (OpenTox::RestClientWrapper.get(CONFIG[:services]["opentox-validation"]+filter_string).split("\n"))
25
+ end
26
+
27
+ # creates a training test split validation, waits until it finishes, may take some time
28
+ # @param [Hash] params (required:algorithm_uri,dataset_uri,prediction_feature, optional:algorithm_params,split_ratio(0.67),random_seed(1))
29
+ # @param [String,optional] subjectid
30
+ # @param [OpenTox::Task,optional] waiting_task (can be a OpenTox::Subtask as well), progress is updated accordingly
31
+ # @return [OpenTox::Validation]
32
+ def self.create_training_test_split( params, subjectid=nil, waiting_task=nil )
33
+ params[:subjectid] = subjectid if subjectid
34
+ uri = OpenTox::RestClientWrapper.post( File.join(CONFIG[:services]["opentox-validation"],"training_test_split"),
35
+ params,{:content_type => "text/uri-list"},waiting_task )
36
+ Validation.new(uri)
37
+ end
38
+
39
+ # looks for report for this validation, creates a report if no report is found
40
+ # @param [String,optional] subjectid
41
+ # @param [OpenTox::Task,optional] waiting_task (can be a OpenTox::Subtask as well), progress is updated accordingly
42
+ # @return [String] report uri
43
+ def find_or_create_report( subjectid=nil, waiting_task=nil )
44
+ @report = ValidationReport.find_for_validation(@uri, subjectid) unless @report
45
+ @report = ValidationReport.create(@uri, subjectid, waiting_task) unless @report
46
+ @report.uri
47
+ end
48
+
15
49
  # creates a validation object from crossvaldiation statistics, raise error if not found
16
50
  # (as crossvaldiation statistics are returned as an average valdidation over all folds)
17
51
  # @param [String] crossvalidation uri
@@ -42,7 +76,7 @@ module OpenTox
42
76
  res[:true_negatives] = s[OT.numTrueNegatives]
43
77
  res[:false_negatives] = s[OT.numFalseNegatives]
44
78
  res[:sensitivity] = s[OT.truePositiveRate]
45
- res[:specificity] = s[OT.falsePositiveRate]
79
+ res[:specificity] = s[OT.trueNegativeRate]
46
80
  break
47
81
  end
48
82
  end
@@ -72,6 +106,18 @@ module OpenTox
72
106
  cv.load_metadata( subjectid )
73
107
  cv
74
108
  end
109
+
110
+ # returns a filtered list of crossvalidation uris
111
+ # @param [Hash,optional] params, crossvalidation-params to filter the uris (could be algorithm, dataset, ..)
112
+ # @return [Array]
113
+ def self.list( params={} )
114
+ filter_string = ""
115
+ params.each do |k,v|
116
+ filter_string = "?" if filter_string.length==0
117
+ filter_string += k.to_s+"="+v
118
+ end
119
+ (OpenTox::RestClientWrapper.get(File.join(CONFIG[:services]["opentox-validation"],"crossvalidation")+filter_string).split("\n"))
120
+ end
75
121
 
76
122
  # creates a crossvalidations, waits until it finishes, may take some time
77
123
  # @param [Hash] params (required:algorithm_uri,dataset_uri,prediction_feature, optional:algorithm_params,num_folds(10),random_seed(1),stratified(false))
@@ -110,6 +156,17 @@ module OpenTox
110
156
  class ValidationReport
111
157
  include OpenTox
112
158
 
159
+ # finds ValidationReport via uri, raises error if not found
160
+ # @param [String] uri
161
+ # @param [String,optional] subjectid
162
+ # @return [OpenTox::ValidationReport]
163
+ def self.find( uri, subjectid=nil )
164
+ OpenTox::RestClientWrapper.get(uri,{:subjectid => subjectid})
165
+ rep = ValidationReport.new(uri)
166
+ rep.load_metadata( subjectid )
167
+ rep
168
+ end
169
+
113
170
  # finds ValidationReport for a particular validation
114
171
  # @param [String] crossvalidation uri
115
172
  # @param [String,optional] subjectid
@@ -120,6 +177,17 @@ module OpenTox
120
177
  uris.size==0 ? nil : ValidationReport.new(uris[-1])
121
178
  end
122
179
 
180
+ # creates a validation report via validation
181
+ # @param [String] validation uri
182
+ # @param [String,optional] subjectid
183
+ # @param [OpenTox::Task,optional] waiting_task (can be a OpenTox::Subtask as well), progress is updated accordingly
184
+ # @return [OpenTox::ValidationReport]
185
+ def self.create( validation_uri, subjectid=nil, waiting_task=nil )
186
+ uri = RestClientWrapper.post(File.join(CONFIG[:services]["opentox-validation"],"/report/validation"),
187
+ { :validation_uris => validation_uri, :subjectid => subjectid }, {}, waiting_task )
188
+ ValidationReport.new(uri)
189
+ end
190
+
123
191
  end
124
192
 
125
193
  class CrossvalidationReport
@@ -132,7 +200,9 @@ module OpenTox
132
200
  def self.find( uri, subjectid=nil )
133
201
  # PENDING load report data?
134
202
  OpenTox::RestClientWrapper.get(uri,{:subjectid => subjectid})
135
- CrossvalidationReport.new(uri)
203
+ rep = CrossvalidationReport.new(uri)
204
+ rep.load_metadata( subjectid )
205
+ rep
136
206
  end
137
207
 
138
208
  # finds CrossvalidationReport for a particular crossvalidation
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opentox-ruby
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 15
5
5
  prerelease:
6
6
  segments:
7
- - 1
8
- - 0
9
7
  - 2
10
- version: 1.0.2
8
+ - 0
9
+ - 0
10
+ version: 2.0.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Christoph Helma, Martin Guetlein, Andreas Maunz, Micha Rautenberg, David Vorgrimmler
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-03-16 00:00:00 +01:00
18
+ date: 2011-05-23 00:00:00 +02:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -257,7 +257,7 @@ dependencies:
257
257
  type: :runtime
258
258
  version_requirements: *id017
259
259
  - !ruby/object:Gem::Dependency
260
- name: SystemTimer
260
+ name: ohm-contrib
261
261
  prerelease: false
262
262
  requirement: &id018 !ruby/object:Gem::Requirement
263
263
  none: false
@@ -271,7 +271,7 @@ dependencies:
271
271
  type: :runtime
272
272
  version_requirements: *id018
273
273
  - !ruby/object:Gem::Dependency
274
- name: rjb
274
+ name: SystemTimer
275
275
  prerelease: false
276
276
  requirement: &id019 !ruby/object:Gem::Requirement
277
277
  none: false
@@ -285,9 +285,121 @@ dependencies:
285
285
  type: :runtime
286
286
  version_requirements: *id019
287
287
  - !ruby/object:Gem::Dependency
288
- name: haml
288
+ name: rjb
289
289
  prerelease: false
290
290
  requirement: &id020 !ruby/object:Gem::Requirement
291
+ none: false
292
+ requirements:
293
+ - - ">="
294
+ - !ruby/object:Gem::Version
295
+ hash: 3
296
+ segments:
297
+ - 0
298
+ version: "0"
299
+ type: :runtime
300
+ version_requirements: *id020
301
+ - !ruby/object:Gem::Dependency
302
+ name: dm-core
303
+ prerelease: false
304
+ requirement: &id021 !ruby/object:Gem::Requirement
305
+ none: false
306
+ requirements:
307
+ - - ">="
308
+ - !ruby/object:Gem::Version
309
+ hash: 3
310
+ segments:
311
+ - 0
312
+ version: "0"
313
+ type: :runtime
314
+ version_requirements: *id021
315
+ - !ruby/object:Gem::Dependency
316
+ name: dm-serializer
317
+ prerelease: false
318
+ requirement: &id022 !ruby/object:Gem::Requirement
319
+ none: false
320
+ requirements:
321
+ - - ">="
322
+ - !ruby/object:Gem::Version
323
+ hash: 3
324
+ segments:
325
+ - 0
326
+ version: "0"
327
+ type: :runtime
328
+ version_requirements: *id022
329
+ - !ruby/object:Gem::Dependency
330
+ name: dm-timestamps
331
+ prerelease: false
332
+ requirement: &id023 !ruby/object:Gem::Requirement
333
+ none: false
334
+ requirements:
335
+ - - ">="
336
+ - !ruby/object:Gem::Version
337
+ hash: 3
338
+ segments:
339
+ - 0
340
+ version: "0"
341
+ type: :runtime
342
+ version_requirements: *id023
343
+ - !ruby/object:Gem::Dependency
344
+ name: dm-types
345
+ prerelease: false
346
+ requirement: &id024 !ruby/object:Gem::Requirement
347
+ none: false
348
+ requirements:
349
+ - - ">="
350
+ - !ruby/object:Gem::Version
351
+ hash: 3
352
+ segments:
353
+ - 0
354
+ version: "0"
355
+ type: :runtime
356
+ version_requirements: *id024
357
+ - !ruby/object:Gem::Dependency
358
+ name: dm-migrations
359
+ prerelease: false
360
+ requirement: &id025 !ruby/object:Gem::Requirement
361
+ none: false
362
+ requirements:
363
+ - - ">="
364
+ - !ruby/object:Gem::Version
365
+ hash: 3
366
+ segments:
367
+ - 0
368
+ version: "0"
369
+ type: :runtime
370
+ version_requirements: *id025
371
+ - !ruby/object:Gem::Dependency
372
+ name: dm-validations
373
+ prerelease: false
374
+ requirement: &id026 !ruby/object:Gem::Requirement
375
+ none: false
376
+ requirements:
377
+ - - ">="
378
+ - !ruby/object:Gem::Version
379
+ hash: 3
380
+ segments:
381
+ - 0
382
+ version: "0"
383
+ type: :runtime
384
+ version_requirements: *id026
385
+ - !ruby/object:Gem::Dependency
386
+ name: dm-sqlite-adapter
387
+ prerelease: false
388
+ requirement: &id027 !ruby/object:Gem::Requirement
389
+ none: false
390
+ requirements:
391
+ - - ">="
392
+ - !ruby/object:Gem::Version
393
+ hash: 3
394
+ segments:
395
+ - 0
396
+ version: "0"
397
+ type: :runtime
398
+ version_requirements: *id027
399
+ - !ruby/object:Gem::Dependency
400
+ name: haml
401
+ prerelease: false
402
+ requirement: &id028 !ruby/object:Gem::Requirement
291
403
  none: false
292
404
  requirements:
293
405
  - - ">="
@@ -297,11 +409,27 @@ dependencies:
297
409
  - 3
298
410
  version: "3"
299
411
  type: :runtime
300
- version_requirements: *id020
412
+ version_requirements: *id028
413
+ - !ruby/object:Gem::Dependency
414
+ name: ruby-plot
415
+ prerelease: false
416
+ requirement: &id029 !ruby/object:Gem::Requirement
417
+ none: false
418
+ requirements:
419
+ - - ~>
420
+ - !ruby/object:Gem::Version
421
+ hash: 15
422
+ segments:
423
+ - 0
424
+ - 4
425
+ - 0
426
+ version: 0.4.0
427
+ type: :runtime
428
+ version_requirements: *id029
301
429
  - !ruby/object:Gem::Dependency
302
430
  name: jeweler
303
431
  prerelease: false
304
- requirement: &id021 !ruby/object:Gem::Requirement
432
+ requirement: &id030 !ruby/object:Gem::Requirement
305
433
  none: false
306
434
  requirements:
307
435
  - - ">="
@@ -311,7 +439,7 @@ dependencies:
311
439
  - 0
312
440
  version: "0"
313
441
  type: :development
314
- version_requirements: *id021
442
+ version_requirements: *id030
315
443
  description: Ruby wrapper for the OpenTox REST API (http://www.opentox.org)
316
444
  email: helma@in-silico.ch
317
445
  executables:
@@ -339,7 +467,7 @@ files:
339
467
  - lib/feature.rb
340
468
  - lib/helper.rb
341
469
  - lib/model.rb
342
- - lib/ontology_service.rb
470
+ - lib/ontology.rb
343
471
  - lib/opentox-ruby.rb
344
472
  - lib/opentox.owl
345
473
  - lib/opentox.rb
@@ -350,7 +478,6 @@ files:
350
478
  - lib/serializer.rb
351
479
  - lib/spork.rb
352
480
  - lib/task.rb
353
- - lib/templates/config.yaml
354
481
  - lib/templates/default_guest_policy.xml
355
482
  - lib/templates/default_policy.xml
356
483
  - lib/to-html.rb
@@ -385,7 +512,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
385
512
  requirements: []
386
513
 
387
514
  rubyforge_project:
388
- rubygems_version: 1.4.2
515
+ rubygems_version: 1.5.2
389
516
  signing_key:
390
517
  specification_version: 3
391
518
  summary: Ruby wrapper for the OpenTox REST API
@@ -1,86 +0,0 @@
1
- # Example configuration for OpenTox, please adjust to your settings
2
- #
3
- # Database setup:
4
- #
5
- # Example MySql:
6
- #
7
- :database:
8
- :adapter: mysql
9
- :database: production
10
- :username: root
11
- :password: opentox
12
- :host: localhost
13
- #
14
- # Example 1: Using external test services
15
- #
16
- # :services:
17
- # opentox-compound: "http://webservices.in-silico.ch/compound/"
18
- # opentox-dataset: "http://webservices.in-silico.ch/dataset/"
19
- # opentox-algorithm: "http://webservices.in-silico.ch/algorithm/"
20
- # opentox-model: "http://webservices.in-silico.ch/model/"
21
- # opentox-task: "http://webservices.in-silico.ch/task/"
22
- # opentox-validation: "http://opentox.informatik.uni-freiburg.de/validation/"
23
- #
24
- # Example 2: Using local services
25
- :base_dir: /home/ist/webservices
26
- :webserver: passenger
27
- :services:
28
- opentox-compound: "http://localhost/compound/"
29
- opentox-dataset: "http://localhost/dataset/"
30
- opentox-algorithm: "http://localhost/algorithm/"
31
- opentox-model: "http://localhost/model/"
32
- opentox-task: "http://localhost/task/"
33
- opentox-validation: "http://localhost/validation/"
34
- #
35
- # Yaml capable hosts (faster than OWL-DL)
36
- #
37
- :yaml_hosts:
38
- - "localhost"
39
-
40
- # Uncomment for verbose logging
41
- # :logger: debug
42
- # :backtrace: 1
43
-
44
-
45
- # OpenSSO Authorization
46
- # set ":server: " to disable A&A
47
- :authorization:
48
- :server: "https://opensso.in-silico.ch"
49
- :free_request: #request-method not controlled by A&A
50
- - "GET"
51
- :authenticate_request: #only for authenticated user
52
- - "POST"
53
- :authorize_request: #only for authenticated and authorizeduser
54
- - "DELETE"
55
- - "PUT"
56
- # Exceptions:
57
- :free_uris: #request-method for uri not controlled by A&A
58
- ? - :GET
59
- : - !ruby/regexp /localhost\/algorithm/
60
- - "http://localhost/dataset"
61
- - "http://localhost/model"
62
- - "http://localhost/validation"
63
- - "http://localhost/validation/crossvalidation"
64
- - "http://localhost/validation/reach_report"
65
- - "http://localhost/validation/reach_report/crossvalidation"
66
- - "http://localhost/validation/report"
67
- - "http://localhost/validation/report/crossvalidation"
68
- - "http://localhost/validation/reach_report/qmrf"
69
- ? - :GET
70
- - :POST
71
- : - !ruby/regexp /localhost\/toxcreate/
72
- - !ruby/regexp /localhost\/task/
73
- - !ruby/regexp /localhost\/compound/
74
- ? - :PUT
75
- : - !ruby/regexp /localhost\/task/
76
-
77
- :authorize_exceptions: #request-method for uri only authenticated, no authorization
78
- ? - :POST
79
- : - !ruby/regexp /localhost\/algorithm/
80
- - "http://localhost/dataset"
81
- - "http://localhost/model"
82
- - "http://localhost/validation"
83
- - !ruby/regexp /localhost\/validation\/[a-z,A-Z,\/,_\-]*$/
84
-
85
-
86
-