opentox-ruby 1.0.2 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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
-