itrp-client 1.1.0 → 1.1.1
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/LICENSE.txt +1 -1
- data/lib/itrp/client.rb +10 -2
- data/lib/itrp/client/version.rb +1 -1
- data/spec/lib/itrp/client_spec.rb +23 -10
- metadata +22 -22
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c3cc5dc93a1f84864b1550821fca09d2305b220e
|
4
|
+
data.tar.gz: 8586c686d6519573534a9991288bb7bfe3ac7bf8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e7b2e85e0ab75834e490f0917cb7dd7e1fbae1fe0126519771349d244bec66e2422f9c483cd813bfb648e7745dfe5fefc13d710ff8531268c4c45ef7cec1c06
|
7
|
+
data.tar.gz: e51bdaf000aca2f5b471428ca9575d488516766ea2626cfcc92400917b25b76468c53d3476023ae731bca7401c10699839d16efec78716019f14c2b3ff0207fa
|
data/LICENSE.txt
CHANGED
data/lib/itrp/client.rb
CHANGED
@@ -132,7 +132,11 @@ module Itrp
|
|
132
132
|
token = response[:token]
|
133
133
|
while true
|
134
134
|
response = get("/import/#{token}")
|
135
|
-
|
135
|
+
unless response.valid?
|
136
|
+
sleep(5)
|
137
|
+
response = get("/import/#{token}") # single retry to recover from a network error
|
138
|
+
raise ::Itrp::Exception.new("Unable to monitor progress for #{type} import. #{response.message}") unless response.valid?
|
139
|
+
end
|
136
140
|
# wait 30 seconds while the response is OK and import is still busy
|
137
141
|
break unless ['queued', 'processing'].include?(response[:state])
|
138
142
|
@logger.debug { "Import of '#{csv.path}' is #{response[:state]}. Checking again in 30 seconds." }
|
@@ -165,7 +169,11 @@ module Itrp
|
|
165
169
|
token = response[:token]
|
166
170
|
while true
|
167
171
|
response = get("/export/#{token}")
|
168
|
-
|
172
|
+
unless response.valid?
|
173
|
+
sleep(5)
|
174
|
+
response = get("/export/#{token}") # single retry to recover from a network error
|
175
|
+
raise ::Itrp::Exception.new("Unable to monitor progress for '#{data[:type]}' export. #{response.message}") unless response.valid?
|
176
|
+
end
|
169
177
|
# wait 30 seconds while the response is OK and export is still busy
|
170
178
|
break unless ['queued', 'processing'].include?(response[:state])
|
171
179
|
@logger.debug { "Export of '#{data[:type]}' is #{response[:state]}. Checking again in 30 seconds." }
|
data/lib/itrp/client/version.rb
CHANGED
@@ -287,7 +287,6 @@ describe Itrp::Client do
|
|
287
287
|
@import_processing_response = {body: {state: 'processing'}.to_json}
|
288
288
|
@import_done_response = {body: {state: 'done', results: {errors: 0, updated: 1, created: 1, failures: 0, unchanged: 0, deleted: 0}}.to_json}
|
289
289
|
@import_failed_response = {body: {state: 'error', message: 'Invalid byte sequence in UTF-8 on line 2', results: {errors: 1, updated: 1, created: 0, failures: 1, unchanged: 0, deleted: 0}}.to_json}
|
290
|
-
@server_failed_response = {body: {state: 'error', message: 'Invalid byte sequence in UTF-8 on line 2', results: {errors: 1, updated: 1, created: 0, failures: 1, unchanged: 0, deleted: 0}}.to_json}
|
291
290
|
allow(@client).to receive(:sleep)
|
292
291
|
end
|
293
292
|
|
@@ -307,7 +306,10 @@ describe Itrp::Client do
|
|
307
306
|
|
308
307
|
it 'should wait for the import to complete' do
|
309
308
|
stub_request(:post, 'https://api.itrp.com/v1/import').with(basic_auth: ['secret', 'x']).with(body: @multi_part_body, headers: @multi_part_headers).to_return(body: {token: '68ef5ef0f64c0'}.to_json)
|
310
|
-
progress_stub = stub_request(:get, 'https://api.itrp.com/v1/import/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
|
309
|
+
progress_stub = stub_request(:get, 'https://api.itrp.com/v1/import/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
|
310
|
+
.to_return(@import_queued_response, @import_processing_response)
|
311
|
+
.then.to_raise(StandardError.new('network error'))
|
312
|
+
.then.to_return(@import_done_response)
|
311
313
|
|
312
314
|
# verify the correct log statement are made
|
313
315
|
expect_log('Sending POST request to api.itrp.com:443/v1/import', :debug)
|
@@ -320,12 +322,14 @@ describe Itrp::Client do
|
|
320
322
|
expect_log("Response:\n{\n \"state\": \"processing\"\n}", :debug)
|
321
323
|
expect_log("Import of '#{@fixture_dir}/people.csv' is processing. Checking again in 30 seconds.", :debug)
|
322
324
|
expect_log('Sending GET request to api.itrp.com:443/v1/import/68ef5ef0f64c0', :debug)
|
325
|
+
expect_log("Request failed: 500: No Response from Server - network error for 'api.itrp.com:443/v1/import/68ef5ef0f64c0'", :error)
|
326
|
+
expect_log('Sending GET request to api.itrp.com:443/v1/import/68ef5ef0f64c0', :debug)
|
323
327
|
expect_log("Response:\n{\n \"state\": \"done\",\n \"results\": {\n \"errors\": 0,\n \"updated\": 1,\n \"created\": 1,\n \"failures\": 0,\n \"unchanged\": 0,\n \"deleted\": 0\n }\n}", :debug)
|
324
328
|
|
325
329
|
response = @client.import("#{@fixture_dir}/people.csv", 'people', true)
|
326
330
|
expect(response[:state]).to eq('done')
|
327
331
|
expect(response[:results][:updated]).to eq(1)
|
328
|
-
expect(progress_stub).to have_been_requested.times(
|
332
|
+
expect(progress_stub).to have_been_requested.times(4)
|
329
333
|
end
|
330
334
|
|
331
335
|
it 'should wait for the import to fail' do
|
@@ -333,15 +337,17 @@ describe Itrp::Client do
|
|
333
337
|
progress_stub = stub_request(:get, 'https://api.itrp.com/v1/import/68ef5ef0f64c0').with(basic_auth: ['secret', 'x']).to_return(@import_queued_response, @import_processing_response, @import_failed_response)
|
334
338
|
|
335
339
|
expect{ @client.import("#{@fixture_dir}/people.csv", 'people', true) }.to raise_error(Itrp::Exception, "Unable to monitor progress for people import. Invalid byte sequence in UTF-8 on line 2")
|
336
|
-
expect(progress_stub).to have_been_requested.times(
|
340
|
+
expect(progress_stub).to have_been_requested.times(4)
|
337
341
|
end
|
338
342
|
|
339
343
|
it 'should not continue when there is an error connecting to ITRP' do
|
340
344
|
stub_request(:post, 'https://api.itrp.com/v1/import').with(basic_auth: ['secret', 'x']).with(body: @multi_part_body, headers: @multi_part_headers).to_return(body: {token: '68ef5ef0f64c0'}.to_json)
|
341
|
-
progress_stub = stub_request(:get, 'https://api.itrp.com/v1/import/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
|
345
|
+
progress_stub = stub_request(:get, 'https://api.itrp.com/v1/import/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
|
346
|
+
.to_return(@import_queued_response, @import_processing_response)
|
347
|
+
.then.to_raise(StandardError.new('network error')) # twice
|
342
348
|
|
343
349
|
expect{ @client.import("#{@fixture_dir}/people.csv", 'people', true) }.to raise_error(Itrp::Exception, "Unable to monitor progress for people import. 500: No Response from Server - network error for 'api.itrp.com:443/v1/import/68ef5ef0f64c0'")
|
344
|
-
expect(progress_stub).to have_been_requested.times(
|
350
|
+
expect(progress_stub).to have_been_requested.times(4)
|
345
351
|
end
|
346
352
|
|
347
353
|
it 'should return an invalid response in case waiting for progress is false' do
|
@@ -395,7 +401,10 @@ describe Itrp::Client do
|
|
395
401
|
|
396
402
|
it 'should wait for the export to complete' do
|
397
403
|
stub_request(:post, 'https://api.itrp.com/v1/export').with(basic_auth: ['secret', 'x']).with(body: {type: 'people'}).to_return(body: {token: '68ef5ef0f64c0'}.to_json)
|
398
|
-
progress_stub = stub_request(:get, 'https://api.itrp.com/v1/export/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
|
404
|
+
progress_stub = stub_request(:get, 'https://api.itrp.com/v1/export/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
|
405
|
+
.to_return(@export_queued_response, @export_processing_response)
|
406
|
+
.then.to_raise(StandardError.new('network error'))
|
407
|
+
.then.to_return(@export_done_response)
|
399
408
|
|
400
409
|
# verify the correct log statement are made
|
401
410
|
expect_log('Sending POST request to api.itrp.com:443/v1/export', :debug)
|
@@ -408,20 +417,24 @@ describe Itrp::Client do
|
|
408
417
|
expect_log(%(Response:\n{\n "state": "processing"\n}), :debug)
|
409
418
|
expect_log("Export of 'people' is processing. Checking again in 30 seconds.", :debug)
|
410
419
|
expect_log('Sending GET request to api.itrp.com:443/v1/export/68ef5ef0f64c0', :debug)
|
420
|
+
expect_log("Request failed: 500: No Response from Server - network error for 'api.itrp.com:443/v1/export/68ef5ef0f64c0'", :error)
|
421
|
+
expect_log('Sending GET request to api.itrp.com:443/v1/export/68ef5ef0f64c0', :debug)
|
411
422
|
expect_log(%(Response:\n{\n "state": "done",\n "url": "https://download.example.com/export.zip?AWSAccessKeyId=12345"\n}), :debug)
|
412
423
|
|
413
424
|
response = @client.export('people', nil, true)
|
414
425
|
expect(response[:state]).to eq('done')
|
415
426
|
expect(response[:url]).to eq('https://download.example.com/export.zip?AWSAccessKeyId=12345')
|
416
|
-
expect(progress_stub).to have_been_requested.times(
|
427
|
+
expect(progress_stub).to have_been_requested.times(4)
|
417
428
|
end
|
418
429
|
|
419
430
|
it 'should not continue when there is an error connecting to ITRP' do
|
420
431
|
stub_request(:post, 'https://api.itrp.com/v1/export').with(basic_auth: ['secret', 'x']).with(body: {type: 'people'}).to_return(body: {token: '68ef5ef0f64c0'}.to_json)
|
421
|
-
progress_stub = stub_request(:get, 'https://api.itrp.com/v1/export/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
|
432
|
+
progress_stub = stub_request(:get, 'https://api.itrp.com/v1/export/68ef5ef0f64c0').with(basic_auth: ['secret', 'x'])
|
433
|
+
.to_return(@export_queued_response, @export_processing_response)
|
434
|
+
.then.to_raise(StandardError.new('network error')) # twice
|
422
435
|
|
423
436
|
expect{ @client.export('people', nil, true) }.to raise_error(Itrp::Exception, "Unable to monitor progress for 'people' export. 500: No Response from Server - network error for 'api.itrp.com:443/v1/export/68ef5ef0f64c0'")
|
424
|
-
expect(progress_stub).to have_been_requested.times(
|
437
|
+
expect(progress_stub).to have_been_requested.times(4)
|
425
438
|
end
|
426
439
|
|
427
440
|
it 'should return an invalid response in case waiting for progress is false' do
|
metadata
CHANGED
@@ -1,125 +1,125 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: itrp-client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ITRP
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2017-01-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: gem_config
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: activesupport
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: mime-types
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: bundler
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - ~>
|
59
|
+
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '1.3'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - ~>
|
66
|
+
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '1.3'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: rake
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- -
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- -
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rspec
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
|
-
- - ~>
|
87
|
+
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: 3.3.0
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
|
-
- - ~>
|
94
|
+
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: 3.3.0
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: webmock
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - ~>
|
101
|
+
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
103
|
version: '2'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - ~>
|
108
|
+
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '2'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: simplecov
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
114
114
|
requirements:
|
115
|
-
- -
|
115
|
+
- - ">="
|
116
116
|
- !ruby/object:Gem::Version
|
117
117
|
version: '0'
|
118
118
|
type: :development
|
119
119
|
prerelease: false
|
120
120
|
version_requirements: !ruby/object:Gem::Requirement
|
121
121
|
requirements:
|
122
|
-
- -
|
122
|
+
- - ">="
|
123
123
|
- !ruby/object:Gem::Version
|
124
124
|
version: '0'
|
125
125
|
description: Client for accessing the ITRP REST API
|
@@ -156,22 +156,22 @@ licenses:
|
|
156
156
|
metadata: {}
|
157
157
|
post_install_message:
|
158
158
|
rdoc_options:
|
159
|
-
- --charset=UTF-8
|
159
|
+
- "--charset=UTF-8"
|
160
160
|
require_paths:
|
161
161
|
- lib
|
162
162
|
required_ruby_version: !ruby/object:Gem::Requirement
|
163
163
|
requirements:
|
164
|
-
- -
|
164
|
+
- - ">="
|
165
165
|
- !ruby/object:Gem::Version
|
166
166
|
version: 2.0.0
|
167
167
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
168
168
|
requirements:
|
169
|
-
- -
|
169
|
+
- - ">="
|
170
170
|
- !ruby/object:Gem::Version
|
171
171
|
version: '0'
|
172
172
|
requirements: []
|
173
173
|
rubyforge_project:
|
174
|
-
rubygems_version: 2.4.
|
174
|
+
rubygems_version: 2.4.6
|
175
175
|
signing_key:
|
176
176
|
specification_version: 4
|
177
177
|
summary: Client for accessing the ITRP REST API
|