scout-gear 6.0.0 → 7.1.0
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 +4 -4
- data/.vimproject +436 -432
- data/VERSION +1 -1
- data/lib/scout/exceptions.rb +8 -0
- data/lib/scout/log/color.rb +29 -2
- data/lib/scout/log/progress/util.rb +2 -0
- data/lib/scout/log/progress.rb +2 -0
- data/lib/scout/log.rb +5 -1
- data/lib/scout/misc/digest.rb +1 -3
- data/lib/scout/open/stream.rb +20 -19
- data/lib/scout/tsv/parser.rb +144 -0
- data/lib/scout/tsv.rb +14 -0
- data/lib/scout/work_queue/worker.rb +16 -11
- data/lib/scout/work_queue.rb +48 -21
- data/lib/scout/workflow/step/info.rb +2 -2
- data/lib/scout/workflow/step.rb +2 -1
- data/lib/scout/workflow/task.rb +2 -2
- data/scout-gear.gemspec +7 -3
- data/test/scout/open/test_stream.rb +1 -1
- data/test/scout/test_semaphore.rb +1 -1
- data/test/scout/test_tsv.rb +34 -0
- data/test/scout/test_work_queue.rb +28 -0
- data/test/scout/tsv/test_parser.rb +87 -0
- data/test/scout/work_queue/test_worker.rb +48 -0
- metadata +6 -2
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
         | 
| 2 | 
            +
            require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            class TestTSV < Test::Unit::TestCase
         | 
| 5 | 
            +
              def test_open_with_data
         | 
| 6 | 
            +
                content =<<-'EOF'
         | 
| 7 | 
            +
            #: :sep=/\s+/#:type=:double#:merge=:concat
         | 
| 8 | 
            +
            #Id    ValueA    ValueB    OtherID
         | 
| 9 | 
            +
            row1    a|aa|aaa    b    Id1|Id2
         | 
| 10 | 
            +
            row2    A    B    Id3
         | 
| 11 | 
            +
            row2    a    a    id3
         | 
| 12 | 
            +
                EOF
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                content2 =<<-'EOF'
         | 
| 15 | 
            +
            #: :sep=/\s+/#:type=:double#:merge=:concat
         | 
| 16 | 
            +
            #Id    ValueA    ValueB    OtherID
         | 
| 17 | 
            +
            row3    a|aa|aaa    b    Id1|Id2
         | 
| 18 | 
            +
            row4    A    B    Id3
         | 
| 19 | 
            +
            row4    a    a    id3
         | 
| 20 | 
            +
                EOF
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                tsv = TmpFile.with_file(content) do |filename|
         | 
| 23 | 
            +
                  TSV.open(filename)
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
             | 
| 26 | 
            +
                TmpFile.with_file(content2) do |filename|
         | 
| 27 | 
            +
                  TSV.open(filename, :data => tsv)
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                assert_include tsv.keys, 'row4'
         | 
| 31 | 
            +
                assert_include tsv.keys, 'row1'
         | 
| 32 | 
            +
              end
         | 
| 33 | 
            +
            end
         | 
| 34 | 
            +
             | 
| @@ -89,5 +89,33 @@ class TestWorkQueue < Test::Unit::TestCase | |
| 89 89 |  | 
| 90 90 | 
             
                assert_equal 0, res.length
         | 
| 91 91 | 
             
              end
         | 
| 92 | 
            +
             | 
| 93 | 
            +
              def test_queue_error
         | 
| 94 | 
            +
                num = 10
         | 
| 95 | 
            +
                reps = 10_000
         | 
| 96 | 
            +
             | 
| 97 | 
            +
                q = WorkQueue.new num do |obj|
         | 
| 98 | 
            +
                  raise ScoutException if rand < 1
         | 
| 99 | 
            +
                  [Process.pid.to_s, obj.to_s] * " "
         | 
| 100 | 
            +
                end
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                res = []
         | 
| 103 | 
            +
                q.process do |out|
         | 
| 104 | 
            +
                  res << out
         | 
| 105 | 
            +
                end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                pid = Process.fork do
         | 
| 108 | 
            +
                  reps.times do |i|
         | 
| 109 | 
            +
                    q.write i
         | 
| 110 | 
            +
                  end
         | 
| 111 | 
            +
                end
         | 
| 112 | 
            +
             | 
| 113 | 
            +
                Process.wait pid
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                assert_raise ScoutException do
         | 
| 116 | 
            +
                  q.close
         | 
| 117 | 
            +
                  q.join
         | 
| 118 | 
            +
                end
         | 
| 119 | 
            +
              end
         | 
| 92 120 | 
             
            end
         | 
| 93 121 |  | 
| @@ -0,0 +1,87 @@ | |
| 1 | 
            +
            require File.expand_path(__FILE__).sub(%r(/test/.*), '/test/test_helper.rb')
         | 
| 2 | 
            +
            require File.expand_path(__FILE__).sub(%r(.*/test/), '').sub(/test_(.*)\.rb/,'\1')
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            require 'scout/tsv'
         | 
| 5 | 
            +
            class TestTSVParser < Test::Unit::TestCase
         | 
| 6 | 
            +
             | 
| 7 | 
            +
              def test_parse_line
         | 
| 8 | 
            +
                line = (0..10).to_a * "\t"
         | 
| 9 | 
            +
                key, values = TSV.parse_line(line)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                assert_equal "0", key
         | 
| 12 | 
            +
                assert_equal (1..10).collect{|v| v.to_s }, values
         | 
| 13 | 
            +
              end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              def test_parse_double
         | 
| 16 | 
            +
                line = (0..10).collect{|v| v == 0 ? v : [v,v] * "|" } * "\t"
         | 
| 17 | 
            +
                key, values = TSV.parse_line(line, type: :double, cast: :to_i)
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                assert_equal "0", key
         | 
| 20 | 
            +
                assert_equal (1..10).collect{|v| [v,v] }, values
         | 
| 21 | 
            +
              end
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              def __test_benchmark
         | 
| 24 | 
            +
                num = 10_000
         | 
| 25 | 
            +
                txt = num.times.inject(nil) do |acc,i|
         | 
| 26 | 
            +
                  (acc.nil? ? "" : acc << "\n") << (0..10).collect{|v| v == 0 ? i : [v,v] * "|" } * "\t"
         | 
| 27 | 
            +
                end 
         | 
| 28 | 
            +
             | 
| 29 | 
            +
                txt = StringIO.new(([txt] * (10))*"\n")
         | 
| 30 | 
            +
                Misc.benchmark 1 do
         | 
| 31 | 
            +
                #Misc.profile do
         | 
| 32 | 
            +
                  data = TSV.parse_stream(txt, fix: true, type: :double, bar: true, merge: :concat)
         | 
| 33 | 
            +
                  assert_equal num, data.size
         | 
| 34 | 
            +
                  assert_equal 20, data['1'][0].length
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
             | 
| 38 | 
            +
              def test_parse_stream
         | 
| 39 | 
            +
                lines =<<-EOF
         | 
| 40 | 
            +
            1 2 3 4 5
         | 
| 41 | 
            +
            11 12 13 14 15
         | 
| 42 | 
            +
                EOF
         | 
| 43 | 
            +
             | 
| 44 | 
            +
                lines = StringIO.new lines
         | 
| 45 | 
            +
             | 
| 46 | 
            +
                data = TSV.parse_stream lines, sep: " "
         | 
| 47 | 
            +
                assert_equal data["1"], %w(2 3 4 5)
         | 
| 48 | 
            +
              end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
              def test_parse_stream_block
         | 
| 51 | 
            +
                lines =<<-EOF
         | 
| 52 | 
            +
            1 2 3 4 5
         | 
| 53 | 
            +
            11 12 13 14 15
         | 
| 54 | 
            +
                EOF
         | 
| 55 | 
            +
             | 
| 56 | 
            +
                lines = StringIO.new lines
         | 
| 57 | 
            +
             | 
| 58 | 
            +
                sum = 0
         | 
| 59 | 
            +
                res = TSV.parse_stream(lines, sep: " ") do |k,values|
         | 
| 60 | 
            +
                  sum += values.inject(0){|acc,i| acc += i.to_i }
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
                assert_equal 68, sum
         | 
| 63 | 
            +
              end
         | 
| 64 | 
            +
             | 
| 65 | 
            +
              def test_parse_header
         | 
| 66 | 
            +
                header =<<-EOF
         | 
| 67 | 
            +
            #: :sep=" "
         | 
| 68 | 
            +
            #Key ValueA ValueB
         | 
| 69 | 
            +
            k A B
         | 
| 70 | 
            +
                EOF
         | 
| 71 | 
            +
                header = StringIO.new header
         | 
| 72 | 
            +
             | 
| 73 | 
            +
                assert_equal "Key", TSV.parse_header(header)[1]
         | 
| 74 | 
            +
              end
         | 
| 75 | 
            +
             | 
| 76 | 
            +
              def test_parse
         | 
| 77 | 
            +
                header =<<-EOF
         | 
| 78 | 
            +
            #: :sep=" "#:type=:double
         | 
| 79 | 
            +
            #Key ValueA ValueB
         | 
| 80 | 
            +
            k a|A b|B
         | 
| 81 | 
            +
                EOF
         | 
| 82 | 
            +
                header = StringIO.new header
         | 
| 83 | 
            +
             | 
| 84 | 
            +
                tsv = TSV.parse(header)
         | 
| 85 | 
            +
                assert_equal 'a', tsv['k'][0][0]
         | 
