without-http 0.0.3__tar.gz → 0.0.5__tar.gz

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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: without-http
3
- Version: 0.0.3
3
+ Version: 0.0.5
4
4
  Summary: A sans-IO-backed ASGI server and HTTP client for without: h11/h2/wsproto over asyncio sockets.
5
5
  Author: Josh Karpel
6
6
  Author-email: Josh Karpel <josh.karpel@gmail.com>
@@ -16,18 +16,20 @@ Classifier: Topic :: Internet :: WWW/HTTP
16
16
  Classifier: Topic :: Internet :: WWW/HTTP :: HTTP Servers
17
17
  Classifier: Topic :: Software Development :: Libraries
18
18
  Classifier: Typing :: Typed
19
- Requires-Dist: without-core==0.0.3
20
- Requires-Dist: without-asgi==0.0.3
19
+ Requires-Dist: without-core==0.0.5
20
+ Requires-Dist: without-asgi==0.0.5
21
21
  Requires-Dist: h11>=0.16
22
22
  Requires-Dist: h2>=4.1
23
23
  Requires-Dist: wsproto>=1.2
24
+ Requires-Dist: aiohappyeyeballs>=2.6
25
+ Requires-Dist: brotli>=1.1
24
26
  Requires-Python: >=3.14
25
27
  Description-Content-Type: text/markdown
26
28
 
27
29
  # without-http
28
30
 
29
31
  A sans-IO-backed ASGI **server** and **HTTP client** for `without`. Where
