turbot-runner 0.0.23 → 0.0.24

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- NGI0ZTFhZmVhMGZiNmU0NzRiYjkzYmZlZjIyMWEzMWY3MDU0NTIwNA==
4
+ YTNmMmJmZDNkNDllMTk0MjFmYTkxOTMxZWI3NzNiYjdlYzQ2NzgzMg==
5
5
  data.tar.gz: !binary |-
6
- M2JlMWRiMjRlZjI0MDI5MTAxZjVhZjEwZDFlNTVkMGJmOGMxNDQwNA==
6
+ MThhNmM4ZGM3OTU2NDAyZGRkM2EzZTE2ZTA4ZDQzMjFmNTE3ODFmNw==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZWYzMjIxYzAzNDU0YWRlNzNjYjNmODQyY2E0MTBiNzQyMzc0Yjc4M2U2NThj
10
- MjdiZDVkZTA1Nzg5ZmVhNmUxMWZmMzA3OTdlOTJlZDJkZmQxODkxMTg1OGM4
11
- ZmMxZjJmN2M1YWIzM2NiOTA1ZjM5Nzg3NzY2YzM3NzRhZjJiM2Q=
9
+ Yjc0NjdiZTc2NWE1NzAwMGIzMTBhNTIxNGE5YmQ4ZjFmMWMwZjcyMWJlYWFk
10
+ ZDM0YjcyNDRiYTE2MjMzOTQ4MDA4YzkwNjAzOGUyOGNjNmI3Y2U3YzEwODdk
11
+ YmQ1ZjYzYjdmNGY5ODIwZjZhMjQ5ODQ5OThlNWU4MDg1M2I5ODM=
12
12
  data.tar.gz: !binary |-
13
- OWJmMDcwMTFiYmNmMmJlOThhYzQ1ZWRhZGQ5ZmU4NTZkYjMwYjVmZmUzM2E3
14
- MzBhZTgzYjk5NmMxNjBlM2MzZDFlOTQ4ZTJiZTI0NGMwNDYxNDA5NmM3MDBl
15
- OGYwMWI0ZDg3ZDI4NmYyNGQ3MTAzY2VkZjkzOGQyY2M2OWZjNTU=
13
+ YjNkMDAyMTBkYjY4YTg5ZWM5NDdlOGE2OWE5OGNkMzRkMDI1MjA4OWJjMDQ3
14
+ NTJiODM4MzIzNDQ2ZDg2ZTNlZDJkYTNmMzk4ODExODlhOTdjNTU0NDc5MmI1
15
+ NWIyMTY2MTVjOGI1OWYxNmNjMzJlOTdlZDU1Yzk0NzQxODc1ZmQ=
@@ -1,3 +1,3 @@
1
1
  module TurbotRunner
2
- VERSION = '0.0.23'
2
+ VERSION = '0.0.24'
3
3
  end
data/lib/turbot_runner.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  #require 'active_support/core_ext/hash/slice'
2
2
  #require 'active_support/core_ext/object/to_query'
3
3
  require 'json'
4
+ require 'json-schema'
4
5
  require 'open3'
5
6
  require 'set'
6
7
  require 'timeout'
8
+ require 'io/wait'
7
9
 
8
10
  module TurbotRunner
9
11
  class ScriptError < StandardError; end
@@ -128,20 +130,33 @@ module TurbotRunner
128
130
  @status = :successful
129
131
  handle_successful_run
130
132
  end
133
+
134
+ handle_stderr(scraper_runner.drain_stderr)
135
+
136
+ transformers.each do |transformer|
137
+ runner = transformer['runner']
138
+ handle_stderr(runner.drain_stderr)
139
+ end
140
+
131
141
  rescue ScriptError => e
132
142
  if @interrupted
133
143
  @status = :interrupted
134
144
  handle_interrupted_run
135
145
  else
136
146
  @status = :failed
137
- @error = e
138
147
  handle_failed_run
139
148
  end
140
149
  end
141
150
  ensure
151
+ handle_stderr(scraper_runner.drain_stderr)
142
152
  scraper_runner.close unless scraper_runner.nil?
153
+
143
154
  transformers.each do |transformer|
144
- transformer['runner'].close unless transformer['runner'].nil?
155
+ runner = transformer['runner']
156
+ if !runner.nil?
157
+ handle_stderr(runner.drain_stderr)
158
+ runner.close
159
+ end
145
160
  end
146
161
  end
147
162
 
@@ -226,8 +241,8 @@ module TurbotRunner
226
241
  def handle_interrupted_run
227
242
  end
228
243
 
229
- def handle_failed_run
230
- raise NotImplementedError
244
+ def handle_stderr(data)
245
+ $stderr.write(data)
231
246
  end
232
247
 
233
248
  def scraper_file
@@ -278,6 +293,14 @@ module TurbotRunner
278
293
  end
279
294
  end
280
295
 
296
+ def drain_stderr
297
+ output = ''
298
+ while @stderr.ready?
299
+ output += @stderr.read(256)
300
+ end
301
+ output
302
+ end
303
+
281
304
  def success?
282
305
  if finished?
283
306
  @wait_thread.value.success?
