rbbt-util 5.6.12 → 5.6.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f7078269d0f470647e84541e1db1cb8a088e804c
4
- data.tar.gz: ae9b295bb59220995ba1d8b81d833e809a4ddf0b
3
+ metadata.gz: b656db59e4d0eca0665f2f66988894887643c65a
4
+ data.tar.gz: ad90d4cf34155c405e418306f9376716c514db4e
5
5
  SHA512:
6
- metadata.gz: c6c0e5e5b36bc9b9606ebcc45b9f2ab6d00ef4c86f1ca1ee16740e3674a8c594f71c93cef42330f7b85c7c168934b9b4973ca73eb9cde3e4b8c92f0b7fe976f4
7
- data.tar.gz: 99e0a39b90f299e839136bbe618189ee37d5b48089a82209d58eca81481f5d5a1a3bedaef3d332b73bc34aaac6cc2439273756a1629d789dcb71c468129b733f
6
+ metadata.gz: bd6c1cf896bcbd16e00f35064b764789a0d35e6e5ef3db98d93bbe86ab55a1de92a5a72fe2c5559cfeba9cd06c645d20ec5f1a62cd4dca482a3f8f2aa9ff8678
7
+ data.tar.gz: 2909d49e91db24d697b445256475b6066bf807018394eb1560f1161fd8fd1966483db16f7c222bde72cfc54b90869a1bdf794e662bd4dd73f29ecafd3516d793
data/bin/rbbt CHANGED
@@ -78,10 +78,22 @@ def print_error(error, backtrace = nil)
78
78
  end
79
79
  puts
80
80
  end
81
+
82
+ def aliases
83
+ @aliases ||= Rbbt.etc.cmd_alias.exists? ? Rbbt.etc.cmd_alias.yaml : {}
84
+ end
85
+
86
+ def cmd_alias
87
+ while aliases.include? ARGV[0]
88
+ ARGV.replace Misc.parse_cmd_params(aliases[ARGV[0]]) + ARGV[1..-1]
89
+ end
90
+ end
81
91
 
82
92
  dir = $rbbt_command_dir
83
93
  prev = []
84
94
 
95
+ cmd_alias
96
+
85
97
  begin
86
98
  while ARGV.any?
87
99
  command = ARGV.shift
@@ -81,15 +81,15 @@ module Persist
81
81
 
82
82
  lock_filename = Persist.persistence_path(path, {:dir => TSV.lock_dir})
83
83
 
84
- if is_persisted? path and not persist_options[:update]
84
+ if is_persisted?(path) and not persist_options[:update]
85
85
  Log.debug "TSV persistence up-to-date: #{ path }"
86
86
  return open_database(path, false, nil, persist_options[:engine] || TokyoCabinet::HDB)
87
87
  end
88
88
 
89
89
  Misc.lock lock_filename do
90
90
  begin
91
- if is_persisted? path
92
- Log.debug "TSV persistence up-to-date: #{ path }"
91
+ if is_persisted?(path) and not persist_options[:update]
92
+ Log.debug "TSV persistence (suddenly) up-to-date: #{ path }"
93
93
  return open_database(path, false, nil, persist_options[:engine] || TokyoCabinet::HDB)
94
94
  end
95
95
 
@@ -193,6 +193,18 @@ module TSV
193
193
  end
194
194
  end
195
195
 
196
+ def zip_new(key, values)
197
+ if self.include? key
198
+ new = []
199
+ self[key, true].each_with_index do |v,i|
200
+ new << (v << values[i])
201
+ end
202
+ self[key] == new
203
+ else
204
+ self[key] = values.collect{|v| [v] }
205
+ end
206
+ end
207
+
196
208
  def keys
197
209
  keys = super - ENTRY_KEYS.to_a
198
210
  return keys if @unnamed or key_field.nil?
@@ -29,6 +29,14 @@ end
29
29
  Lockfile.refresh = false if ENV["RBBT_NO_LOCKFILE_REFRESH"] == "true"
30
30
  module Misc
31
31
 
