httpx 0.9.0 → 0.10.0

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.
Files changed (96) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE.txt +48 -0
  3. data/README.md +2 -0
  4. data/doc/release_notes/0_10_0.md +66 -0
  5. data/lib/httpx.rb +2 -0
  6. data/lib/httpx/adapters/faraday.rb +1 -1
  7. data/lib/httpx/chainable.rb +2 -2
  8. data/lib/httpx/connection.rb +3 -9
  9. data/lib/httpx/connection/http1.rb +1 -1
  10. data/lib/httpx/domain_name.rb +440 -0
  11. data/lib/httpx/errors.rb +1 -0
  12. data/lib/httpx/extensions.rb +21 -1
  13. data/lib/httpx/io/ssl.rb +0 -1
  14. data/lib/httpx/io/tcp.rb +6 -5
  15. data/lib/httpx/io/udp.rb +4 -1
  16. data/lib/httpx/options.rb +2 -0
  17. data/lib/httpx/parser/http1.rb +14 -17
  18. data/lib/httpx/plugins/compression.rb +28 -63
  19. data/lib/httpx/plugins/compression/brotli.rb +10 -14
  20. data/lib/httpx/plugins/compression/deflate.rb +7 -6
  21. data/lib/httpx/plugins/compression/gzip.rb +23 -5
  22. data/lib/httpx/plugins/cookies.rb +21 -60
  23. data/lib/httpx/plugins/cookies/cookie.rb +173 -0
  24. data/lib/httpx/plugins/cookies/jar.rb +74 -0
  25. data/lib/httpx/plugins/cookies/set_cookie_parser.rb +142 -0
  26. data/lib/httpx/plugins/expect.rb +3 -5
  27. data/lib/httpx/plugins/follow_redirects.rb +20 -2
  28. data/lib/httpx/plugins/h2c.rb +1 -1
  29. data/lib/httpx/plugins/multipart.rb +0 -8
  30. data/lib/httpx/plugins/persistent.rb +6 -1
  31. data/lib/httpx/plugins/proxy/socks4.rb +3 -1
  32. data/lib/httpx/plugins/rate_limiter.rb +51 -0
  33. data/lib/httpx/plugins/retries.rb +3 -2
  34. data/lib/httpx/plugins/stream.rb +109 -13
  35. data/lib/httpx/pool.rb +6 -6
  36. data/lib/httpx/request.rb +7 -19
  37. data/lib/httpx/resolver/https.rb +7 -2
  38. data/lib/httpx/resolver/native.rb +7 -3
  39. data/lib/httpx/response.rb +16 -23
  40. data/lib/httpx/selector.rb +2 -4
  41. data/lib/httpx/session.rb +17 -11
  42. data/lib/httpx/transcoder/chunker.rb +0 -2
  43. data/lib/httpx/transcoder/form.rb +0 -6
  44. data/lib/httpx/transcoder/json.rb +0 -4
  45. data/lib/httpx/utils.rb +45 -0
  46. data/lib/httpx/version.rb +1 -1
  47. data/sig/buffer.rbs +24 -0
  48. data/sig/callbacks.rbs +14 -0
  49. data/sig/chainable.rbs +37 -0
  50. data/sig/connection.rbs +2 -0
  51. data/sig/connection/http2.rbs +4 -0
  52. data/sig/domain_name.rbs +17 -0
  53. data/sig/errors.rbs +3 -0
  54. data/sig/headers.rbs +42 -0
  55. data/sig/httpx.rbs +14 -0
  56. data/sig/loggable.rbs +11 -0
  57. data/sig/missing.rbs +12 -0
  58. data/sig/options.rbs +118 -0
  59. data/sig/parser/http1.rbs +50 -0
  60. data/sig/plugins/authentication.rbs +11 -0
  61. data/sig/plugins/basic_authentication.rbs +13 -0
  62. data/sig/plugins/compression.rbs +55 -0
  63. data/sig/plugins/compression/brotli.rbs +21 -0
  64. data/sig/plugins/compression/deflate.rbs +17 -0
  65. data/sig/plugins/compression/gzip.rbs +29 -0
  66. data/sig/plugins/cookies.rbs +26 -0
  67. data/sig/plugins/cookies/cookie.rbs +50 -0
  68. data/sig/plugins/cookies/jar.rbs +27 -0
  69. data/sig/plugins/digest_authentication.rbs +33 -0
  70. data/sig/plugins/expect.rbs +19 -0
  71. data/sig/plugins/follow_redirects.rbs +37 -0
  72. data/sig/plugins/h2c.rbs +26 -0
  73. data/sig/plugins/multipart.rbs +19 -0
  74. data/sig/plugins/persistent.rbs +17 -0
  75. data/sig/plugins/proxy.rbs +47 -0
  76. data/sig/plugins/proxy/http.rbs +14 -0
  77. data/sig/plugins/proxy/socks4.rbs +33 -0
  78. data/sig/plugins/proxy/socks5.rbs +36 -0
  79. data/sig/plugins/proxy/ssh.rbs +18 -0
  80. data/sig/plugins/push_promise.rbs +22 -0
  81. data/sig/plugins/rate_limiter.rbs +11 -0
  82. data/sig/plugins/retries.rbs +48 -0
  83. data/sig/plugins/stream.rbs +39 -0
  84. data/sig/pool.rbs +2 -0
  85. data/sig/registry.rbs +9 -0
  86. data/sig/request.rbs +61 -0
  87. data/sig/response.rbs +87 -0
  88. data/sig/session.rbs +49 -0
  89. data/sig/test.rbs +9 -0
  90. data/sig/timeout.rbs +29 -0
  91. data/sig/transcoder.rbs +16 -0
  92. data/sig/transcoder/body.rbs +18 -0
  93. data/sig/transcoder/chunker.rbs +32 -0
  94. data/sig/transcoder/form.rbs +16 -0
  95. data/sig/transcoder/json.rbs +14 -0
  96. metadata +60 -17
