httpx 0.0.4 → 0.0.5

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: 6dac1e1e43e2c1935f8fd0c1807d1d29bf782f27
4
- data.tar.gz: e5786862d65ee9807f31e9ca847d8ca9125dce29
3
+ metadata.gz: 3fd5760406dc7a2cb5abb040160144fb8a788a19
4
+ data.tar.gz: 2fcf4228f1ff06b7621b7e688e9fe2a173e39096
5
5
  SHA512:
6
- metadata.gz: 5a5f4106511049f7dc22c6a44aee01cf560827b553b05aede40e5ff11fb20d52213d754488cec4419a895c9a7eef9c77517242f4553ee0d1b797cfe1cbc4726c
7
- data.tar.gz: a2390e810c8d6738a9d13fce36bc0cbfcd9e4a7eeb88e5d7a9919a8311dc61404cb3328569836eff86cbabe33b63daef9107d9fe3938136af06b6c78b57f953d
6
+ metadata.gz: adc85e755255e5e460bce9a84c5e5c3c03a8271702eed4373aded5002d71b28d99787bc4f4837d3bee4634f58fbe5541cf6f3a0282c54e4b3c5d86233f7b581c
7
+ data.tar.gz: 58f6d7c64c527bb654a8ab7107eff77315ad4c3d6f17da06b081be0d25345169736b78082b9e4335373dde707e071823d2bafa74102336535f9af07234bbd3d6
@@ -66,6 +66,7 @@ module HTTPX
66
66
  @write_buffer = Buffer.new(BUFFER_SIZE)
67
67
  @pending = []
68
68
  @state = :idle
69
+ on(:error) { |ex| on_error(ex) }
69
70
  end
70
71
 
71
72
  def match?(uri)
@@ -204,6 +205,10 @@ module HTTPX
204
205
  transition(:open)
205
206
  end
206
207
  end
208
+ parser.on(:error) do |request, ex|
209
+ response = ErrorResponse.new(ex, 0, @options)
210
+ emit(:response, request, response)
211
+ end
207
212
  parser
208
213
  end
209
214
 
@@ -230,12 +235,18 @@ module HTTPX
230
235
  Errno::EADDRNOTAVAIL,
231
236
  OpenSSL::SSL::SSLError => e
232
237
  # connect errors, exit gracefully
233
- emit_error(e)
238
+ handle_error(e)
234
239
  @state = :closed
235
240
  emit(:close)
236
241
  end
237
242
 
238
- def emit_error(e)
243
+ def on_error(ex)
244
+ handle_error(ex)
245
+ reset
246
+ end
247
+
248
+ def handle_error(e)
249
+ parser.handle_error(e)
239
250
  response = ErrorResponse.new(e, 0, @options)
240
251
  @pending.each do |request, _|
241
252
  emit(:response, request, response)
@@ -12,7 +12,6 @@ module HTTPX
12
12
  def initialize(buffer, options)
13
13
  @options = Options.new(options)
14
14
  @max_concurrent_requests = @options.max_concurrent_requests
15
- @retries = options.max_retries
16
15
  @parser = HTTP::Parser.new(self)
17
16
  @parser.header_value_type = :arrays
18
17
  @buffer = buffer
@@ -141,13 +140,19 @@ module HTTPX
141
140
  response << @parser.upgrade_data
142
141
  throw(:called)
143
142
  end
144
- close
143
+ reset
145
144
  send(@pending.shift) unless @pending.empty?
146
145
  return unless response.headers["connection"] == "close"
147
146
  disable_concurrency
148
147
  emit(:reset)
149
148
  end
150
149
 
150
+ def handle_error(ex)
151
+ @requests.each do |request|
152
+ emit(:error, request, ex)
153
+ end
154
+ end
155
+
151
156
  private
152
157
 
153
158
  def disable_concurrency
@@ -13,7 +13,6 @@ module HTTPX
13
13
  @options = Options.new(options)
14
14
  @max_concurrent_requests = @options.max_concurrent_requests
15
15
  init_connection
16
- @retries = options.max_retries
17
16
  @pending = []
18
17
  @streams = {}
19
18
  @drains = {}
@@ -60,6 +59,12 @@ module HTTPX
60
59
  end
61
60
  end
62
61
 
62
+ def handle_error(ex)
63
+ @streams.each_key do |request|
64
+ emit(:error, request, ex)
65
+ end
66
+ end
67
+
63
68
  private
64
69
 
65
70
  def headline_uri(request)
@@ -151,8 +156,12 @@ module HTTPX
151
156
 
152
157
  def on_stream_close(stream, request, error)
153
158
  return handle(request, stream) if request.expects?
154
- response = request.response || ErrorResponse.new(Error.new(error), @retries, @options)
155
- emit(:response, request, response)
159
+ if error
160
+ emit(:error, request, error)
161
+ else
162
+ response = request.response
163
+ emit(:response, request, response)
164
+ end
156
165
  log(level: 2, label: "#{stream.id}: ") { "closing stream" }
157
166
 
158
167
  @streams.delete(request)
@@ -111,11 +111,7 @@ module HTTPX
111
111
  responses << response
112
112
  requests.shift
113
113
 
114
- break if requests.empty?
115
- rescue TimeoutError => e
116
- responses << ErrorResponse.new(e, 0, @options) while requests.shift
117
- @connection.reset
118
- break
114
+ break if requests.empty? || !@connection.running?
119
115
  end
120
116
  end
121
117
  responses
@@ -16,13 +16,18 @@ module HTTPX
16
16
  !@channels.empty?
17
17
  end
18
18
 
19
- def next_tick(timeout: @timeout.timeout)
19
+ def next_tick
20
+ timeout = @timeout.timeout
20
21
  @selector.select(timeout) do |monitor|
21
22
  if (channel = monitor.value)
22
23
  channel.call
23
24
  end
24
25
  monitor.interests = channel.interests
25
26
  end
27
+ rescue TimeoutError => ex
28
+ @channels.each do |ch|
29
+ ch.emit(:error, ex)
30
+ end
26
31
  end
27
32
 
28
33
  def close
@@ -30,10 +35,6 @@ module HTTPX
30
35
  next_tick until @channels.empty?
31
36
  end
32
37
 
33
- def reset
34
- @channels.each(&:reset)
35
- end
36
-
37
38
  def build_channel(uri, **options)
38
39
  channel = Channel.by(uri, @options.merge(options))
39
40
  register_channel(channel)
@@ -137,6 +137,10 @@ module HTTPX
137
137
  when :closed
138
138
  return unless @state == :connected
139
139
  end
140
+ do_transition(nextstate)
141
+ end
142
+
143
+ def do_transition(nextstate)
140
144
  log(level: 1, label: "#{inspect}: ") { nextstate.to_s }
141
145
  @state = nextstate
142
146
  end
@@ -240,7 +244,7 @@ module HTTPX
240
244
  return unless @state == :negotiated ||
241
245
  @state == :connected
242
246
  end
243
- super
247
+ do_transition(nextstate)
244
248
  end
245
249
  end
246
250
  module IO
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module HTTPX
4
- VERSION = "0.0.4"
4
+ VERSION = "0.0.5"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: httpx
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.4
4
+ version: 0.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tiago Cardoso
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-29 00:00:00.000000000 Z
11
+ date: 2018-04-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: http-2
@@ -145,7 +145,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
145
  version: '0'
146
146
  requirements: []
147
147
  rubyforge_project:
148
- rubygems_version: 2.6.14
148
+ rubygems_version: 2.6.14.1
149
149
  signing_key:
150
150
  specification_version: 4
151
151
  summary: HTTPX, to the future, and beyond