| 86 | 
            +
              end
         | 
| 87 | 
            +
            end
         | 
| @@ -95,5 +95,53 @@ class TestQueueWorker < Test::Unit::TestCase | |
| 95 95 | 
             
                output.clean
         | 
| 96 96 | 
             
              end
         | 
| 97 97 |  | 
| 98 | 
            +
              def test_process_exception
         | 
| 99 | 
            +
                input = WorkQueue::Socket.new
         | 
| 100 | 
            +
                output = WorkQueue::Socket.new
         | 
| 101 | 
            +
             | 
| 102 | 
            +
                workers = 10.times.collect{ WorkQueue::Worker.new }
         | 
| 103 | 
            +
                workers.each do |w|
         | 
| 104 | 
            +
                  w.process(input, output) do |obj|
         | 
| 105 | 
            +
                    raise ScoutException
         | 
| 106 | 
            +
                    [Process.pid, obj.inspect] * " "
         | 
| 107 | 
            +
                  end
         | 
| 108 | 
            +
                end
         | 
| 109 | 
            +
             | 
| 110 | 
            +
                read = Thread.new do 
         | 
| 111 | 
            +
                  Thread.current.report_on_exception = false
         | 
| 112 | 
            +
                  begin
         | 
| 113 | 
            +
                    while obj = output.read
         | 
| 114 | 
            +
                      if DoneProcessing === obj
         | 
| 115 | 
            +
                        pid = obj.pid
         | 
| 116 | 
            +
                        workers.delete_if{|w| w.pid = pid }
         | 
| 117 | 
            +
                        break if workers.empty?
         | 
| 118 | 
            +
                      end
         | 
| 119 | 
            +
                      raise obj if Exception === obj
         | 
| 120 | 
            +
                    end
         | 
| 121 | 
            +
                  end
         | 
| 122 | 
            +
                end
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                write = Thread.new do
         | 
| 125 | 
            +
                  Thread.report_on_exception = false
         | 
| 126 | 
            +
                  100.times do |i|
         | 
| 127 | 
            +
                    input.write i
         | 
| 128 | 
            +
                  end
         | 
| 129 | 
            +
                  10.times do
         | 
| 130 | 
            +
                    input.write DoneProcessing.new
         | 
| 131 | 
            +
                  end
         | 
| 132 | 
            +
                  input.close_write
         | 
| 133 | 
            +
                end
         | 
| 134 | 
            +
             | 
| 135 | 
            +
                write.join
         | 
| 136 | 
            +
             | 
| 137 | 
            +
                assert_raise ScoutException do
         | 
| 138 | 
            +
                  read.join
         | 
| 139 | 
            +
                end
         | 
| 140 | 
            +
             | 
| 141 | 
            +
                WorkQueue::Worker.join workers
         | 
| 142 | 
            +
                input.clean
         | 
| 143 | 
            +
                output.clean
         | 
| 144 | 
            +
              end
         | 
| 145 | 
            +
             | 
| 98 146 | 
             
            end
         | 
| 99 147 |  | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: scout-gear
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 7.1.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Miguel Vazquez
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2023- | 
| 11 | 
            +
            date: 2023-05-01 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: term-ansicolor
         | 
| @@ -146,6 +146,8 @@ files: | |
| 146 146 | 
             
            - lib/scout/simple_opt/parse.rb
         | 
| 147 147 | 
             
            - lib/scout/simple_opt/setup.rb
         | 
| 148 148 | 
             
            - lib/scout/tmpfile.rb
         | 
| 149 | 
            +
            - lib/scout/tsv.rb
         | 
| 150 | 
            +
            - lib/scout/tsv/parser.rb
         | 
| 149 151 | 
             
            - lib/scout/work_queue.rb
         | 
| 150 152 | 
             
            - lib/scout/work_queue/socket.rb
         | 
| 151 153 | 
             
            - lib/scout/work_queue/worker.rb
         | 
| @@ -206,8 +208,10 @@ files: | |
| 206 208 | 
             
            - test/scout/test_resource.rb
         | 
| 207 209 | 
             
            - test/scout/test_semaphore.rb
         | 
| 208 210 | 
             
            - test/scout/test_tmpfile.rb
         | 
| 211 | 
            +
            - test/scout/test_tsv.rb
         | 
| 209 212 | 
             
            - test/scout/test_work_queue.rb
         | 
| 210 213 | 
             
            - test/scout/test_workflow.rb
         | 
| 214 | 
            +
            - test/scout/tsv/test_parser.rb
         | 
| 211 215 | 
             
            - test/scout/work_queue/test_socket.rb
         | 
| 212 216 | 
             
            - test/scout/work_queue/test_worker.rb
         | 
| 213 217 | 
             
            - test/scout/workflow/step/test_info.rb
         |