httpx 0.20.5 → 0.21.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/README.md +44 -26
- data/doc/release_notes/0_13_0.md +1 -1
- data/doc/release_notes/0_21_0.md +96 -0
- data/doc/release_notes/0_21_1.md +12 -0
- data/lib/httpx/connection/http1.rb +2 -1
- data/lib/httpx/connection.rb +47 -3
- data/lib/httpx/errors.rb +18 -0
- data/lib/httpx/extensions.rb +8 -4
- data/lib/httpx/io/unix.rb +1 -1
- data/lib/httpx/options.rb +7 -3
- data/lib/httpx/plugins/circuit_breaker/circuit.rb +76 -0
- data/lib/httpx/plugins/circuit_breaker/circuit_store.rb +44 -0
- data/lib/httpx/plugins/circuit_breaker.rb +115 -0
- data/lib/httpx/plugins/cookies.rb +1 -1
- data/lib/httpx/plugins/expect.rb +1 -1
- data/lib/httpx/plugins/multipart/decoder.rb +1 -1
- data/lib/httpx/plugins/proxy.rb +7 -1
- data/lib/httpx/plugins/retries.rb +1 -1
- data/lib/httpx/plugins/webdav.rb +78 -0
- data/lib/httpx/request.rb +15 -25
- data/lib/httpx/resolver/https.rb +2 -7
- data/lib/httpx/resolver/native.rb +19 -8
- data/lib/httpx/response.rb +27 -9
- data/lib/httpx/timers.rb +3 -0
- data/lib/httpx/transcoder/form.rb +1 -1
- data/lib/httpx/transcoder/json.rb +19 -3
- data/lib/httpx/transcoder/xml.rb +57 -0
- data/lib/httpx/transcoder.rb +1 -0
- data/lib/httpx/version.rb +1 -1
- data/sig/buffer.rbs +1 -1
- data/sig/chainable.rbs +1 -0
- data/sig/connection.rbs +12 -4
- data/sig/errors.rbs +13 -0
- data/sig/io.rbs +6 -0
- data/sig/options.rbs +4 -1
- data/sig/plugins/circuit_breaker.rbs +61 -0
- data/sig/plugins/compression/brotli.rbs +1 -1
- data/sig/plugins/compression/deflate.rbs +1 -1
- data/sig/plugins/compression/gzip.rbs +3 -3
- data/sig/plugins/compression.rbs +1 -1
- data/sig/plugins/multipart.rbs +1 -1
- data/sig/plugins/proxy/socks5.rbs +3 -2
- data/sig/plugins/proxy.rbs +1 -1
- data/sig/registry.rbs +5 -4
- data/sig/request.rbs +7 -1
- data/sig/resolver/native.rbs +5 -2
- data/sig/response.rbs +3 -1
- data/sig/timers.rbs +1 -1
- data/sig/transcoder/json.rbs +4 -1
- data/sig/transcoder/xml.rbs +21 -0
- data/sig/transcoder.rbs +2 -2
- data/sig/utils.rbs +2 -2
- metadata +15 -3
data/sig/connection.rbs
CHANGED
@@ -28,7 +28,7 @@ module HTTPX
|
|
28
28
|
attr_reader options: Options
|
29
29
|
attr_writer timers: Timers
|
30
30
|
|
31
|
-
@
|
31
|
+
@type: io_type
|
32
32
|
@window_size: Integer
|
33
33
|
@read_buffer: Buffer
|
34
34
|
@write_buffer: Buffer
|
@@ -40,7 +40,7 @@ module HTTPX
|
|
40
40
|
|
41
41
|
def addresses=: (Array[ipaddr]) -> void
|
42
42
|
|
43
|
-
def match?: (URI::Generic, options) -> bool
|
43
|
+
def match?: (URI::Generic uri, Options options) -> bool
|
44
44
|
|
45
45
|
def mergeable?: (Connection) -> bool
|
46
46
|
|
@@ -54,13 +54,15 @@ module HTTPX
|
|
54
54
|
|
55
55
|
def match_altsvcs?: (URI::Generic uri) -> bool
|
56
56
|
|
57
|
+
def match_altsvc_options?: (URI::Generic uri, Options options) -> bool
|
58
|
+
|
57
59
|
def connecting?: () -> bool
|
58
60
|
|
59
61
|
def inflight?: () -> boolish
|
60
62
|
|
61
63
|
def interests: () -> io_interests?
|
62
64
|
|
63
|
-
def to_io: () -> IO
|
65
|
+
def to_io: () -> ::IO
|
64
66
|
|
65
67
|
def call: () -> void
|
66
68
|
|
@@ -77,7 +79,7 @@ module HTTPX
|
|
77
79
|
|
78
80
|
private
|
79
81
|
|
80
|
-
def initialize: (
|
82
|
+
def initialize: (io_type, URI::Generic, options) -> untyped
|
81
83
|
|
82
84
|
def connect: () -> void
|
83
85
|
|
@@ -103,5 +105,11 @@ module HTTPX
|
|
103
105
|
def handle_error: (StandardError) -> void
|
104
106
|
|
105
107
|
def purge_after_closed: () -> void
|
108
|
+
|
109
|
+
def set_request_timeouts: (Request request) -> void
|
110
|
+
|
111
|
+
def write_timeout_callback: (Request request, Numeric write_timeout) -> void
|
112
|
+
|
113
|
+
def read_timeout_callback: (Request request, Numeric read_timeout, ?singleton(RequestTimeoutError) error_type) -> void
|
106
114
|
end
|
107
115
|
end
|
data/sig/errors.rbs
CHANGED
@@ -23,6 +23,19 @@ module HTTPX
|
|
23
23
|
class ResolveTimeoutError < TimeoutError
|
24
24
|
end
|
25
25
|
|
26
|
+
class RequestTimeoutError < TimeoutError
|
27
|
+
attr_reader request: Request
|
28
|
+
attr_reader response: response?
|
29
|
+
|
30
|
+
def initialize: (Request request, response? response, Numeric timeout) -> void
|
31
|
+
end
|
32
|
+
|
33
|
+
class ReadTimeoutError < RequestTimeoutError
|
34
|
+
end
|
35
|
+
|
36
|
+
class WriteTimeoutError < RequestTimeoutError
|
37
|
+
end
|
38
|
+
|
26
39
|
class ResolveError < Error
|
27
40
|
end
|
28
41
|
|
data/sig/io.rbs
ADDED
data/sig/options.rbs
CHANGED
@@ -10,7 +10,7 @@ module HTTPX
|
|
10
10
|
SETTINGS_TIMEOUT: Integer
|
11
11
|
DEFAULT_OPTIONS: Hash[Symbol, untyped]
|
12
12
|
|
13
|
-
type timeout_type = :connect_timeout | :settings_timeout | :operation_timeout | :keep_alive_timeout | :total_timeout
|
13
|
+
type timeout_type = :connect_timeout | :settings_timeout | :operation_timeout | :keep_alive_timeout | :total_timeout | :read_timeout | :write_timeout | :request_timeout
|
14
14
|
type timeout = Hash[timeout_type, Numeric]
|
15
15
|
|
16
16
|
def self.new: (?options) -> instance
|
@@ -65,6 +65,9 @@ module HTTPX
|
|
65
65
|
# body
|
66
66
|
attr_reader origin: URI::Generic?
|
67
67
|
|
68
|
+
# base_path
|
69
|
+
attr_reader base_path: String?
|
70
|
+
|
68
71
|
# ssl
|
69
72
|
|
70
73
|
# http2_settings
|
@@ -0,0 +1,61 @@
|
|
1
|
+
module HTTPX
|
2
|
+
module Plugins
|
3
|
+
module CircuitBreaker
|
4
|
+
|
5
|
+
class CircuitStore
|
6
|
+
@circuits: Hash[String, Circuit]
|
7
|
+
|
8
|
+
def try_open: (generic_uri uri, response response) -> void
|
9
|
+
|
10
|
+
def try_respond: (Request request) -> response?
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def get_circuit_for_uri: (generic_uri uri) -> Circuit
|
15
|
+
|
16
|
+
def initialize: (Options & _CircuitOptions options) -> void
|
17
|
+
end
|
18
|
+
|
19
|
+
class Circuit
|
20
|
+
@state: :closed | :open | :half_open
|
21
|
+
@max_attempts: Integer
|
22
|
+
@reset_attempts_in: Float
|
23
|
+
@break_in: Float
|
24
|
+
@circuit_breaker_half_open_drip_rate: Float
|
25
|
+
@attempts: Integer
|
26
|
+
|
27
|
+
@response: response?
|
28
|
+
@opened_at: Float?
|
29
|
+
@attempted_at: Float?
|
30
|
+
|
31
|
+
def respond: () -> response?
|
32
|
+
|
33
|
+
def try_open: (response) -> void
|
34
|
+
|
35
|
+
def try_close: () -> void
|
36
|
+
|
37
|
+
private
|
38
|
+
|
39
|
+
def initialize: (Integer max_attempts, Float reset_attempts_in, Float break_in, Float circuit_breaker_half_open_drip_rate) -> void
|
40
|
+
end
|
41
|
+
|
42
|
+
interface _CircuitOptions
|
43
|
+
def circuit_breaker_max_attempts: () -> Integer
|
44
|
+
def circuit_breaker_reset_attempts_in: () -> Float
|
45
|
+
def circuit_breaker_break_in: () -> Float
|
46
|
+
def circuit_breaker_half_open_drip_rate: () -> Float
|
47
|
+
def circuit_breaker_break_on: () -> (^(Response) -> boolish | nil)
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.load_dependencies: (singleton(Session)) -> void
|
51
|
+
def self.extra_options: (Options) -> (Options & _CircuitOptions)
|
52
|
+
|
53
|
+
module InstanceMethods
|
54
|
+
@circuit_store: CircuitStore
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
type sessionCircuitBreaker = Session & CircuitBreaker::InstanceMethods
|
60
|
+
end
|
61
|
+
end
|
@@ -6,7 +6,7 @@ module HTTPX
|
|
6
6
|
def self.configure: (singleton(Session)) -> void
|
7
7
|
|
8
8
|
def self?.deflater: () -> _Deflater
|
9
|
-
def self?.inflater: (
|
9
|
+
def self?.inflater: (Integer | Float bytesize) -> GZIP::Inflater
|
10
10
|
|
11
11
|
module Deflater
|
12
12
|
extend _Deflater
|
@@ -6,15 +6,15 @@ module HTTPX
|
|
6
6
|
def self.configure: (singleton(Session)) -> void
|
7
7
|
|
8
8
|
def self?.deflater: () -> _Deflater
|
9
|
-
def self?.inflater: (
|
9
|
+
def self?.inflater: (Integer | Float bytesize) -> Inflater
|
10
10
|
|
11
11
|
class Deflater
|
12
12
|
include _Deflater
|
13
13
|
|
14
14
|
@compressed_chunk: String
|
15
|
-
|
15
|
+
|
16
16
|
private
|
17
|
-
|
17
|
+
|
18
18
|
def initialize: () -> untyped
|
19
19
|
def write: (string) -> void
|
20
20
|
def compressed_chunk: () -> String
|
data/sig/plugins/compression.rbs
CHANGED
data/sig/plugins/multipart.rbs
CHANGED
@@ -4,14 +4,15 @@ module HTTPX
|
|
4
4
|
module Plugins
|
5
5
|
module Proxy
|
6
6
|
module Socks5
|
7
|
-
|
7
|
+
VERSION: Integer
|
8
|
+
|
8
9
|
module ConnectionMethods
|
9
10
|
def __socks5_proxy_connect: () -> void
|
10
11
|
def __socks5_on_packet: (String packet) -> void
|
11
12
|
def __socks5_check_version: (int) -> void
|
12
13
|
def __on_socks5_error: (string) -> void
|
13
14
|
end
|
14
|
-
|
15
|
+
|
15
16
|
class SocksParser
|
16
17
|
include Callbacks
|
17
18
|
|
data/sig/plugins/proxy.rbs
CHANGED
@@ -21,7 +21,7 @@ module HTTPX
|
|
21
21
|
|
22
22
|
private
|
23
23
|
|
24
|
-
def initialize: (uri: generic_uri, ?scheme: String, ?username: String, ?password: String, **
|
24
|
+
def initialize: (uri: generic_uri, ?scheme: String, ?username: String, ?password: String, **untyped) -> untyped
|
25
25
|
end
|
26
26
|
|
27
27
|
def self.configure: (singleton(Session)) -> void
|
data/sig/registry.rbs
CHANGED
@@ -1,12 +1,13 @@
|
|
1
|
-
module HTTPX::Registry[T, V]
|
1
|
+
module HTTPX::Registry[unchecked out T, unchecked out V]
|
2
2
|
class Error < HTTPX::Error
|
3
3
|
end
|
4
4
|
|
5
5
|
# type registrable = Symbol | String | Class
|
6
6
|
|
7
|
-
def self.registry: (T
|
8
|
-
| () -> Hash[T, V]
|
9
|
-
|
7
|
+
def self.registry: [T, V] (T) -> Class
|
8
|
+
| [T, V] () -> Hash[T, V]
|
9
|
+
|
10
|
+
def self.register: [T, V] (T tag, V handler) -> void
|
10
11
|
|
11
12
|
def registry: (?T tag) -> V
|
12
13
|
end
|
data/sig/request.rbs
CHANGED
@@ -50,6 +50,12 @@ module HTTPX
|
|
50
50
|
|
51
51
|
def trailers?: () -> boolish
|
52
52
|
|
53
|
+
def read_timeout: () -> Numeric
|
54
|
+
|
55
|
+
def write_timeout: () -> Numeric
|
56
|
+
|
57
|
+
def request_timeout: () -> Numeric
|
58
|
+
|
53
59
|
class Body
|
54
60
|
@headers: Headers
|
55
61
|
@body: body_encoder?
|
@@ -61,7 +67,7 @@ module HTTPX
|
|
61
67
|
|
62
68
|
def rewind: () -> void
|
63
69
|
def empty?: () -> bool
|
64
|
-
def bytesize: () ->
|
70
|
+
def bytesize: () -> (Integer | Float)
|
65
71
|
def stream: (Transcoder::_Encoder) -> bodyIO
|
66
72
|
def unbounded_body?: () -> bool
|
67
73
|
def chunked?: () -> bool
|
data/sig/resolver/native.rbs
CHANGED
@@ -10,7 +10,10 @@ module HTTPX
|
|
10
10
|
@family: ip_family
|
11
11
|
@options: Options
|
12
12
|
@ns_index: Integer
|
13
|
-
@nameserver: String
|
13
|
+
@nameserver: Array[String]?
|
14
|
+
@ndots: Integer
|
15
|
+
@start_timeout: Float?
|
16
|
+
@search: Array[String]
|
14
17
|
@_timeouts: Array[Numeric]
|
15
18
|
@timeouts: Hash[String, Array[Numeric]]
|
16
19
|
@connections: Array[Connection]
|
@@ -37,7 +40,7 @@ module HTTPX
|
|
37
40
|
|
38
41
|
def consume: () -> void
|
39
42
|
|
40
|
-
def do_retry: (?Numeric loop_time) -> void
|
43
|
+
def do_retry: (?Numeric? loop_time) -> void
|
41
44
|
|
42
45
|
def dread: (Integer) -> void
|
43
46
|
| () -> void
|
data/sig/response.rbs
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
module HTTPX
|
2
2
|
interface _Response
|
3
|
+
def finished?: () -> bool
|
4
|
+
|
3
5
|
def raise_for_status: () -> self
|
4
6
|
|
5
7
|
def error: () -> StandardError?
|
@@ -61,7 +63,7 @@ module HTTPX
|
|
61
63
|
def each: () { (String) -> void } -> void
|
62
64
|
| () -> Enumerable[String]
|
63
65
|
|
64
|
-
def bytesize: () ->
|
66
|
+
def bytesize: () -> (Integer | Float)
|
65
67
|
def empty?: () -> bool
|
66
68
|
def copy_to: (String | File | _Writer destination) -> void
|
67
69
|
def close: () -> void
|
data/sig/timers.rbs
CHANGED
data/sig/transcoder/json.rbs
CHANGED
@@ -5,6 +5,9 @@ module HTTPX::Transcoder
|
|
5
5
|
def self?.encode: (_ToJson json) -> Encoder
|
6
6
|
def self?.decode: (HTTPX::Response response) -> _Decoder
|
7
7
|
|
8
|
+
def self?.json_load: (string source, ?json_options) -> untyped
|
9
|
+
def self?.json_dump: (_ToJson obj, *untyped) -> String
|
10
|
+
|
8
11
|
class Encoder
|
9
12
|
extend Forwardable
|
10
13
|
include _Encoder
|
@@ -17,7 +20,7 @@ module HTTPX::Transcoder
|
|
17
20
|
|
18
21
|
private
|
19
22
|
|
20
|
-
def initialize: (_ToJson json) ->
|
23
|
+
def initialize: (_ToJson json) -> void
|
21
24
|
end
|
22
25
|
end
|
23
26
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module HTTPX::Transcoder
|
2
|
+
module XML
|
3
|
+
|
4
|
+
def self?.encode: (untyped xml) -> Encoder
|
5
|
+
def self?.decode: (HTTPX::Response response) -> _Decoder
|
6
|
+
|
7
|
+
class Encoder
|
8
|
+
@raw: untyped # can be nokogiri object
|
9
|
+
|
10
|
+
def content_type: () -> String
|
11
|
+
|
12
|
+
def bytesize: () -> (Integer | Float)
|
13
|
+
|
14
|
+
def to_s: () -> String
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def initialize: (String xml) -> void
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/sig/transcoder.rbs
CHANGED
@@ -18,11 +18,11 @@ module HTTPX
|
|
18
18
|
end
|
19
19
|
|
20
20
|
interface _Encoder
|
21
|
-
def bytesize: () ->
|
21
|
+
def bytesize: () -> (Integer | Float)
|
22
22
|
end
|
23
23
|
|
24
24
|
interface _Decoder
|
25
|
-
def call: (Response response, untyped
|
25
|
+
def call: (Response response, *untyped) -> untyped
|
26
26
|
end
|
27
27
|
end
|
28
28
|
end
|
data/sig/utils.rbs
CHANGED
@@ -4,9 +4,9 @@ module HTTPX
|
|
4
4
|
|
5
5
|
def self?.parse_retry_after: (String) -> Numeric
|
6
6
|
|
7
|
-
def self?.now: () ->
|
7
|
+
def self?.now: () -> Float
|
8
8
|
|
9
|
-
def self?.elapsed_time: (
|
9
|
+
def self?.elapsed_time: (Integer | Float monotonic_time) -> Float
|
10
10
|
|
11
11
|
def self?.to_uri: (generic_uri uri) -> URI::Generic
|
12
12
|
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.
|
4
|
+
version: 0.21.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tiago Cardoso
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-10-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http-2-next
|
@@ -86,6 +86,8 @@ extra_rdoc_files:
|
|
86
86
|
- doc/release_notes/0_20_3.md
|
87
87
|
- doc/release_notes/0_20_4.md
|
88
88
|
- doc/release_notes/0_20_5.md
|
89
|
+
- doc/release_notes/0_21_0.md
|
90
|
+
- doc/release_notes/0_21_1.md
|
89
91
|
- doc/release_notes/0_2_0.md
|
90
92
|
- doc/release_notes/0_2_1.md
|
91
93
|
- doc/release_notes/0_3_0.md
|
@@ -164,6 +166,8 @@ files:
|
|
164
166
|
- doc/release_notes/0_20_3.md
|
165
167
|
- doc/release_notes/0_20_4.md
|
166
168
|
- doc/release_notes/0_20_5.md
|
169
|
+
- doc/release_notes/0_21_0.md
|
170
|
+
- doc/release_notes/0_21_1.md
|
167
171
|
- doc/release_notes/0_2_0.md
|
168
172
|
- doc/release_notes/0_2_1.md
|
169
173
|
- doc/release_notes/0_3_0.md
|
@@ -217,6 +221,9 @@ files:
|
|
217
221
|
- lib/httpx/plugins/aws_sdk_authentication.rb
|
218
222
|
- lib/httpx/plugins/aws_sigv4.rb
|
219
223
|
- lib/httpx/plugins/basic_authentication.rb
|
224
|
+
- lib/httpx/plugins/circuit_breaker.rb
|
225
|
+
- lib/httpx/plugins/circuit_breaker/circuit.rb
|
226
|
+
- lib/httpx/plugins/circuit_breaker/circuit_store.rb
|
220
227
|
- lib/httpx/plugins/compression.rb
|
221
228
|
- lib/httpx/plugins/compression/brotli.rb
|
222
229
|
- lib/httpx/plugins/compression/deflate.rb
|
@@ -253,6 +260,7 @@ files:
|
|
253
260
|
- lib/httpx/plugins/stream.rb
|
254
261
|
- lib/httpx/plugins/upgrade.rb
|
255
262
|
- lib/httpx/plugins/upgrade/h2.rb
|
263
|
+
- lib/httpx/plugins/webdav.rb
|
256
264
|
- lib/httpx/pmatch_extensions.rb
|
257
265
|
- lib/httpx/pool.rb
|
258
266
|
- lib/httpx/punycode.rb
|
@@ -275,6 +283,7 @@ files:
|
|
275
283
|
- lib/httpx/transcoder/chunker.rb
|
276
284
|
- lib/httpx/transcoder/form.rb
|
277
285
|
- lib/httpx/transcoder/json.rb
|
286
|
+
- lib/httpx/transcoder/xml.rb
|
278
287
|
- lib/httpx/utils.rb
|
279
288
|
- lib/httpx/version.rb
|
280
289
|
- sig/buffer.rbs
|
@@ -287,6 +296,7 @@ files:
|
|
287
296
|
- sig/errors.rbs
|
288
297
|
- sig/headers.rbs
|
289
298
|
- sig/httpx.rbs
|
299
|
+
- sig/io.rbs
|
290
300
|
- sig/loggable.rbs
|
291
301
|
- sig/options.rbs
|
292
302
|
- sig/parser/http1.rbs
|
@@ -298,6 +308,7 @@ files:
|
|
298
308
|
- sig/plugins/aws_sdk_authentication.rbs
|
299
309
|
- sig/plugins/aws_sigv4.rbs
|
300
310
|
- sig/plugins/basic_authentication.rbs
|
311
|
+
- sig/plugins/circuit_breaker.rbs
|
301
312
|
- sig/plugins/compression.rbs
|
302
313
|
- sig/plugins/compression/brotli.rbs
|
303
314
|
- sig/plugins/compression/deflate.rbs
|
@@ -342,6 +353,7 @@ files:
|
|
342
353
|
- sig/transcoder/chunker.rbs
|
343
354
|
- sig/transcoder/form.rbs
|
344
355
|
- sig/transcoder/json.rbs
|
356
|
+
- sig/transcoder/xml.rbs
|
345
357
|
- sig/utils.rbs
|
346
358
|
homepage: https://gitlab.com/honeyryderchuck/httpx
|
347
359
|
licenses:
|
@@ -368,7 +380,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
368
380
|
- !ruby/object:Gem::Version
|
369
381
|
version: '0'
|
370
382
|
requirements: []
|
371
|
-
rubygems_version: 3.
|
383
|
+
rubygems_version: 3.2.32
|
372
384
|
signing_key:
|
373
385
|
specification_version: 4
|
374
386
|
summary: HTTPX, to the future, and beyond
|