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.

Potentially problematic release.


This version of sequenceserver might be problematic. Click here for more details.

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']