sequenceserver 1.1.0.beta11 → 1.1.0.beta12

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 867a3223b834d9f43317bff3d92b4adf156ea62c
4
- data.tar.gz: e7472a7e6ca36b52491902e61f4245a893183620
3
+ metadata.gz: cc2b025ab26f09234131859b1d60c39327111610
4
+ data.tar.gz: 149e0c2d93046a81ef5043795fd772ec23bcd706
5
5
  SHA512:
6
- metadata.gz: 0ec13375008dcc39c012c304bfde29c9f38be5530914db659092c54487af8b6333e25ccebe9b2eb9f5aef005a8e350670601effee10c31fe73f9375d4a7c9625
7
- data.tar.gz: ddc2acfe4098cad5f62f82c3cc137c1b3d409f170126bcc4a52cfa7bdfe67cfc84a0fced8b14c4dabcf68c0787bcf7952524a5ccbada8f8a4655a4e58d04ad30
6
+ metadata.gz: 06d8c9b123c1a8686862895f9a8254f55b0ab969295ab2c4a1fd0f8dcc2a2bc020efa17b41a1292a78901aa9961dc530376a8d69e6da99ca72e15a41aea9f5e8
7
+ data.tar.gz: 976438929256906862c004244a9f1554496c0dd99aa15f8cf8bc2f84fd905cd1c0df258ed2ff90e057ed57edd5501b67c60080883524b7d701e94406e8c2c27c
data/.rubocop.yml CHANGED
@@ -1,4 +1,5 @@
1
1
  AllCops:
2
+ TargetRubyVersion: 2.3
2
3
  Exclude:
3
4
  # Because these are vendor files.
4
5
  - 'node_modules/**/*'
@@ -21,15 +22,14 @@ Metrics/ModuleLength:
21
22
  - 'lib/sequenceserver.rb'
22
23
  - 'spec/blast_spec.rb'
23
24
  Metrics/ClassLength:
24
- Exclude:
25
- # TODO:
26
- # Evaluate whether to make class smaller or to increase 'Max'.
27
- - 'lib/sequenceserver/database.rb'
25
+ Max: 150
28
26
  Metrics/BlockNesting:
29
27
  Exclude:
30
- # TODO:
31
- # Fix in bin/sequenceserver and re-enable.
32
28
  - 'bin/sequenceserver'
29
+ Metrics/BlockLength:
30
+ Exclude:
31
+ - 'bin/sequenceserver'
32
+ - 'sequenceserver.gemspec'
33
33
 
34
34
  Style/UnlessElse:
35
35
  # TODO:
@@ -48,9 +48,14 @@ Style/EachWithObject:
48
48
  Exclude:
49
49
  # Because we support 1.8.7.
50
50
  - '**/*.rb'
51
- Style/HashSyntax:
52
- # Because we support 1.8.7.
53
- EnforcedStyle: hash_rockets
54
51
  Style/AsciiComments:
55
52
  # Nothing wrong with non-ascii chars, like © in comments.
56
53
  Enabled: false
54
+ Style/SignalException:
55
+ # Roughly, use fail to fail and raise to signal.
56
+ EnforcedStyle: semantic
57
+ Style/FrozenStringLiteralComment:
58
+ # Immutability is good. Switching to immutable strings is like a paradigm
59
+ # shift and should be approached more carefully. Thus, disabling this cop
60
+ # for now.
61
+ Enabled: false
data/Rakefile CHANGED
@@ -5,4 +5,4 @@ task :build do
5
5
  sh 'gem build sequenceserver.gemspec'
6
6
  end
7
7
 
8
- task :default => [:build]
8
+ task default: [:build]
data/bin/sequenceserver CHANGED
@@ -21,83 +21,83 @@ def download_from_url(url)
21
21
  end
22
22
 
23
23
  begin
24
- Slop.parse!(:strict => true, :help => true) do
25
- banner <<BANNER
26
- SUMMARY
24
+ Slop.parse!(strict: true, help: true) do
25
+ banner <<~BANNER
26
+ SUMMARY
27
27
 
28
- custom, local, BLAST server
28
+ custom, local, BLAST server
29
29
 
30
- USAGE
30
+ USAGE
31
31
 
32
- sequenceserver [options]
32
+ sequenceserver [options]
33
33
 
34
- EXAMPLE
34
+ EXAMPLE
35
35
 
36
- # Launch SequenceServer. This will read configuration from
37
- # ~/.sequenceserver.conf, if present.
38
- $ sequenceserver
36
+ # Launch SequenceServer. This will read configuration from
37
+ # ~/.sequenceserver.conf, if present.
38
+ $ sequenceserver
39
39
 
40
- # Use a different config file.
41
- $ sequenceserver -c ~/.sequenceserver.ants.conf
40
+ # Use a different config file.
41
+ $ sequenceserver -c ~/.sequenceserver.ants.conf
42
42
 
43
- # Set number of threads to use. This will save the number
44
- # of threads to use in config file.
45
- $ sequenceserver -s -n 16
43
+ # Set number of threads to use. This will save the number
44
+ # of threads to use in config file.
45
+ $ sequenceserver -s -n 16
46
46
 
47
- # See if you have FASTA files in database dir that haven't
48
- # been converted into BLAST database.
49
- $ sequenceserver -u
47
+ # See if you have FASTA files in database dir that haven't
48
+ # been converted into BLAST database.
49
+ $ sequenceserver -u
50
50
 
51
- # Search for FASTA files in database dir that haven't been
52
- # converted into BLAST database yet, and convert them.
53
- $ sequenceserver -m
51
+ # Search for FASTA files in database dir that haven't been
52
+ # converted into BLAST database yet, and convert them.
53
+ $ sequenceserver -m
54
54
 
55
- DESCRIPTION
55
+ DESCRIPTION
56
56
 
57
- SequenceServer lets you rapidly set up a BLAST+ server with an intuitive user
58
- interface for use locally or over the web. If BLAST+ is not installed on your
59
- system, SequenceServer will offer to install BLAST+ for you. You should only
60
- ever have to point it to a directory of FASTA files / BLAST+ databases.
57
+ SequenceServer lets you rapidly set up a BLAST+ server with an intuitive user
58
+ interface for use locally or over the web. If BLAST+ is not installed on your
59
+ system, SequenceServer will offer to install BLAST+ for you. You should only
60
+ ever have to point it to a directory of FASTA files / BLAST+ databases.
61
61
 
62
- In a given directory, SequenceServer is able to tell FASTA files that are yet
63
- to be formatted for use with BLAST+ and format them, and FASTA files that are
64
- already formatted for use with BLAST+, heuristically skipping all other files
65
- in the directory. Directories are scanned recursively. Type of sequences in a
66
- FASTA file is detected automagically. `parse_seqids` and `hash_index` options
67
- of `makeblastdb` are used to create BLAST+ databases.
68
- BANNER
62
+ In a given directory, SequenceServer is able to tell FASTA files that are yet
63
+ to be formatted for use with BLAST+ and format them, and FASTA files that are
64
+ already formatted for use with BLAST+, heuristically skipping all other files
65
+ in the directory. Directories are scanned recursively. Type of sequences in a
66
+ FASTA file is detected automagically. `parse_seqids` and `hash_index` options
67
+ of `makeblastdb` are used to create BLAST+ databases.
68
+ BANNER
69
69
 
70
70
  on 'c', 'config_file=',
71
71
  'Use the given configuration file',
72
- :argument => true
72
+ argument: true
73
73
 
74
74
  on 'config=',
75
75
  'Same as --config_file (deprecated)',
76
- :argument => true
76
+ argument: true
77
77
 
78
78
  on 'b', 'bin=',
79
79
  'Load BLAST+ binaries from this directory',
80
- :argument => true
80
+ argument: true
81
81
 
82
82
  on 'd', 'database_dir=',
83
83
  'Read FASTA and BLAST database from this directory',
84
- :argument => true
84
+ argument: true
85
85
 
86
86
  on 'n', 'num_threads=',
87
87
  'Number of threads to use to run a BLAST search',
88
- :argument => true
88
+ argument: true
89
89
 
90
90
  on 'r', 'require=',
91
91
  'Load extension from this file',
92
- :argument => true
92
+ argument: true
93
93
 
94
94
  on 'H', 'host=',
95
95
  'Host to run SequenceServer on',
96
- :argument => true
96
+ argument: true
97
97
 
98
98
  on 'p', 'port=',
99
99
  'Port to run SequenceServer on',
100
- :argument => true
100
+ argument: true
101
101
 
102
102
  on 's', 'set',
103
103
  'Set configuration value in default or given config file'
@@ -117,8 +117,8 @@ BANNER
117
117
  on 'i', 'interactive',
118
118
  'Run SequenceServer in interactive mode'
119
119
 
120
- #on 'doctor',
121
- #'Run SequenceServer doctor'
120
+ # on 'doctor',
121
+ # 'Run SequenceServer doctor'
122
122
 
123
123
  on 'D', 'devel',
124
124
  'Start SequenceServer in development mode'
