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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 89081124a0ce058991107658acc89152c8d4118e
4
- data.tar.gz: b92af38225ebdbd0592f508b4e5ddd7fb6c6983c
3
+ metadata.gz: c3cc5dc93a1f84864b1550821fca09d2305b220e
4
+ data.tar.gz: 8586c686d6519573534a9991288bb7bfe3ac7bf8
5
5
  SHA512:
6
- metadata.gz: 232eeb5ef89f2e2f6c83266eb95a777ecccfa891e9b7fed8ea88c51c332183c7ffec3aaaed8eb259c66a540a0d86d0152fb65612aab779f463cd8ad7b24f6249
7
- data.tar.gz: acc1b94b7a6ea21c695a0f44ef3d332a601f0ac3c77af43499c79cb386424aa0958498a5d2cb62b4184f83eb96b04356b99129b3f693f81663767db02e257cf4
6
+ metadata.gz: 2e7b2e85e0ab75834e490f0917cb7dd7e1fbae1fe0126519771349d244bec66e2422f9c483cd813bfb648e7745dfe5fefc13d710ff8531268c4c45ef7cec1c06
7
+ data.tar.gz: e51bdaf000aca2f5b471428ca9575d488516766ea2626cfcc92400917b25b76468c53d3476023ae731bca7401c10699839d16efec78716019f14c2b3ff0207fa
data/LICENSE.txt CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2016 ITRP Inc.
1
+ Copyright (c) 2017 ITRP Inc.
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person obtaining
4
4
  a copy of this software and associated documentation files (the
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
- raise ::Itrp::Exception.new("Unable to monitor progress for #{type} import. #{response.message}") unless response.valid?
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
- raise ::Itrp::Exception.new("Unable to monitor progress for '#{data[:type]}' export. #{response.message}") unless response.valid?
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." }
@@ -1,5 +1,5 @@
1
1
  module Itrp
2
2
  class Client
3
- VERSION = '1.1.0'
3
+ VERSION = '1.1.1'
4
4
  end
5
5
  end
@@ -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']).to_return(@import_queued_response, @import_processing_response, @import_done_response)
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(3)
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(3)
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']).to_return(@import_queued_response, @import_processing_response).then.to_raise(StandardError.new('network error'))
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(3)
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']).to_return(@export_queued_response, @export_processing_response, @export_done_response)
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(3)
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']).to_return(@export_queued_response, @export_processing_response).then.to_raise(StandardError.new('network error'))
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(3)
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.0
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: 2016-11-25 00:00:00.000000000 Z
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.8
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