gn_list_resolver 3.0.1 → 3.0.1.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +6 -3
- data/gn_list_resolver.gemspec +1 -1
- data/lib/gn_list_resolver.rb +7 -12
- data/lib/gn_list_resolver/constants.rb +10 -0
- data/lib/gn_list_resolver/graphql.rb +29 -0
- data/lib/gn_list_resolver/resolver.rb +13 -30
- data/lib/gn_list_resolver/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7c042e74b667b59e965c894c4e86c6b743e31a89
|
4
|
+
data.tar.gz: ef827961489aa0512591fdf5a23e3ecb9ac8e07f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3351e75cc0f45bed0d9924c0c970628bfb843d4c16e123d16d26a7609584069ac81ff80661c7e89aa3a1603150288e83e96ad8f34d6d995f1bbb5db1d3f19293
|
7
|
+
data.tar.gz: 44d14f9feeafd840d0de88fc0a6ca5a5af98daee2740d5799fc0d932431918f75090243c473198b01932246c079cd58818097fe343d0c24bc032dfff24ab3493
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -63,6 +63,12 @@ cat my_list.csv | crossmap -i my_list.csv -s
|
|
63
63
|
|
64
64
|
### Usage as Ruby Library (API description)
|
65
65
|
|
66
|
+
#### Changing default url for gnindex API
|
67
|
+
|
68
|
+
Default URL for API is `http://index-api.globalnames.org/api/graphql`
|
69
|
+
|
70
|
+
if you want to change it, set an environment variable `GN_RESOLVER_URL`
|
71
|
+
|
66
72
|
#### `GnListResolver.run`
|
67
73
|
|
68
74
|
Compares an input list to a data source from [GN Resolver][resolver] and
|
@@ -94,9 +100,6 @@ from original data. Otherwise all original data is preserved. If there is no
|
|
94
100
|
: (array) empty array by default. If `alt_headers` are not empty they are used
|
95
101
|
instead of the headers supplied with the file
|
96
102
|
|
97
|
-
``resolver_url``
|
98
|
-
: URL to globalnames' resolver. Default is ``http://resolver.globalnames.org``
|
99
|
-
|
100
103
|
#### `GnListResolver.logger=`
|
101
104
|
|
102
105
|
Allows to set logger to a custom logger (default is `STDERR`)
|
data/gn_list_resolver.gemspec
CHANGED
@@ -12,7 +12,7 @@ Gem::Specification.new do |gem|
|
|
12
12
|
gem.name = "gn_list_resolver"
|
13
13
|
gem.version = GnListResolver::VERSION
|
14
14
|
gem.license = "MIT"
|
15
|
-
gem.authors = ["Dmitry Mozzherin"]
|
15
|
+
gem.authors = ["Dmitry Mozzherin", "Alexander Myltsev"]
|
16
16
|
gem.email = ["dmozzherin@gmail.com"]
|
17
17
|
|
18
18
|
gem.summary = "Resolves a list of scientific names to names from " \
|
data/lib/gn_list_resolver.rb
CHANGED
@@ -8,6 +8,10 @@ require "logger"
|
|
8
8
|
require "logger/colors"
|
9
9
|
require "biodiversity"
|
10
10
|
require "gn_uuid"
|
11
|
+
require "graphql/client"
|
12
|
+
require "graphql/client/http"
|
13
|
+
require "gn_list_resolver/constants"
|
14
|
+
require "gn_list_resolver/graphql"
|
11
15
|
require "gn_list_resolver/errors"
|
12
16
|
require "gn_list_resolver/version"
|
13
17
|
require "gn_list_resolver/reader"
|
@@ -21,10 +25,6 @@ require "gn_list_resolver/stats"
|
|
21
25
|
|
22
26
|
# Namespace module for resolving lists with GN sources
|
23
27
|
module GnListResolver
|
24
|
-
INPUT_MODE = "r:utf-8"
|
25
|
-
OUTPUT_MODE = "w:utf-8"
|
26
|
-
MATCH_TYPE_EMPTY = "EmptyMatch"
|
27
|
-
|
28
28
|
class << self
|
29
29
|
attr_writer :logger
|
30
30
|
|
@@ -36,7 +36,7 @@ module GnListResolver
|
|
36
36
|
writer = create_writer(reader, output_io, opts)
|
37
37
|
resolver = create_resolver(writer, opts)
|
38
38
|
block_given? ? resolver.resolve(data, &Proc.new) : resolver.resolve(data)
|
39
|
-
|
39
|
+
resolver.stats
|
40
40
|
end
|
41
41
|
|
42
42
|
def logger
|
@@ -54,7 +54,7 @@ module GnListResolver
|
|
54
54
|
private
|
55
55
|
|
56
56
|
def create_resolver(writer, opts)
|
57
|
-
Resolver.new(writer, opts.data_source_id, opts.
|
57
|
+
Resolver.new(writer, opts.data_source_id, opts.stats)
|
58
58
|
end
|
59
59
|
|
60
60
|
def create_writer(reader, output_io, opts)
|
@@ -67,12 +67,7 @@ module GnListResolver
|
|
67
67
|
end
|
68
68
|
|
69
69
|
def opts_struct(opts)
|
70
|
-
|
71
|
-
# resolver_url = "http://localhost:8888/api/graphql".freeze
|
72
|
-
# resolver_url = "http://localhost:8080/api/graphql".freeze
|
73
|
-
resolver_url = "http://index-api.globalnames.org/api/graphql"
|
74
|
-
OpenStruct.new({ stats: Stats.new, alt_headers: [],
|
75
|
-
resolver_url: resolver_url }.merge(opts))
|
70
|
+
OpenStruct.new({ stats: Stats.new, alt_headers: [] }.merge(opts))
|
76
71
|
end
|
77
72
|
|
78
73
|
def io(input, output)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# Namespace module for resolving lists with GN sources
|
4
|
+
module GnListResolver
|
5
|
+
INPUT_MODE = "r:utf-8"
|
6
|
+
OUTPUT_MODE = "w:utf-8"
|
7
|
+
MATCH_TYPE_EMPTY = "EmptyMatch"
|
8
|
+
RESOLVER_URL = ENV["GN_RESOLVER_URL"] ||
|
9
|
+
"http://index-api.globalnames.org/api/graphql"
|
10
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module GnListResolver
|
4
|
+
# GraphQL client for gnindex API
|
5
|
+
class GnGraphQL
|
6
|
+
attr_reader :client, :query
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
http = GraphQL::Client::HTTP.new(RESOLVER_URL)
|
10
|
+
schema = GraphQL::Client.load_schema(http)
|
11
|
+
@client = GraphQL::Client.new(schema: schema, execute: http)
|
12
|
+
@query = <<~GRAPHQL_QUERY
|
13
|
+
query($names: [name!]!, $dataSourceIds: [Int!]) {
|
14
|
+
nameResolver(names: $names, dataSourceIds: $dataSourceIds) {
|
15
|
+
total suppliedId suppliedInput
|
16
|
+
results {
|
17
|
+
name { name }
|
18
|
+
canonicalName { name }
|
19
|
+
synonym
|
20
|
+
matchType { kind score editDistance }
|
21
|
+
taxonId classification { pathRanks }
|
22
|
+
score { value parsingQuality }
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
GRAPHQL_QUERY
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,36 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "graphql/client"
|
4
|
-
require "graphql/client/http"
|
5
|
-
|
6
3
|
# GnListResolver::test
|
7
4
|
module GnListResolver
|
8
|
-
# resolver_url = "http://gnresolver.globalnames.org/api/graphql".freeze
|
9
|
-
# resolver_url = "http://localhost:8888/api/graphql".freeze
|
10
|
-
# resolver_url = "http://localhost:8080/api/graphql".freeze
|
11
|
-
resolver_url = "http://index-api.globalnames.org/api/graphql"
|
12
|
-
HTTP = GraphQL::Client::HTTP.new(resolver_url)
|
13
|
-
SCHEMA = GraphQL::Client.load_schema(HTTP)
|
14
|
-
CLIENT = GraphQL::Client.new(schema: SCHEMA, execute: HTTP)
|
15
|
-
NAME_RESOLVERS_QUERY = CLIENT.parse <<-'GRAPHQL'
|
16
|
-
query($names: [name!]!, $dataSourceIds: [Int!]) {
|
17
|
-
nameResolver(names: $names, dataSourceIds: $dataSourceIds) {
|
18
|
-
total suppliedId suppliedInput
|
19
|
-
results {
|
20
|
-
name { name }
|
21
|
-
canonicalName { name }
|
22
|
-
synonym
|
23
|
-
matchType { kind score editDistance }
|
24
|
-
taxonId classification { pathRanks }
|
25
|
-
score { value parsingQuality }
|
26
|
-
}
|
27
|
-
}
|
28
|
-
}
|
29
|
-
GRAPHQL
|
30
|
-
|
31
5
|
# Sends data to GN Resolver and collects results
|
32
6
|
class Resolver
|
33
|
-
|
7
|
+
GRAPHQL = GnGraphQL.new
|
8
|
+
QUERY = GRAPHQL.client.parse(GRAPHQL.query)
|
9
|
+
attr_reader :stats
|
10
|
+
|
11
|
+
def initialize(writer, data_source_id, stats)
|
34
12
|
@stats = stats
|
35
13
|
@processor = GnListResolver::ResultProcessor.new(writer, @stats)
|
36
14
|
@ds_id = data_source_id
|
@@ -43,7 +21,12 @@ module GnListResolver
|
|
43
21
|
update_stats(data.size)
|
44
22
|
block_given? ? process(data, &Proc.new) : process(data)
|
45
23
|
wrap_up
|
46
|
-
|
24
|
+
|
25
|
+
if block_given?
|
26
|
+
yield(@stats.stats)
|
27
|
+
else
|
28
|
+
@stats.stats
|
29
|
+
end
|
47
30
|
end
|
48
31
|
|
49
32
|
private
|
@@ -78,7 +61,7 @@ module GnListResolver
|
|
78
61
|
e = [@count, @stats.stats[:total_records]].min
|
79
62
|
GnListResolver.log("Resolve #{s}-#{e} out of " \
|
80
63
|
"#{@stats.stats[:total_records]} records at " \
|
81
|
-
"#{
|
64
|
+
"#{RESOLVER_URL}")
|
82
65
|
yield
|
83
66
|
end
|
84
67
|
|
@@ -102,7 +85,7 @@ module GnListResolver
|
|
102
85
|
|
103
86
|
def remote_resolve(names)
|
104
87
|
batch_start = Time.now
|
105
|
-
res =
|
88
|
+
res = GRAPHQL.client.query(QUERY, variables: variables(names))
|
106
89
|
@processor.process(res.data.name_resolver, @current_data)
|
107
90
|
update_batch_times(batch_start)
|
108
91
|
end
|
metadata
CHANGED
@@ -1,14 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gn_list_resolver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.1
|
4
|
+
version: 3.0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dmitry Mozzherin
|
8
|
+
- Alexander Myltsev
|
8
9
|
autorequire:
|
9
10
|
bindir: exe
|
10
11
|
cert_chain: []
|
11
|
-
date: 2017-07-
|
12
|
+
date: 2017-07-23 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
14
15
|
name: trollop
|
@@ -234,7 +235,9 @@ files:
|
|
234
235
|
- lib/gn_list_resolver.rb
|
235
236
|
- lib/gn_list_resolver/collector.rb
|
236
237
|
- lib/gn_list_resolver/column_collector.rb
|
238
|
+
- lib/gn_list_resolver/constants.rb
|
237
239
|
- lib/gn_list_resolver/errors.rb
|
240
|
+
- lib/gn_list_resolver/graphql.rb
|
238
241
|
- lib/gn_list_resolver/reader.rb
|
239
242
|
- lib/gn_list_resolver/resolver.rb
|
240
243
|
- lib/gn_list_resolver/result_processor.rb
|