@@ -162,21 +162,17 @@ BANNER
162
162
  # working SequenceServer installation. We expect to land following
163
163
  # error scenarios either when creating a new SequenceServer (first
164
164
  # time or later), or updating config values using -s CLI option.
165
-
166
165
  rescue SequenceServer::CONFIG_FILE_ERROR,
167
166
  SequenceServer::BLAST_DATABASE_ERROR => e
168
167
 
169
168
  puts e
170
169
  exit!
171
-
172
170
  rescue SequenceServer::ENOENT => e
173
171
  puts e
174
172
 
175
- puts "Please consult sequenceserver --help for instructions on how to set the correct values."
173
+ puts 'Please consult sequenceserver --help for instructions on how to set the correct values.'
176
174
  exit!
177
-
178
175
  rescue SequenceServer::NUM_THREADS_INCORRECT => e
179
-
180
176
  puts e
181
177
 
182
178
  unless num_threads?
@@ -187,9 +183,7 @@ BANNER
187
183
  end
188
184
 
189
185
  exit!
190
-
191
186
  rescue SequenceServer::BLAST_NOT_INSTALLED_OR_NOT_EXECUTABLE,
192
- SequenceServer::BLAST_NOT_INSTALLED,
193
187
  SequenceServer::BLAST_NOT_COMPATIBLE => e
194
188
 
195
189
  # Show original error message first.
@@ -203,15 +197,15 @@ BANNER
203
197
  # Ask user if she already has BLAST+ downloaded or offer to download
204
198
  # BLAST+ for her.
205
199
  puts
206
- puts <<MSG
207
- SequenceServer can use NCBI BLAST+ that you may have on your system already, or
208
- download the correct package for itself. A recent system update may have broken
209
- your NCBI BLAST+ installation.
200
+ puts <<~MSG
201
+ SequenceServer can use NCBI BLAST+ that you may have on your system already, or
202
+ download the correct package for itself. A recent system update may have broken
203
+ your NCBI BLAST+ installation.
210
204
 
211
- Please enter the path to NCBI BLAST+ or press Enter to download.
205
+ Please enter the path to NCBI BLAST+ or press Enter to download.
212
206
 
213
- Press Ctrl+C to quit.
214
- MSG
207
+ Press Ctrl+C to quit.
208
+ MSG
215
209
  puts
216
210
  response = Readline.readline('>> ').to_s.strip
217
211
  if response.empty?
@@ -231,18 +225,18 @@ MSG
231
225
  "#{version.chop}/" \
232
226
  "ncbi-blast-#{version}-x64-macosx.tar.gz"
233
227
  else
234
- puts <<ERR
235
- ------------------------------------------------------------------------
236
- FAILED!! to install NCBI BLAST+.
228
+ puts <<~ERR
229
+ ------------------------------------------------------------------------
230
+ FAILED!! to install NCBI BLAST+.
237
231
 
238
- We currently support Linux and Mac only (64 bit). If you
239
- believe you are running a supported platform, please open a support
240
- ticket titled "#{RUBY_PLATFORM}" at:
232
+ We currently support Linux and Mac only (64 bit). If you
233
+ believe you are running a supported platform, please open a support
234
+ ticket titled "#{RUBY_PLATFORM}" at:
241
235
 
242
- https://github.com/yannickwurm/sequenceserver/issues
243
- ------------------------------------------------------------------------
236
+ https://github.com/yannickwurm/sequenceserver/issues
237
+ ------------------------------------------------------------------------
244
238
 
245
- ERR
239
+ ERR
246
240
  end
247
241
  download_from_url(url)
248
242
  unless $CHILD_STATUS.success?
@@ -254,17 +248,15 @@ ERR
254
248
  end
255
249
  fetch_option(:bin).value =
256
250
  "~/.sequenceserver/ncbi-blast-#{version}/bin/"
257
- redo
258
251
  else
259
252
  unless File.basename(response) == 'bin'
260
253
  response = File.join(response, 'bin')
261
254
  end
262
255
  fetch_option(:bin).value = File.join(response)
263
256
  puts
264
- redo
265
257
  end
258
+ redo
266
259
  rescue SequenceServer::DATABASE_DIR_NOT_SET => e
267
-
268
260
  # Show original error message.
269
261
  puts
270
262
  puts e
@@ -276,18 +268,17 @@ ERR
276
268
  # Ask user for the directory containing sequences or BLAST+
277
269
  # databases.
278
270
  puts