32
+ def self.parse_cmd_params(str)
33
+ return str if Array === str
34
+ str.scan(/
35
+ (?:["']([^"']*?)["']) |
36
+ ([^"'\s]+)
37
+ /x).flatten.compact
38
+ end
39
+
32
40
  def self.correct_icgc_mutation(pos, ref, mut_str)
33
41
  mut = mut_str
34
42
  mut = '-' * (mut_str.length - 1) if mut =~/^-[ACGT]/
@@ -0,0 +1,23 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rbbt'
4
+
5
+
6
+ cmd, *rest = ARGV
7
+
8
+ aliases ||= Rbbt.etc.cmd_alias.exists? ? Rbbt.etc.cmd_alias.yaml : {}
9
+
10
+ if cmd.nil?
11
+ require 'pp'
12
+ pp aliases
13
+ exit 0
14
+ end
15
+
16
+ if rest.empty?
17
+ aliases.delete cmd
18
+ else
19
+ aliases[cmd] = rest
20
+ end
21
+
22
+ Open.write(Rbbt.etc.cmd_alias.find,(aliases.to_yaml))
23
+
@@ -0,0 +1,55 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'rbbt/util/simpleopt'
4
+ require 'rbbt/workflow'
5
+ require 'rbbt/workflow/usage'
6
+
7
+ def run_task(workflow, task, name)
8
+ Log.info "Running example #{Log.color :magenta, workflow.to_s}##{Log.color :yellow, task} -- #{Log.color :cyan, name}"
9
+
10
+ example_dir = workflow.libdir.examples[task][name].find
11
+ Log.debug "Using #{example_dir}"
12
+
13
+ ARGV.replace([workflow.to_s, task, '--load_inputs', example_dir, '--jobname', name,'--O','/dev/null'] + $saved_args)
14
+
15
+ @pid = Process.fork{
16
+ load Rbbt.share.rbbt_commands.workflow.task.find
17
+ }
18
+ Signal.trap(:INT) do
19
+ begin
20
+ Process.kill "INT", @pid
21
+ ensure
22
+ exit -1
23
+ end
24
+ end
25
+ Process.wait @pid
26
+
27
+ if $?.success?
28
+ Log.info "#{Log.color :green, "SUCCESS"} #{Log.color :magenta, workflow.to_s}##{Log.color :yellow, task} -- #{Log.color :cyan, name}"
29
+ else
30
+ Log.info "#{Log.color :red, "ERROR"} #{Log.color :magenta, workflow.to_s}##{Log.color :yellow, task} -- #{Log.color :cyan, name}"
31
+ end
32
+ end
33
+
34
+ workflow = ARGV.shift
35
+ raise ParameterException if workflow.nil?
36
+
37
+ task = ARGV.shift
38
+ task = nil if task == '--'
39
+
40
+ name = ARGV.shift if task
41
+ name = nil if name == '--'
42
+
43
+ $saved_args = ARGV.dup
44
+
45
+
46
+ workflow = Workflow.require_workflow workflow
47
+
48
+ tasks = task ? [task] : workflow.libdir.examples.glob('*').collect{|file| File.basename file }
49
+
50
+ tasks.each do |task|
51
+ names = name ? [name] : workflow.libdir.examples[task].glob('*').collect{|file| File.basename file }
52
+ names.each do |name|
53
+ run_task workflow, task, name
54
+ end
55
+ end
@@ -9,17 +9,30 @@ def load_inputs(dir, task)
9
9
  dir = Path.setup(dir.dup)
10
10
  task.inputs.each do |input|
11
11
  file = dir[input].find
12
+ Log.debug "Trying #{ input }: #{file}"
12
13
  next unless file.exists?
13
14
  case task.input_types[input]
14
15
  when :tsv, :array, :text
16
+ Log.debug "Pointing #{ input } to #{file}"
15
17
  inputs[input.to_sym] = file
16
18
  else
19
+ Log.debug "Loading #{ input } from #{file}"
17
20
  inputs[input.to_sym] = file.read
18
21
  end
19
22
  end
20
23
  inputs
21
24
  end
22
25
 
26
+ def report_options(options)
27
+ if options.nil? or options.empty?
28
+ puts "No options"
29
+ else
30
+ options.each do |key, value|
31
+ puts [Log.color(:cyan, key), Misc.fingerprint(value)] * ": "
32
+ end
33
+ end
34
+ end
35
+
23
36
  def usage(workflow = nil, task = nil, exception=nil)
24
37
  puts SOPT.doc
25
38
  puts Log.color :magenta, "## WORKFLOW"
@@ -42,7 +55,8 @@ def usage(workflow = nil, task = nil, exception=nil)
42
55
  end
43
56
 
44
57
  print_error(exception.message, exception.backtrace) if exception
45
- exit -1
58
+
59
+ true
46
60
  end
47
61
 
48
62
  def SOPT_options(workflow, task)
@@ -135,7 +149,7 @@ options = SOPT.get <<EOF
135
149
  EOF
136
150
 
137
151
  workflow = ARGV.shift
138
- usage if workflow.nil?
152
+ usage and exit -1 if workflow.nil?
139
153
 
140
154
  task = ARGV.shift
141
155
 
@@ -171,7 +185,7 @@ namespace = nil, nil
171
185
 
172
186
  case
173
187
  when task.nil?
174
- usage workflow
188
+ usage workflow and exit 0
175
189
  # Can not remember what this was
176
190
  #when (task =~ /\./)
177
191
  # namespace, task = options.delete(:task).split('.')
@@ -182,7 +196,7 @@ else
182
196
  raise ParameterException, "Task not found: #{ task_name }" if task.nil?
183
197
  end
184
198
 
185
- usage workflow, task if help
199
+ usage workflow, task and exit 0 if help
186
200
 
187
201
  name = options.delete(:jobname) || "Default"
188
202
 
@@ -194,6 +208,7 @@ else
194
208
  job_options = SOPT.get sopt_option_string
195
209
  end
196
210
  job_options = fix_options(workflow, task, job_options)
211
+ saved_job_options = job_options
197
212
 
198
213
  workflow.workdir = Path.setup(File.expand_path(options.delete(:workdir))) if options[:workdir]
199
214
 
@@ -222,6 +237,7 @@ begin
222
237
  pp job.info
223
238
  exit 0
224
239
  end
240
+
225
241
  if do_exec
226
242
  res = job.exec
227
243
  case
@@ -265,6 +281,11 @@ begin
265
281
  rescue ParameterException
266
282
  SOPT.delete_inputs(workflow.rec_inputs(task.name))
267
283
  usage(workflow, task, $!)
284
+ puts Log.color :magenta, "Options:"
285
+ puts
286
+ report_options saved_job_options
287
+ puts
288
+ exit -1
268
289
  end
269
290
 
270
291
 
@@ -19,6 +19,18 @@ row2 A B Id3
19
19
  end
20
20
  end
21
21
 
22
+ def test_zip_new
23
+ content =<<-EOF
24
+ #Id ValueA ValueB OtherID
25
+ row1 a|aa|aaa b|bb|bbb Id1|Id2|Id3
26
+ EOF
27
+
28
+ TmpFile.with_file(content) do |filename|
29
+ tsv = TSV.open(filename, :sep => /\s+/)
30
+ tsv.zip_new("row1", %w(aaaa bbbb Id4))
31
+ assert_equal %w(b bb bbb bbbb), tsv["row1"]["ValueB"]
32
+ end
33
+ end
22
34
 
23
35
  def test_tsv
24
36
  content =<<-EOF
@@ -6,6 +6,10 @@ require 'rbbt/entity'
6
6
 
7
7
  class TestMisc < Test::Unit::TestCase
8
8
 
9
+ def test_parse_cmd_params
10
+ ddd Misc.parse_cmd_params("workflow task Translation translate -f 'Associated Gene Name' -l -")
11
+ end
12
+
9
13
 
10
14
  def test_fixutf8
11
15
  string = "abc\xffdef"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rbbt-util
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.6.12
4
+ version: 5.6.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Miguel Vazquez
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-26 00:00:00.000000000 Z
11
+ date: 2014-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rake
@@ -201,6 +201,7 @@ files:
201
201
  - share/Rlib/util.R
202
202
  - share/config.ru
203
203
  - share/install/software/lib/install_helpers
204
+ - share/rbbt_commands/alias
204
205
  - share/rbbt_commands/app/install
205
206
  - share/rbbt_commands/app/start
206
207
  - share/rbbt_commands/app/template
@@ -225,6 +226,7 @@ files:
225
226
  - share/rbbt_commands/tsv/unzip
226
227
  - share/rbbt_commands/tsv/values
227
228
  - share/rbbt_commands/workflow/cmd
229
+ - share/rbbt_commands/workflow/example
228
230
  - share/rbbt_commands/workflow/install
229
231
  - share/rbbt_commands/workflow/list
230
232
  - share/rbbt_commands/workflow/monitor