30
- [`without-asgi`](../without-asgi) is the *app* side of the ASGI boundary (it turns
32
+ [`without-asgi`](../without_asgi) is the *app* side of the ASGI boundary (it turns
31
33
  a server's `receive`/`send` into typed streams), `without-http` is the *server*
32
34
  side: it owns the socket and the HTTP wire protocol, and drives any ASGI app via
33
35
  `app(scope, receive, send)`.
@@ -73,4 +75,7 @@ those are built from, for a test that writes frames rather than requests.
73
75
  See the
74
76
  [`without-http` guide](https://without.help/without-http/)
75
77
  (with the [API reference](https://without.help/reference/without_http/))
76
- for the full surface, including the deferred work (WebSockets over HTTP/2, HTTP/3).
78
+ for the full surface, and
79
+ [Alternatives](https://without.help/without-http/alternatives/) for where the
80
+ client and server stand against httpx, aiohttp, niquests, and the ASGI servers,
81
+ including which absences are gaps and which are positions.
@@ -1,7 +1,7 @@
1
1
  # without-http
2
2
 
3
3
  A sans-IO-backed ASGI **server** and **HTTP client** for `without`. Where
4
- [`without-asgi`](../without-asgi) is the *app* side of the ASGI boundary (it turns
4
+ [`without-asgi`](../without_asgi) is the *app* side of the ASGI boundary (it turns
5
5
  a server's `receive`/`send` into typed streams), `without-http` is the *server*
6
6
  side: it owns the socket and the HTTP wire protocol, and drives any ASGI app via
7
7
  `app(scope, receive, send)`.
@@ -47,4 +47,7 @@ those are built from, for a test that writes frames rather than requests.
47
47
  See the
48
48
  [`without-http` guide](https://without.help/without-http/)
49
49
  (with the [API reference](https://without.help/reference/without_http/))
50
- for the full surface, including the deferred work (WebSockets over HTTP/2, HTTP/3).
50
+ for the full surface, and
51
+ [Alternatives](https://without.help/without-http/alternatives/) for where the
52
+ client and server stand against httpx, aiohttp, niquests, and the ASGI servers,
53
+ including which absences are gaps and which are positions.
@@ -1,10 +1,10 @@
1
1
  [build-system]
2
- requires = ["uv_build>=0.11.32,<0.12"]
2
+ requires = ["uv_build>=0.12.3,<0.13"]
3
3
  build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "without-http"
7
- version = "0.0.3"
7
+ version = "0.0.5"
8
8
  description = "A sans-IO-backed ASGI server and HTTP client for without: h11/h2/wsproto over asyncio sockets."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -23,11 +23,13 @@ classifiers = [
23
23
  "Typing :: Typed",
24
24
  ]
25
25
  dependencies = [
26
- "without-core==0.0.3",
27
- "without-asgi==0.0.3",
26
+ "without-core==0.0.5",
27
+ "without-asgi==0.0.5",
28
28
  "h11>=0.16",
29
29
  "h2>=4.1",
30
30
  "wsproto>=1.2",
31
+ "aiohappyeyeballs>=2.6",
32
+ "brotli>=1.1",
31
33
  ]
32
34
 
33
35
  [[project.authors]]
@@ -1,10 +1,10 @@
1
1
  [build-system]
2
- requires = ["uv_build>=0.11.32,<0.12"]
2
+ requires = ["uv_build>=0.12.3,<0.13"]
3
3
  build-backend = "uv_build"
4
4
 
5
5
  [project]
6
6
  name = "without-http"
7
- version = "0.0.3"
7
+ version = "0.0.5"
8
8
  description = "A sans-IO-backed ASGI server and HTTP client for without: h11/h2/wsproto over asyncio sockets."
9
9
  readme = "README.md"
10
10
  license = "MIT"
@@ -26,11 +26,13 @@ classifiers = [
26
26
  "Typing :: Typed",
27
27
  ]
28
28
  dependencies = [
29
- "without-core==0.0.3",
30
- "without-asgi==0.0.3",
29
+ "without-core==0.0.5",
30
+ "without-asgi==0.0.5",
31
31
  "h11>=0.16",
32
32
  "h2>=4.1",
33
33
  "wsproto>=1.2",
34
+ "aiohappyeyeballs>=2.6",
35
+ "brotli>=1.1",
34
36
  ]
35
37
 
36
38
  [tool.uv.sources]
@@ -1,20 +1,40 @@
1
+ from without_http.client import DEFAULT_DECOMPRESSORS
2
+ from without_http.client import GZIP_CONTAINER
3
+ from without_http.client import USER_AGENT
1
4
  from without_http.client import Client
2
5
  from without_http.client import ClientMiddleware
3
6
  from without_http.client import ClientRequest
4
7
  from without_http.client import ClientResponse
8
+ from without_http.client import Compressor
5
9
  from without_http.client import Connect
6
10
  from without_http.client import ConnectionPool
7
11
  from without_http.client import CookieJar
12
+ from without_http.client import Decompressor
13
+ from without_http.client import Resolve
8
14
  from without_http.client import ResponseBody
9
15
  from without_http.client import ResponseHead
10
16
  from without_http.client import ResponseTrailers
17
+ from without_http.client import StreamingCompressor
11
18
  from without_http.client import add_headers
19
+ from without_http.client import basic_auth
20
+ from without_http.client import bearer_auth
21
+ from without_http.client import brotli_compress
22
+ from without_http.client import brotli_compressor
23
+ from without_http.client import compressing
12
24
  from without_http.client import cookies
13
25
  from without_http.client import deadline
26
+ from without_http.client import decompress
27
+ from without_http.client import default_headers
14
28
  from without_http.client import follow_redirects
29
+ from without_http.client import gzip_compress
30
+ from without_http.client import gzip_compressor
15
31
  from without_http.client import request
16
32
  from without_http.client import stack
33
+ from without_http.client import tcp_connect
34
+ from without_http.client import user_agent
17
35
  from without_http.client import wrap
36
+ from without_http.client import zstd_compress
37
+ from without_http.client import zstd_compressor
18
38
  from without_http.h2_wire import early_hint_headers
19
39
  from without_http.h2_wire import request_headers
20
40
  from without_http.h2_wire import response_headers
@@ -38,37 +58,58 @@ from without_http.timeouts import ReadTimeout
38
58
  from without_http.timeouts import Timeout
39
59
  from without_http.timeouts import WriteTimeout
40
60
  from without_http.tls import ALPN_PROTOCOLS
61
+ from without_http.tls import distinguished_name
62
+ from without_http.tls import extensions_with_tls
41
63
  from without_http.tls import server_ssl_context
64
+ from without_http.tls import tls_extension
42
65
  from without_http.ws_wire import is_websocket_upgrade
43
66
  from without_http.ws_wire import websocket_scope_from_request
44
67
  from without_http.ws_wire import ws_events_from_outbound
45
68
 
46
69
  __all__ = [
47
70
  "ALPN_PROTOCOLS",
71
+ "DEFAULT_DECOMPRESSORS",
72
+ "GZIP_CONTAINER",
73
+ "USER_AGENT",
48
74
  "Client",
49
75
  "ClientMiddleware",
50
76
  "ClientRequest",
51
77
  "ClientResponse",
78
+ "Compressor",
52
79
  "Connect",
53
80
  "ConnectTimeout",
54
81
  "ConnectionPool",
55
82
  "CookieJar",
83
+ "Decompressor",
56
84
  "HTTPTimeout",
57
85
  "LifespanError",
58
86
  "PoolTimeout",
59
87
  "ReadTimeout",
88
+ "Resolve",
60
89
  "ResponseBody",
61
90
  "ResponseHead",
62
91
  "ResponseTrailers",
63
92
  "Server",
64
93
  "SocketOptions",
94
+ "StreamingCompressor",
65
95
  "Timeout",
66
96
  "WriteTimeout",
67
97
  "add_headers",
98
+ "basic_auth",
99
+ "bearer_auth",
100
+ "brotli_compress",
101
+ "brotli_compressor",
102
+ "compressing",
68
103
  "cookies",
69
104
  "deadline",
105
+ "decompress",
106
+ "default_headers",
107
+ "distinguished_name",
70
108
  "early_hint_headers",
109
+ "extensions_with_tls",
71
110
  "follow_redirects",
111
+ "gzip_compress",
112
+ "gzip_compressor",
72
113
  "h11_events_from_outbound",
73
114
  "inbound_from_event",
74
115
  "is_websocket_upgrade",
@@ -84,8 +125,13 @@ __all__ = [
84
125
  "server_ssl_context",
85
126
  "serving",
86
127
  "stack",
128
+ "tcp_connect",
87
129
  "tcp_keepalive",
130
+ "tls_extension",
131
+ "user_agent",
88
132
  "websocket_scope_from_request",
89
133
  "wrap",
90
134
  "ws_events_from_outbound",
135
+ "zstd_compress",
136
+ "zstd_compressor",
91
137
  ]