279
- puts <<MSG
280
- SequenceServer needs to know where your FASTA files or BLAST+ databases are.
281
- Please enter the path to the relevant directory (default: current directory).
271
+ puts <<~MSG
272
+ SequenceServer needs to know where your FASTA files or BLAST+ databases are.
273
+ Please enter the path to the relevant directory (default: current directory).
282
274
 
283
- Press Ctrl+C to quit.
284
- MSG
275
+ Press Ctrl+C to quit.
276
+ MSG
285
277
 
286
278
  puts
287
279
  response = Readline.readline('>> ').to_s.strip
288
280
  fetch_option(:database_dir).value = response
289
281
  redo
290
-
291
282
  rescue SequenceServer::NO_BLAST_DATABASE_FOUND => e
292
283
  unless list_databases? || list_unformatted_fastas? ||
293
284
  make_blast_databases?
@@ -299,14 +290,14 @@ MSG
299
290
  # Offer user to format the FASTA files.
300
291
  database_dir = SequenceServer.config[:database_dir]
301
292
  puts
302
- puts <<MSG
303
- Search for FASTA files (.fa, .fasta, .fna) in '#{database_dir}' and try
304
- creating BLAST+ databases? [y/n] (Default: y).
305
- MSG
293
+ puts <<~MSG
294
+ Search for FASTA files (.fa, .fasta, .fna) in '#{database_dir}' and try
295
+ creating BLAST+ databases? [y/n] (Default: y).
296
+ MSG
306
297
  puts
307
298
  print '>> '
308
299
  response = STDIN.gets.to_s.strip
309
- unless response.match(/^[n]$/i)
300
+ unless response =~ /^[n]$/i
310
301
  puts
311
302
  puts 'Searching ...'
312
303
  if SequenceServer::Database.unformatted_fastas.empty?
@@ -321,23 +312,22 @@ MSG
321
312
  exit! unless set?
322
313
  end
323
314
  end
324
-
325
315
  rescue => e
326
316
  # This will catch any unhandled error and some very special errors.
327
317
  # Ideally we will never hit this block. If we do, there's a bug in
328
318
  # SequenceServer or something really weird going on. If we hit this
329
319
  # error block we show the stacktrace to the user requesting them to
330
320
  # post the same to our Google Group.
331
- puts <<MSG
332
- Something went wonky
321
+ puts <<~MSG
322
+ Something went wonky
333
323
 
334
- Looks like you have encountered a bug in SequenceServer. Please could you
335
- report this incident to our Google Group -
336
- https://groups.google.com/forum/?fromgroups#!forum/sequenceserver
324
+ Looks like you have encountered a bug in SequenceServer. Please could you
325
+ report this incident to our Google Group -
326
+ https://groups.google.com/forum/?fromgroups#!forum/sequenceserver
337
327
 
338
- Error:
339
- #{e.backtrace.unshift(e.message).join("\n")}
340
- MSG
328
+ Error:
329
+ #{e.backtrace.unshift(e.message).join("\n")}
330
+ MSG
341
331
  exit
342
332
  end
343
333
 
@@ -16,13 +16,13 @@ require 'sequenceserver/doctor'
16
16
  # Top level module / namespace.
17
17
  module SequenceServer
18
18
  # Use a fixed minimum version of BLAST+
19
- BLAST_VERSION = '2.6.0+'
19
+ BLAST_VERSION = '2.6.0+'.freeze
20
20
 
21
21
  # Default location of configuration file.
22
- DEFAULT_CONFIG_FILE = '~/.sequenceserver.conf'
22
+ DEFAULT_CONFIG_FILE = '~/.sequenceserver.conf'.freeze
23
23
 
24
24
  # Constant for denoting the path ~/.sequenceserver
25
- DOTDIR = File.expand_path('~/.sequenceserver')
25
+ DOTDIR = File.expand_path('~/.sequenceserver').freeze
26
26
 
27
27
  class << self
28
28
  def environment
@@ -84,15 +84,13 @@ module SequenceServer
84
84
  #
85
85
  # Usage:
86
86
  #
87
- # stdout, stderr = sys(command, :dir => '/path/to/directory',
88
- # :path => '/path/to/directory')
87
+ # sys(command, dir: '/path/to/directory', path: '/path/to/directory',
88
+ # stdout: '/path/to/stdout_file', stderr: '/path/to/stderr_file')
89
89
  #
90
- # sys(command, :dir => '/path/to/directory',
91
- # :path => '/path/to/directory', :stdout => '/path/to/stdout_file',
92
- # :stderr => '/path/to/stderr_file')
90
+ # rubocop:disable Metrics/CyclomaticComplexity
93
91
  def sys(command, options = {})
94
92
  # Available output channels