@@ -0,0 +1,33 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module DigestAuthentication
4
+ DigestError: singleton(Error)
5
+
6
+ interface _DigestOptions
7
+ def digest: () -> Digest?
8
+ def digest=: (Digest) -> Digest
9
+ def with_digest: (Digest) -> instance
10
+ end
11
+
12
+ def self.extra_options: (Options) -> (Options & _DigestOptions)
13
+
14
+ def self.load_dependencies: (*untyped) -> void
15
+
16
+ module InstanceMethods
17
+ def digest_authentication: (string user, string password) -> instance
18
+ end
19
+
20
+ class Digest
21
+ def generate_header: (Request, Response, ?bool?) -> String
22
+
23
+ private
24
+
25
+ def initialize: (string user, string password) -> untyped
26
+ def make_cnonce: () -> String
27
+ def next_nonce: () -> Integer
28
+ end
29
+ end
30
+
31
+ type sessionDigestAuthentication = Plugins::sessionAuthentication & Plugins::Authentication::InstanceMethods
32
+ end
33
+ end
@@ -0,0 +1,19 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Expect
4
+ EXPECT_TIMEOUT: Integer
5
+
6
+ interface _ExpectOptions
7
+ def expect_timeout: () -> Integer?
8
+ def expect_timeout=: (int) -> Integer
9
+ def with_expect_timeout: (int) -> instance
10
+
11
+ def expect_threshold_size: () -> Integer?
12
+ def expect_threshold_size=: (int) -> Integer
13
+ def with_expect_threshold_size: (int) -> instance
14
+ end
15
+
16
+ def self.extra_options: (Options) -> (Options & _ExpectOptions)
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,37 @@
1
+ module HTTPX
2
+ InsecureRedirectError: singleton(Error)
3
+
4
+ module Plugins
5
+ module FollowRedirects
6
+ MAX_REDIRECTS: Integer
7
+ REDIRECT_STATUS: Range[Integer]
8
+
9
+ interface _FollowRedirectsOptions
10
+ def max_redirects: () -> Integer?
11
+ def max_redirects=: (int) -> Integer
12
+ def with_max_redirects: (int) -> instance
13
+
14
+ def follow_insecure_redirects: () -> bool?
15
+ def follow_insecure_redirects=: (bool) -> bool
16
+ def with_follow_insecure_redirects: (bool) -> instance
17
+ end
18
+
19
+ def self.extra_options: (Options) -> (Options & _FollowRedirectsOptions)
20
+
21
+ module InstanceMethods
22
+ def max_redirects: (_ToI) -> instance
23
+
24
+ def build_redirect_request: (Request, Response, Options) -> Request
25
+ def __get_location_from_response: (Response) -> (URI::HTTP | URI::HTTPS)
26
+ end
27
+
28
+ module RequestMethods
29
+ def redirect_request: () -> Request
30
+ def redirect_request=: (Request) -> void
31
+ def max_redirects: () -> Integer
32
+ end
33
+ end
34
+
35
+ type sessionFollowRedirects = Session & Plugins::Authentication::InstanceMethods
36
+ end
37
+ end
@@ -0,0 +1,26 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module H2C
4
+ # def self.load_dependencies: (singleton(Session)) -> void
5
+
6
+ module InstanceMethods
7
+ VALID_H2C_METHODS: Array[Symbol]
8
+
9
+ private
10
+
11
+ def valid_h2c_upgrade_request: (Request) -> bool
12
+ def valid_h2c_upgrade?: (Request, Response, Options) -> bool
13
+ end
14
+
15
+ class H2CParser < Connection::HTTP2
16
+ def upgrade: (Request, Response) -> void
17
+ end
18
+
19
+ module ConnectionMethods
20
+ def upgrade: (Request, Response) -> void
21
+ end
22
+ end
23
+
24
+ type sessionH2C = Session & Plugins::H2C::InstanceMethods
25
+ end
26
+ end
@@ -0,0 +1,19 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Multipart
4
+ # def self.load_dependencies: (singleton(Session)) -> void
5
+ def self.configure: (*untyped) -> void
6
+ def self?.encode: (untyped) -> Encoder
7
+
8
+ class Encoder
9
+ include Transcoder::_Encoder
10
+ include _ToS
11
+ include _Reader
12
+
13
+ private
14
+
15
+ def initalize: (Hash[Symbol | string, HTTP::FormData::Part | string] multipart_data) -> untyped
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,17 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Persistent
4
+ # def self.load_dependencies: (singleton(Session)) -> void
5
+
6
+ interface _PersistentOptions
7
+ def persistent: () -> bool?
8
+ def persistent=: (bool) -> bool
9
+ def with_persistent: (bool) -> instance
10
+ end
11
+
12
+ def self.extra_options: (Options) -> (Options & _PersistentOptions)
13
+ end
14
+
15
+ type sessionPersistent = sessionFollowRedirects
16
+ end
17
+ end
@@ -0,0 +1,47 @@
1
+ module HTTPX
2
+ HTTPProxyError: singleton(Error)
3
+
4
+ module Plugins
5
+ module Proxy
6
+ Error: singleton(HTTPProxyError)
7
+ PROXY_ERRORS: Array[singleton(StandardError)]
8
+
9
+ class Parameters
10
+ attr_reader uri: URI::Generic
11
+ attr_reader username: string?
12
+ attr_reader password: string?
13
+
14
+ def authenticated?: () -> boolish
15
+ def token_authentication: () -> String?
16
+
17
+ def ==: (untyped) -> bool
18
+
19
+ private
20
+
21
+ def initialize: (uri: uri, ?username: string, ?password: string) -> untyped
22
+ end
23
+
24
+ # def self.configure: (singleton(Session)) -> void
25
+
26
+ type proxyParam = Parameters | Hash
27
+
28
+ interface _ProxyOptions
29
+ def proxy: () -> proxyParam?
30
+ def proxy=: (Parameters | _ToHash) -> proxyParam
31
+ def with_proxy: (Parameters | _ToHash) -> instance
32
+ end
33
+
34
+ def self.extra_options: (Options) -> (Options & _ProxyOptions)
35
+
36
+ module InstanceMethods
37
+ private
38
+
39
+ def proxy_uris: (uri, Options & _ProxyOptions) -> { uri: (URI | string), username: string, password: string }
40
+ | (uri, Options & _ProxyOptions) -> { uri: (URI | string) }
41
+ | (uri, Options & _ProxyOptions) -> nil
42
+ end
43
+ end
44
+
45
+ type sessionProxy = Session & Plugins::Proxy::InstanceMethods
46
+ end
47
+ end
@@ -0,0 +1,14 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Proxy
4
+ module HTTP
5
+
6
+ module ConnectionMethods
7
+ def __http_proxy_connect: () -> void
8
+ def __http_on_connect: (top, Response) -> void
9
+ end
10
+
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,33 @@
1
+ module HTTPX
2
+ Socks4Error: singleton(Error)
3
+
4
+ module Plugins
5
+ module Proxy
6
+ module Socks4
7
+
8
+ module ConnectionMethods
9
+ def __socks4_proxy_connect: () -> void
10
+ def __socks4_on_packet: (String packet) -> void
11
+ def on_socks4_error: (string) -> void
12
+ end
13
+
14
+ class SocksParser
15
+ include Callbacks
16
+
17
+ def close: () -> void
18
+ def consume: (*untyped) -> void
19
+ def empty: () -> bool
20
+ def <<: (string) -> void
21
+
22
+ private
23
+
24
+ def initialize: (Buffer buffer, Options) -> untyped
25
+ end
26
+
27
+ module Packet
28
+ def self?.connect: (Parameters, uri) -> String
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,36 @@
1
+ module HTTPX
2
+ Socks5Error: singleton(Error)
3
+
4
+ module Plugins
5
+ module Proxy
6
+ module Socks5
7
+
8
+ module ConnectionMethods
9
+ def __socks5_proxy_connect: () -> void
10
+ def __socks5_on_packet: (String packet) -> void
11
+ def __socks5_check_version: (int) -> void
12
+ def __on_socks5_error: (string) -> void
13
+ end
14
+
15
+ class SocksParser
16
+ include Callbacks
17
+
18
+ def close: () -> void
19
+ def consume: (*untyped) -> void
20
+ def empty: () -> bool
21
+ def <<: (string) -> void
22
+
23
+ private
24
+
25
+ def initialize: (Buffer buffer, Options) -> untyped
26
+ end
27
+
28
+ module Packet
29
+ def self?.negotiate: (Parameters) -> String
30
+ def self?.authenticate: (Parameters) -> String
31
+ def self?.connect: (uri) -> String
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,18 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Proxy
4
+ module SSH
5
+ # def self.load_dependencies: (singleton(Session)) -> void
6
+
7
+ module InstancenMethods
8
+ private
9
+
10
+ def build_gateway_socket: (int, URI::HTTPS | URI::HTTPS, Options) -> IO
11
+ end
12
+ end
13
+ end
14
+
15
+
16
+ type sessionSSHProxy = Plugins::Proxy::InstanceMethods & Plugins::Proxy::SSH::InstanceMethods
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module PushPromise
4
+ def self.extra_options: (Options) -> Options
5
+
6
+ module ResponseMethods
7
+ def pushed?: () -> boolish
8
+ def mark_as_pushed!: () -> void
9
+ end
10
+
11
+ module InstanceMethods
12
+ private
13
+
14
+ def promise_headers: () -> Hash[HTTP2Next::Stream, Request]
15
+ def __on_promise_request: (Connection::HTTP2, HTTP2Next::Stream, headers_input) -> void
16
+ def __on_promise_response: (Connection::HTTP2, HTTP2Next::Stream, headers_input) -> void
17
+ end
18
+ end
19
+
20
+ type sessionPushPromise = Session & PushPromise::InstanceMethods
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module RateLimiter
4
+ # def self.load_dependencies: (singleton(Session)) -> void
5
+
6
+ def self.retry_on_rate_limited_response: (_Response) -> bool
7
+
8
+ def self.retry_after_rate_limit: (untyped, _Response) -> Numeric?
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,48 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Retries
4
+ MAX_RETRIES: Integer
5
+ IDEMPOTENT_METHODS: Array[verb]
6
+ RETRYABLE_ERRORS: Array[singleton(StandardError)]
7
+
8
+ interface _RetryCallback
9
+ def call: (response) -> bool?
10
+ end
11
+
12
+ interface _RetriesOptions
13
+ def retry_after: () -> Numeric?
14
+ def retry_after=: (Numeric) -> Numeric
15
+ def with_retry_after: (Numeric) -> instance
16
+
17
+ def max_retries: () -> Integer?
18
+ def max_retries=: (int) -> Integer
19
+ def with_max_retries: (int) -> instance
20
+
21
+ def retry_change_requests: () -> bool?
22
+ def retry_change_requests=: (bool) -> bool
23
+ def with_retry_change_requests: (bool) -> instance
24
+
25
+ def retry_on: () -> _RetryCallback?
26
+ def retry_on=: (_RetryCallback) -> _RetryCallback
27
+ def with_retry_on: (_RetryCallback) -> instance
28
+ end
29
+
30
+ def self.extra_options: (Options) -> (Options & _RetriesOptions)
31
+
32
+ module InstanceMethods
33
+ def max_retries: (int) -> instance
34
+
35
+ private
36
+
37
+ def __repeatable_request?: (Request, Options) -> boolish
38
+ def __retryable_error?: (_Exception) -> bool
39
+ end
40
+
41
+ module RequestMethods
42
+ def retries: () -> Integer
43
+ end
44
+ end
45
+
46
+ type sessionRetries = Session & Plugins::Retries::InstanceMethods
47
+ end
48
+ end
@@ -0,0 +1,39 @@
1
+ module HTTPX
2
+ module Plugins
3
+ module Stream
4
+ module InstanceMethods
5
+ private
6
+
7
+ def request: (*Request, ?stream: bool, **untyped?) -> (response | Array[response] | StreamResponse)
8
+ | (*untyped, ?stream: bool, **untyped?) -> (response | Array[response] | StreamResponse)
9
+ end
10
+
11
+ module RequestMethods
12
+ attr_accessor stream: StreamResponse?
13
+ end
14
+
15
+ module ResponseMethods
16
+ def stream: () -> StreamResponse?
17
+ end
18
+
19
+ class StreamResponse
20
+ include _ToS
21
+
22
+ def each: () { (String) -> void } -> void
23
+ | () -> Enumerable[String]
24
+
25
+ def each_line: () { (String) -> void } -> void
26
+ | () -> Enumerable[String]
27
+
28
+ def on_chunk: (string) -> void
29
+
30
+ private
31
+
32
+ def response: () -> response
33
+ def initialize: (Request, Session) -> untyped
34
+ end
35
+ end
36
+
37
+ type sessionStream = Session & Plugins::Stream::InstanceMethods
38
+ end
39
+ end
@@ -0,0 +1,2 @@
1
+ class HTTPX::Pool
2
+ end
@@ -0,0 +1,9 @@
1
+ module HTTPX::Registry[T, V]
2
+ # type registrable = Symbol | String | Class
3
+
4
+ def self.registry: (T tag) -> Class
5
+ | () -> Hash[K, V]
6
+ def self.register: (T tag, V handler) -> void
7
+
8
+ def registry: (?T tag) -> V
9
+ end