@@ -291,7 +314,7 @@ module TurbotRunner
291
314
  end
292
315
 
293
316
  def raise_if_failed!
294
- raise TurbotRunner::ScriptError.new(@stderr.read()) if failed?
317
+ raise TurbotRunner::ScriptError if failed?
295
318
  end
296
319
 
297
320
  def finished?
@@ -1,6 +1,11 @@
1
+ from __future__ import print_function
2
+
1
3
  import json
4
+ import sys
5
+
6
+ print('hello from python', file=sys.stderr)
2
7
 
3
- print json.dumps({'n': 5, 'hello': 'hello, 5'})
4
- print json.dumps({'n': 6, 'hello': 'hello, 6'})
5
- print json.dumps({'n': 7})
6
- print json.dumps({'n': 8, 'hello': 'hello, 8'})
8
+ print(json.dumps({'n': 5, 'hello': 'hello, 5'}))
9
+ print(json.dumps({'n': 6, 'hello': 'hello, 6'}))
10
+ print(json.dumps({'n': 7}))
11
+ print(json.dumps({'n': 8, 'hello': 'hello, 8'}))
@@ -1,5 +1,7 @@
1
1
  require 'json'
2
2
 
3
+ $stderr.puts('hello from ruby')
4
+
3
5
  puts({:n => 1, :hello => 'hello, 1'}.to_json)
4
6
  puts({:n => 2, :hello => 'hello, 2'}.to_json)
5
7
  puts({:n => 3}.to_json)
@@ -1,4 +1,6 @@
1
1
  require 'json'
2
2
 
3
+ $stderr.puts('hello')
4
+
3
5
  puts({h: 1}.to_json)
4
6
  raise "oops"
@@ -9,6 +9,9 @@ class SpecRunner < TurbotRunner::BaseRunner
9
9
  []
10
10
  end
11
11
  end
12
+
13
+ def handle_failed_run
14
+ end
12
15
  end
13
16
 
14
17
  class BrokenRunner < TurbotRunner::BaseRunner
@@ -25,6 +28,14 @@ end
25
28
 
26
29
 
27
30
  describe TurbotRunner::BaseRunner do
31
+ before do
32
+ $stderr = StringIO.new
33
+ end
34
+
35
+ after do
36
+ $stderr = STDERR
37
+ end
38
+
28
39
  it 'can run a ruby bot' do
29
40
  runner = SpecRunner.new('spec/dummy-bot-ruby')
30
41
 
@@ -37,6 +48,7 @@ describe TurbotRunner::BaseRunner do
37
48
  expect(runner).to receive(:handle_valid_record).with({'n' => 4, 'goodbye' => 'goodbye, 4'}, 'goodbye')
38
49
  expect(runner).to receive(:handle_successful_run)
39
50
  runner.run
51
+ expect($stderr.string).to eq("hello from ruby\n")
40
52
  end
41
53
 
42
54
  it 'can run a python bot' do
@@ -51,6 +63,7 @@ describe TurbotRunner::BaseRunner do
51
63
  expect(runner).to receive(:handle_valid_record).with({'n' => 8, 'goodbye' => 'goodbye, 8'}, 'goodbye')
52
64
  expect(runner).to receive(:handle_successful_run)
53
65
  runner.run
66
+ expect($stderr.string).to eq("hello from python\n")
54
67
  end
55
68
 
56
69
  describe "broken bots" do
@@ -62,10 +75,11 @@ describe TurbotRunner::BaseRunner do
62
75
  runner.run
63
76
  end
64
77
 
65
- it 'should set `error` attribute of runner with exception message' do
78
+ it 'should write exception to stderr' do
66
79
  runner = BrokenRunner.new('spec/dummy-broken-bot-ruby')
67
80
  runner.run
68
- expect(runner.error.to_s).to match(/oops/)
81
+ expect($stderr.string).to match(/^hello/)
82
+ expect($stderr.string).to match(/oops/)
69
83
  end
70
84
  end
71
85
 
@@ -77,6 +91,12 @@ describe TurbotRunner::BaseRunner do
77
91
  expect(runner).to receive(:handle_failed_run)
78
92
  runner.run
79
93
  end
94
+
95
+ it 'should write exception to stderr' do
96
+ runner = BrokenRunner.new('spec/dummy-broken-bot-ruby')
97
+ runner.run
98
+ expect($stderr.string).to match(/oops/)
99
+ end
80
100
  end
81
101
 
82
102
  describe "sucessful bot with failing transformer" do
@@ -86,6 +106,12 @@ describe TurbotRunner::BaseRunner do
86
106
  expect(runner).to receive(:handle_failed_run) # the transformer breaks immediately
87
107
  runner.run
88
108
  end
109
+
110
+ it 'should write exception to stderr' do
111
+ runner = BrokenRunner.new('spec/dummy-broken-bot-ruby')
112
+ runner.run
113
+ expect($stderr.string).to match(/oops/)
114
+ end
89
115
  end
90
116
  end
91
117
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turbot-runner
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.23
4
+ version: 0.0.24
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenCorporates
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-29 00:00:00.000000000 Z
11
+ date: 2014-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema