summaryrefslogtreecommitdiff
path: root/lazar.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lazar.rb')
-rw-r--r--lazar.rb118
1 files changed, 50 insertions, 68 deletions
diff --git a/lazar.rb b/lazar.rb
index 30c0be4..2f3b126 100644
--- a/lazar.rb
+++ b/lazar.rb
@@ -1,72 +1,52 @@
require "haml"
-helpers do
- def uri_available?(urlStr)
- url = URI.parse(urlStr)
- unless @subjectid
- Net::HTTP.start(url.host, url.port) do |http|
- return http.head(url.request_uri).code == "200"
- end
- else
- Net::HTTP.start(url.host, url.port) do |http|
- return http.post(url.request_uri, "subjectid=#{@subjectid}").code == "202"
- end
- end
- end
-end
-
# Get model representation
# @return [application/rdf+xml,application/x-yaml] Model representation
get '/:id/?' do
- accept = request.env['HTTP_ACCEPT']
- accept = "application/rdf+xml" if accept == '*/*' or accept == '' or accept.nil?
- # workaround for browser links
- case params[:id]
- when /.yaml$/
- params[:id].sub!(/.yaml$/,'')
- accept = 'application/x-yaml'
- when /.rdf$/
- params[:id].sub!(/.rdf$/,'')
- accept = 'application/rdf+xml'
- end
- halt 404, "Model #{params[:id]} not found." unless model = ModelStore.get(params[:id])
- lazar = YAML.load model.yaml
- case accept
- when /application\/rdf\+xml/
+=begin
+ accept = request.env['HTTP_ACCEPT']
+ accept = "application/rdf+xml" if accept == '*/*' or accept == '' or accept.nil?
+ # workaround for browser links
+ case params[:id]
+ when /.yaml$/
+ params[:id].sub!(/.yaml$/,'')
+ accept = 'application/x-yaml'
+ when /.rdf$/
+ params[:id].sub!(/.rdf$/,'')
+ accept = 'application/rdf+xml'
+ end
+=end
+ halt 404, "Model #{params[:id]} not found." unless File.exists? @yaml_file
+ response['Content-Type'] = @accept
+ case @accept
+ when /application\/rdf\+xml/
s = OpenTox::Serializer::Owl.new
- s.add_model(model.uri,lazar.metadata)
+ s.add_model(@uri,YAML.load_file(@yaml_file).metadata)
response['Content-Type'] = 'application/rdf+xml'
s.to_rdfxml
- when /yaml/
- response['Content-Type'] = 'application/x-yaml'
- model.yaml
- else
- halt 400, "Unsupported MIME type '#{accept}'"
- end
+ when /yaml/
+ response['Content-Type'] = 'application/x-yaml'
+ File.read @yaml_file
+ when /html/
+ response['Content-Type'] = 'text/html'
+ OpenTox.text_to_html File.read(@yaml_file)
+ else
+ halt 400, "Unsupported MIME type '#{@accept}'"
+ end
end
get '/:id/metadata.?:ext?' do
- metadata = YAML.load(ModelStore.get(params[:id]).yaml).metadata
+ metadata = YAML.load_file(@yaml_file).metadata
- accept = request.env['HTTP_ACCEPT']
- accept = "application/rdf+xml" if accept == '*/*' or accept == '' or accept.nil?
- if params[:ext]
- case params[:ext]
- when "yaml"
- accept = 'application/x-yaml'
- when "rdf", "rdfxml"
- accept = 'application/rdf+xml'
- end
- end
- response['Content-Type'] = accept
- case accept
+ response['Content-Type'] = @accept
+ case @accept
when /yaml/
metadata.to_yaml
else #when /rdf/ and anything else
serializer = OpenTox::Serializer::Owl.new
- serializer.add_metadata url_for("/#{params[:id]}",:full), metadata
+ serializer.add_metadata @uri, metadata
serializer.to_rdfxml
end
@@ -77,14 +57,17 @@ end
# @return [String] Model URI
post '/?' do # create model
halt 400, "MIME type \"#{request.content_type}\" not supported." unless request.content_type.match(/yaml/)
- model = ModelStore.create
- model.subjectid = @subjectid
- model.uri = url_for("/#{model.id}", :full)
- lazar = YAML.load request.env["rack.input"].read
- lazar.uri = model.uri
- model.yaml = lazar.to_yaml
- model.save
- model.uri
+ #model = ModelStore.create
+ #model.subjectid = @subjectid
+ #model.uri = url_for("/#{model.id}", :full)
+ @id = next_id
+ @uri = uri @id
+ @yaml_file = "public/#{@id}.yaml"
+ lazar = YAML.load request.env["rack.input"].read
+ lazar.uri = @uri
+ File.open(@yaml_file,"w+"){|f| f.puts lazar.to_yaml}
+ response['Content-Type'] = 'text/uri-list'
+ @uri
end
# Make a lazar prediction. Predicts either a single compound or all compounds from a dataset
@@ -94,15 +77,14 @@ end
# @return [text/uri-list] URI of prediction task (dataset prediction) or prediction dataset (compound prediction)
post '/:id/?' do
- puts params.to_yaml
- @lazar = YAML.load ModelStore.get(params[:id]).yaml
+ halt 404, "Model #{params[:id]} does not exist." unless File.exists? @yaml_file
- halt 404, "Model #{params[:id]} does not exist." unless @lazar
- halt 404, "No compound_uri or dataset_uri parameter." unless compound_uri = params[:compound_uri] or dataset_uri = params[:dataset_uri]
+ halt 404, "No compound_uri or dataset_uri parameter." unless compound_uri = params[:compound_uri] or dataset_uri = params[:dataset_uri]
+ @lazar = YAML.load_file @yaml_file
response['Content-Type'] = 'text/uri-list'
- if compound_uri
+ if compound_uri
cache = PredictionCache.first(:model_uri => @lazar.uri, :compound_uri => compound_uri)
return cache.dataset_uri if cache and uri_available?(cache.dataset_uri)
begin
@@ -113,12 +95,12 @@ post '/:id/?' do
LOGGER.error "Lazar prediction failed for #{compound_uri} with #{$!} "
halt 500, "Prediction of #{compound_uri} with #{@lazar.uri} failed."
end
- elsif dataset_uri
- task = OpenTox::Task.create("Predict dataset",url_for("/#{@lazar.id}", :full)) do |task|
+ elsif dataset_uri
+ task = OpenTox::Task.create("Predict dataset",url_for("/#{@lazar.id}", :full)) do |task|
@lazar.predict_dataset(dataset_uri, @subjectid, task).uri
- end
+ end
halt 503,task.uri+"\n" if task.status == "Cancelled"
halt 202,task.uri
- end
+ end
end