95
- channels = [:stdout, :stderr]
93
+ channels = %i[stdout stderr]
96
94
 
97
95
  # Make temporary files to store output from stdout and stderr.
98
96
  temp_files = {
@@ -150,6 +148,7 @@ module SequenceServer
150
148
  return temp_files.values if status.success?
151
149
  raise CommandFailed.new(status.exitstatus, **temp_files)
152
150
  end
151
+ # rubocop:enable Metrics/CyclomaticComplexity
153
152
 
154
153
  # Run SequenceServer as a self-hosted server using Thin webserver.
155
154
  def run
@@ -210,7 +209,7 @@ module SequenceServer
210
209
  if config[:bin]
211
210
  config[:bin] = File.expand_path config[:bin]
212
211
  unless File.exist?(config[:bin]) && File.directory?(config[:bin])
213
- fail ENOENT.new("bin dir", config[:bin])
212
+ fail ENOENT.new('bin dir', config[:bin])
214
213
  end
215
214
  logger.debug("Will use NCBI BLAST+ at: #{config[:bin]}")
216
215
  else
@@ -227,7 +226,7 @@ module SequenceServer
227
226
  config[:database_dir] = File.expand_path(config[:database_dir])
228
227
  unless File.exist?(config[:database_dir]) &&
229
228
  File.directory?(config[:database_dir])
230
- fail ENOENT.new("database dir", config[:database_dir])
229
+ fail ENOENT.new('database dir', config[:database_dir])
231
230
  end
232
231
 
233
232
  logger.debug("Will use BLAST+ databases at: #{config[:database_dir]}")
@@ -240,13 +239,12 @@ module SequenceServer
240
239
 
241
240
  def check_num_threads
242
241
  num_threads = Integer(config[:num_threads])
243
- fail NUM_THREADS_INCORRECT unless num_threads > 0
244
-
242
+ fail NUM_THREADS_INCORRECT unless num_threads.positive?
245
243
  logger.debug "Will use #{num_threads} threads to run BLAST."
246
244
  if num_threads > 256
247
245
  logger.warn "Number of threads set at #{num_threads} is unusually high."
248
246
  end
249
- rescue
247
+ rescue ArgumentError
250
248
  raise NUM_THREADS_INCORRECT
251
249
  end
252
250
 
@@ -265,7 +263,7 @@ module SequenceServer
265
263
 
266
264
  config[:require] = File.expand_path config[:require]
267
265
  unless File.exist?(config[:require]) && File.file?(config[:require])
268
- fail ENOENT.new("extension file", config[:require])
266
+ fail ENOENT.new('extension file', config[:require])
269
267
  end
270
268
 
271
269
  logger.debug("Loading extension: #{config[:require]}")
@@ -274,8 +272,8 @@ module SequenceServer
274
272
 
275
273
  def assert_blast_installed_and_compatible
276
274
  begin
277
- out, _ = sys("blastdbcmd -version", path: config[:bin])
278
- rescue
275
+ out, = sys('blastdbcmd -version', path: config[:bin])
276
+ rescue CommandFailed
279
277
  fail BLAST_NOT_INSTALLED_OR_NOT_EXECUTABLE
280
278
  end
281
279
  version = out.split[1]
@@ -285,13 +283,16 @@ module SequenceServer
285
283
 
286
284
  def server_url
287
285
  host = config[:host]
288
- host = 'localhost' if host == '127.0.0.1' || host == '0.0.0.0'
286
+ host = 'localhost' if ['127.0.0.1', '0.0.0.0'].include?(host)
289
287
  "http://#{host}:#{config[:port]}"
290
288
  end
291
289
 
292
290
  # Uses `open` on Mac or `xdg-open` on Linux to opens the search form in
293
291
  # user's default browser. This function is called when SequenceServer
294
292
  # is launched from the terminal. Errors, if any, are silenced.
293
+ #
294
+ # rubocop:disable Metrics/CyclomaticComplexity, Style/RescueStandardError,
295
+ # Lint/HandleExceptions
295
296
  def open_in_browser(server_url)
296
297
  return if using_ssh? || verbose?
297
298
  if RUBY_PLATFORM =~ /linux/ && xdg?
@@ -302,6 +303,8 @@ module SequenceServer
302
303
  rescue
303
304
  # fail silently
304
305
  end
306
+ # rubocop:enable Metrics/CyclomaticComplexity, Style/RescueStandardError,
307
+ # Lint/HandleExceptions
305
308
 
306
309
  def using_ssh?
307
310
  true if ENV['SSH_CLIENT'] || ENV['SSH_TTY'] || ENV['SSH_CONNECTION']