openbel-api 0.4.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gemspec +65 -0
- data/CHANGELOG.md +22 -0
- data/INSTALL.md +19 -0
- data/INSTALL_RUBY.md +107 -0
- data/LICENSE +191 -0
- data/README.md +208 -0
- data/app/openbel/api/app.rb +83 -0
- data/app/openbel/api/config.rb +45 -0
- data/app/openbel/api/config.ru +3 -0
- data/app/openbel/api/helpers/pager.rb +109 -0
- data/app/openbel/api/middleware/auth.rb +112 -0
- data/app/openbel/api/resources/adapters/basic_json.rb +52 -0
- data/app/openbel/api/resources/annotation.rb +141 -0
- data/app/openbel/api/resources/base.rb +16 -0
- data/app/openbel/api/resources/completion.rb +89 -0
- data/app/openbel/api/resources/evidence.rb +115 -0
- data/app/openbel/api/resources/evidence_transform.rb +143 -0
- data/app/openbel/api/resources/function.rb +98 -0
- data/app/openbel/api/resources/match_result.rb +79 -0
- data/app/openbel/api/resources/namespace.rb +174 -0
- data/app/openbel/api/routes/annotations.rb +168 -0
- data/app/openbel/api/routes/authenticate.rb +108 -0
- data/app/openbel/api/routes/base.rb +326 -0
- data/app/openbel/api/routes/datasets.rb +519 -0
- data/app/openbel/api/routes/evidence.rb +330 -0
- data/app/openbel/api/routes/expressions.rb +560 -0
- data/app/openbel/api/routes/functions.rb +41 -0
- data/app/openbel/api/routes/namespaces.rb +382 -0
- data/app/openbel/api/routes/root.rb +39 -0
- data/app/openbel/api/schemas.rb +34 -0
- data/app/openbel/api/schemas/annotation_collection.schema.json +20 -0
- data/app/openbel/api/schemas/annotation_resource.schema.json +36 -0
- data/app/openbel/api/schemas/annotation_value_collection.schema.json +21 -0
- data/app/openbel/api/schemas/annotation_value_resource.schema.json +35 -0
- data/app/openbel/api/schemas/completion_collection.schema.json +21 -0
- data/app/openbel/api/schemas/completion_resource.schema.json +146 -0
- data/app/openbel/api/schemas/evidence.schema.json +198 -0
- data/app/openbel/api/schemas/evidence_collection.schema.json +98 -0
- data/app/openbel/api/schemas/evidence_resource.schema.json +29 -0
- data/app/openbel/api/schemas/namespace_value_collection.schema.json +21 -0
- data/app/openbel/api/schemas/namespace_value_resource.schema.json +43 -0
- data/app/openbel/api/util.rb +11 -0
- data/bin/openbel-api +78 -0
- data/bin/openbel-config +46 -0
- data/config/async_evidence.rb +12 -0
- data/config/async_jena.rb +14 -0
- data/config/config.yml +31 -0
- data/config/server_config.rb +184 -0
- data/lib/openbel/api/cache/cache.rb +30 -0
- data/lib/openbel/api/config/config.rb +33 -0
- data/lib/openbel/api/evidence/api.rb +39 -0
- data/lib/openbel/api/evidence/facet_api.rb +18 -0
- data/lib/openbel/api/evidence/facet_filter.rb +83 -0
- data/lib/openbel/api/evidence/mongo.rb +247 -0
- data/lib/openbel/api/evidence/mongo_facet.rb +105 -0
- data/lib/openbel/api/helpers/dependency_graph.rb +52 -0
- data/lib/openbel/api/model/rdf_resource.rb +74 -0
- data/lib/openbel/api/plugin/cache/kyotocabinet.rb +85 -0
- data/lib/openbel/api/plugin/configure_plugins.rb +97 -0
- data/lib/openbel/api/plugin/evidence/evidence.rb +58 -0
- data/lib/openbel/api/plugin/plugin.rb +99 -0
- data/lib/openbel/api/plugin/plugin_manager.rb +20 -0
- data/lib/openbel/api/plugin/plugin_repository.rb +60 -0
- data/lib/openbel/api/storage/cache_proxy.rb +74 -0
- data/lib/openbel/api/storage/triple_storage.rb +43 -0
- metadata +379 -0
@@ -0,0 +1,89 @@
|
|
1
|
+
require_relative 'base'
|
2
|
+
|
3
|
+
module OpenBEL
|
4
|
+
module Resource
|
5
|
+
module Expressions
|
6
|
+
|
7
|
+
class CompletionSerializer < BaseSerializer
|
8
|
+
adapter Oat::Adapters::HAL
|
9
|
+
schema do
|
10
|
+
type :completion
|
11
|
+
property :type, item[:type]
|
12
|
+
property :label, item[:label]
|
13
|
+
property :value, item[:value]
|
14
|
+
property :highlight, item[:highlight]
|
15
|
+
property :actions, item[:actions]
|
16
|
+
property :id, item[:id]
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class CompletionResourceSerializer < BaseSerializer
|
21
|
+
adapter Oat::Adapters::HAL
|
22
|
+
schema do
|
23
|
+
type :completion
|
24
|
+
properties do |p|
|
25
|
+
p.completion item
|
26
|
+
end
|
27
|
+
|
28
|
+
link :self, link_self(item[:id])
|
29
|
+
link :describedby, link_described_by(item[:type], item[:id])
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def link_self(id)
|
35
|
+
{
|
36
|
+
:type => 'completion',
|
37
|
+
:href => "#{base_url}/api/expressions/#{id}/completions"
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
def link_described_by(type, id)
|
42
|
+
case type
|
43
|
+
when :function
|
44
|
+
{
|
45
|
+
:type => 'function',
|
46
|
+
:href => "#{base_url}/api/functions/#{id}"
|
47
|
+
}
|
48
|
+
when :namespace_prefix
|
49
|
+
{
|
50
|
+
:type => 'namespace_prefix',
|
51
|
+
:href => "#{base_url}/api/namespaces/#{id}"
|
52
|
+
}
|
53
|
+
when :namespace_value
|
54
|
+
{
|
55
|
+
:type => 'namespace_value',
|
56
|
+
:href => "#{base_url}/api/namespaces/hgnc/#{id}"
|
57
|
+
}
|
58
|
+
else
|
59
|
+
raise NotImplementedError.new("Unexpected resource type, #{type}")
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
class CompletionCollectionSerializer < BaseSerializer
|
65
|
+
adapter Oat::Adapters::HAL
|
66
|
+
|
67
|
+
schema do
|
68
|
+
type :completion_collection
|
69
|
+
properties do |p|
|
70
|
+
p.completion_collection item
|
71
|
+
end
|
72
|
+
|
73
|
+
link :self, link_self
|
74
|
+
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
def link_self
|
79
|
+
bel = context[:bel]
|
80
|
+
caret_position = context[:caret_position]
|
81
|
+
{
|
82
|
+
:type => :completion_collection,
|
83
|
+
:href => "#{base_url}/api/expressions/#{bel}/completions?caret_position=#{caret_position}"
|
84
|
+
}
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
require 'bel'
|
2
|
+
require_relative 'base'
|
3
|
+
|
4
|
+
module OpenBEL
|
5
|
+
module Resource
|
6
|
+
module Evidence
|
7
|
+
|
8
|
+
class EvidenceSerializer < BaseSerializer
|
9
|
+
adapter Oat::Adapters::HAL
|
10
|
+
|
11
|
+
schema do
|
12
|
+
type :evidence
|
13
|
+
property :bel_statement, item['bel_statement']
|
14
|
+
property :citation, item['citation']
|
15
|
+
property :summary_text, item['summary_text']
|
16
|
+
property :experiment_context, item['experiment_context']
|
17
|
+
property :metadata, item['metadata']
|
18
|
+
property :id, item['_id']
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class EvidenceResourceSerializer < BaseSerializer
|
23
|
+
adapter Oat::Adapters::HAL
|
24
|
+
|
25
|
+
schema do
|
26
|
+
type :evidence
|
27
|
+
properties do |p|
|
28
|
+
p.evidence item
|
29
|
+
end
|
30
|
+
|
31
|
+
link :self, link_self
|
32
|
+
link :collection, link_collection
|
33
|
+
end
|
34
|
+
|
35
|
+
private
|
36
|
+
|
37
|
+
def link_self
|
38
|
+
id = item[:id] || context[:_id]
|
39
|
+
item.delete(:id)
|
40
|
+
{
|
41
|
+
:type => :evidence,
|
42
|
+
:href => "#{base_url}/api/evidence/#{id}"
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
def link_collection
|
47
|
+
{
|
48
|
+
:type => :evidence_collection,
|
49
|
+
:href => "#{base_url}/api/evidence"
|
50
|
+
}
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
class EvidenceCollectionSerializer < BaseSerializer
|
55
|
+
adapter Oat::Adapters::HAL
|
56
|
+
|
57
|
+
schema do
|
58
|
+
type :evidence_collection
|
59
|
+
property :evidence_collection, item
|
60
|
+
property :facets, context[:facets]
|
61
|
+
property :metadata, context[:metadata]
|
62
|
+
link :self, link_self
|
63
|
+
link :start, link_start
|
64
|
+
link :previous, link_previous
|
65
|
+
link :next, link_next
|
66
|
+
end
|
67
|
+
|
68
|
+
private
|
69
|
+
|
70
|
+
def link_self
|
71
|
+
start = context[:start]
|
72
|
+
size = context[:size]
|
73
|
+
{
|
74
|
+
:type => :evidence_collection,
|
75
|
+
:href => "#{base_url}/api/evidence?start=#{start}&size=#{size}&#{filter_query_params.join('&')}"
|
76
|
+
}
|
77
|
+
end
|
78
|
+
|
79
|
+
def link_start
|
80
|
+
size = context[:size]
|
81
|
+
{
|
82
|
+
:type => :evidence_collection,
|
83
|
+
:href => "#{base_url}/api/evidence?start=0&size=#{size}&#{filter_query_params.join('&')}"
|
84
|
+
}
|
85
|
+
end
|
86
|
+
|
87
|
+
def link_previous
|
88
|
+
previous_page = context[:previous_page]
|
89
|
+
return {} unless previous_page
|
90
|
+
|
91
|
+
{
|
92
|
+
:type => :evidence_collection,
|
93
|
+
:href => "#{base_url}/api/evidence?start=#{previous_page.start_offset}&size=#{previous_page.page_size}&#{filter_query_params.join('&')}"
|
94
|
+
}
|
95
|
+
end
|
96
|
+
|
97
|
+
def link_next
|
98
|
+
next_page = context[:next_page]
|
99
|
+
return {} unless next_page
|
100
|
+
|
101
|
+
{
|
102
|
+
:type => :evidence_collection,
|
103
|
+
:href => "#{base_url}/api/evidence?start=#{next_page.start_offset}&size=#{next_page.page_size}&#{filter_query_params.join('&')}"
|
104
|
+
}
|
105
|
+
end
|
106
|
+
|
107
|
+
def filter_query_params
|
108
|
+
context[:filters].map { |filter|
|
109
|
+
"filter=#{filter}"
|
110
|
+
}
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
@@ -0,0 +1,143 @@
|
|
1
|
+
require 'bel'
|
2
|
+
|
3
|
+
module OpenBEL
|
4
|
+
module Resource
|
5
|
+
module Evidence
|
6
|
+
|
7
|
+
class AnnotationTransform
|
8
|
+
|
9
|
+
SERVER_PATTERN = %r{/api/annotations/([^/]*)/values/([^/]*)/?}
|
10
|
+
RDFURI_PATTERN = %r{/bel/namespace/([^/]*)/([^/]*)/?}
|
11
|
+
URI_PATTERNS = [
|
12
|
+
%r{/api/annotations/([^/]*)/values/([^/]*)/?},
|
13
|
+
%r{/bel/namespace/([^/]*)/([^/]*)/?}
|
14
|
+
]
|
15
|
+
ANNOTATION_VALUE_URI = "%s/api/annotations/%s/values/%s"
|
16
|
+
|
17
|
+
def initialize(annotations)
|
18
|
+
@annotations = annotations
|
19
|
+
end
|
20
|
+
|
21
|
+
def transform_evidence!(evidence, base_url)
|
22
|
+
if evidence
|
23
|
+
experiment_context = evidence.experiment_context
|
24
|
+
if experiment_context != nil
|
25
|
+
experiment_context.values.map! { |annotation|
|
26
|
+
transform_annotation(annotation, base_url)
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def transform_annotation(annotation, base_url)
|
33
|
+
if annotation[:uri]
|
34
|
+
transformed = transform_uri(annotation[:uri], base_url)
|
35
|
+
return transformed if transformed != nil
|
36
|
+
end
|
37
|
+
|
38
|
+
if annotation[:name] && annotation[:value]
|
39
|
+
name = annotation[:name]
|
40
|
+
value = annotation[:value]
|
41
|
+
transform_name_value(name, value, base_url)
|
42
|
+
elsif annotation.respond_to?(:each)
|
43
|
+
name = annotation[0]
|
44
|
+
value = annotation[1]
|
45
|
+
transform_name_value(name, value, base_url)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def transform_uri(uri, base_url)
|
52
|
+
URI_PATTERNS.map { |pattern|
|
53
|
+
match = pattern.match(uri)
|
54
|
+
match ? transform_name_value(match[1], match[2], base_url) : nil
|
55
|
+
}.compact.first
|
56
|
+
end
|
57
|
+
|
58
|
+
def transform_name_value(name, value, base_url)
|
59
|
+
structured_annotation(name, value, base_url) || free_annotation(name, value)
|
60
|
+
end
|
61
|
+
|
62
|
+
def structured_annotation(name, value, base_url)
|
63
|
+
annotation = @annotations.find(name).first
|
64
|
+
if annotation
|
65
|
+
if value.respond_to?(:each)
|
66
|
+
{
|
67
|
+
:name => annotation.prefLabel.to_s,
|
68
|
+
:value => value.map { |v|
|
69
|
+
mapped = annotation.find(v).first
|
70
|
+
mapped ? mapped.prefLabel.to_s : v
|
71
|
+
}
|
72
|
+
}
|
73
|
+
else
|
74
|
+
annotation_value = annotation.find(value).first
|
75
|
+
if annotation_value
|
76
|
+
{
|
77
|
+
:name => annotation.prefLabel.to_s,
|
78
|
+
:value => annotation_value.prefLabel.to_s,
|
79
|
+
:uri => ANNOTATION_VALUE_URI % [
|
80
|
+
base_url,
|
81
|
+
annotation.prefix.to_s,
|
82
|
+
annotation_value.identifier.to_s
|
83
|
+
]
|
84
|
+
}
|
85
|
+
else
|
86
|
+
{
|
87
|
+
:name => annotation.prefLabel.to_s,
|
88
|
+
:value => value
|
89
|
+
}
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def free_annotation(name, value)
|
96
|
+
{
|
97
|
+
:name => normalize_annotation_name(name),
|
98
|
+
:value => value
|
99
|
+
}
|
100
|
+
end
|
101
|
+
|
102
|
+
def normalize_annotation_name(name, options = {})
|
103
|
+
name_s = name.to_s
|
104
|
+
|
105
|
+
if name_s.empty?
|
106
|
+
nil
|
107
|
+
else
|
108
|
+
name_s.
|
109
|
+
split(%r{[^a-zA-Z0-9]+}).
|
110
|
+
map! { |word| word.capitalize }.
|
111
|
+
join
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
class AnnotationGroupingTransform
|
117
|
+
|
118
|
+
ExperimentContext = ::BEL::Model::ExperimentContext
|
119
|
+
|
120
|
+
def transform_evidence!(evidence)
|
121
|
+
experiment_context = evidence.experiment_context
|
122
|
+
if experiment_context != nil
|
123
|
+
evidence.experiment_context = ExperimentContext.new(
|
124
|
+
experiment_context.group_by { |annotation|
|
125
|
+
annotation[:name]
|
126
|
+
}.values.map do |grouped_annotation|
|
127
|
+
{
|
128
|
+
:name => grouped_annotation.first[:name],
|
129
|
+
:value => grouped_annotation.flat_map { |annotation|
|
130
|
+
annotation[:value]
|
131
|
+
},
|
132
|
+
:uri => grouped_annotation.flat_map { |annotation|
|
133
|
+
annotation[:uri]
|
134
|
+
}
|
135
|
+
}
|
136
|
+
end
|
137
|
+
)
|
138
|
+
end
|
139
|
+
end
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
end
|
@@ -0,0 +1,98 @@
|
|
1
|
+
require 'bel'
|
2
|
+
require_relative 'base'
|
3
|
+
|
4
|
+
module OpenBEL
|
5
|
+
module Resource
|
6
|
+
module Functions
|
7
|
+
|
8
|
+
class FunctionSerializer < BaseSerializer
|
9
|
+
adapter Oat::Adapters::HAL
|
10
|
+
|
11
|
+
schema do
|
12
|
+
type :function
|
13
|
+
properties do |p|
|
14
|
+
p.short_form item[:short_form]
|
15
|
+
p.long_form item[:long_form]
|
16
|
+
p.description item[:description]
|
17
|
+
p.return_type item[:return_type]
|
18
|
+
p.signatures item[:signatures]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
class FunctionResourceSerializer < BaseSerializer
|
24
|
+
adapter Oat::Adapters::HAL
|
25
|
+
|
26
|
+
schema do
|
27
|
+
type :function
|
28
|
+
properties do |p|
|
29
|
+
p.functions item
|
30
|
+
end
|
31
|
+
|
32
|
+
link :self, link_self(item.first[:short_form])
|
33
|
+
link :next, link_next
|
34
|
+
link :collection, link_collection
|
35
|
+
end
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def link_self(id)
|
40
|
+
{
|
41
|
+
:type => :function,
|
42
|
+
:href => "#{base_url}/api/functions/#{id}"
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
def link_collection
|
47
|
+
{
|
48
|
+
:type => :'function_collection',
|
49
|
+
:href => "#{base_url}/api/functions"
|
50
|
+
}
|
51
|
+
end
|
52
|
+
|
53
|
+
def link_next
|
54
|
+
fx_values = FUNCTIONS.values.uniq.sort_by { |fx|
|
55
|
+
fx[:short_form]
|
56
|
+
}
|
57
|
+
next_fx = fx_values[fx_values.index(item) + 1]
|
58
|
+
{
|
59
|
+
:type => :function,
|
60
|
+
:href => next_fx ?
|
61
|
+
"#{base_url}/api/functions/#{next_fx[:short_form]}" :
|
62
|
+
nil
|
63
|
+
}
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
class FunctionCollectionSerializer < BaseSerializer
|
68
|
+
adapter Oat::Adapters::HAL
|
69
|
+
|
70
|
+
schema do
|
71
|
+
type :'function_collection'
|
72
|
+
properties do |p|
|
73
|
+
p.functions item
|
74
|
+
end
|
75
|
+
|
76
|
+
link :self, link_self
|
77
|
+
link :start, link_start(item.first[:short_form])
|
78
|
+
end
|
79
|
+
|
80
|
+
private
|
81
|
+
|
82
|
+
def link_self
|
83
|
+
{
|
84
|
+
:type => :'function_collection',
|
85
|
+
:href => "#{base_url}/api/functions"
|
86
|
+
}
|
87
|
+
end
|
88
|
+
|
89
|
+
def link_start(first_function)
|
90
|
+
{
|
91
|
+
:type => :function,
|
92
|
+
:href => "#{base_url}/api/functions/#{first_function}"
|
93
|
+
}
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
98
|
+
end
|