tigrcorn-asgi 0.3.16.dev5__tar.gz → 0.3.16.dev11__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.
Files changed (32) hide show
  1. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/PKG-INFO +67 -14
  2. tigrcorn_asgi-0.3.16.dev11/README.md +97 -0
  3. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/pyproject.toml +5 -3
  4. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/events/websocket.py +2 -2
  5. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/receive.py +51 -0
  6. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi.egg-info/PKG-INFO +67 -14
  7. tigrcorn_asgi-0.3.16.dev11/src/tigrcorn_asgi.egg-info/requires.txt +1 -0
  8. tigrcorn_asgi-0.3.16.dev5/README.md +0 -46
  9. tigrcorn_asgi-0.3.16.dev5/src/tigrcorn_asgi.egg-info/requires.txt +0 -1
  10. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/LICENSE +0 -0
  11. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/setup.cfg +0 -0
  12. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/__init__.py +0 -0
  13. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/connection.py +0 -0
  14. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/errors.py +0 -0
  15. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/events/__init__.py +0 -0
  16. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/events/custom.py +0 -0
  17. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/events/http.py +0 -0
  18. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/events/lifespan.py +0 -0
  19. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/extensions/__init__.py +0 -0
  20. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/extensions/tls.py +0 -0
  21. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/extensions/websocket_denial.py +0 -0
  22. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/py.typed +0 -0
  23. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/scopes/__init__.py +0 -0
  24. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/scopes/custom.py +0 -0
  25. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/scopes/http.py +0 -0
  26. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/scopes/lifespan.py +0 -0
  27. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/scopes/websocket.py +0 -0
  28. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/send.py +0 -0
  29. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi/state.py +0 -0
  30. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi.egg-info/SOURCES.txt +0 -0
  31. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi.egg-info/dependency_links.txt +0 -0
  32. {tigrcorn_asgi-0.3.16.dev5 → tigrcorn_asgi-0.3.16.dev11}/src/tigrcorn_asgi.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tigrcorn-asgi
3
- Version: 0.3.16.dev5
3
+ Version: 0.3.16.dev11
4
4
  Summary: ASGI3 scope, event, receive/send, and extension primitives for the Tigrcorn Python web server.
5
5
  Author-email: Jacob Stewart <jacob@swarmauri.com>
6
6
  License: Apache License
@@ -175,38 +175,50 @@ Classifier: License :: OSI Approved :: Apache Software License
175
175
  Classifier: Operating System :: OS Independent
176
176
  Classifier: Programming Language :: Python :: 3
177
177
  Classifier: Programming Language :: Python :: 3 :: Only
178
+ Classifier: Programming Language :: Python :: 3.10
178
179
  Classifier: Programming Language :: Python :: 3.11
179
180
  Classifier: Programming Language :: Python :: 3.12
180
181
  Classifier: Programming Language :: Python :: 3.13
182
+ Classifier: Programming Language :: Python :: 3.14
181
183
  Classifier: Topic :: Internet :: WWW/HTTP
182
184
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
183
185
  Classifier: Typing :: Typed
184
- Requires-Python: >=3.11
186
+ Requires-Python: <3.15,>=3.10
185
187
  Description-Content-Type: text/markdown
186
188
  License-File: LICENSE
187
- Requires-Dist: tigrcorn-core==0.3.16.dev5
189
+ Requires-Dist: tigrcorn-core==0.3.16.dev11
188
190
  Dynamic: license-file
189
191
 
190
192
  <div align="center">
191
193
  <h1>tigrcorn-asgi</h1>
194
+ <img
195
+ src="https://raw.githubusercontent.com/Tigrbl/tigrcorn/master/assets/tigrcorn_logo.png"
196
+ alt="Tigrcorn tiger-unicorn logo"
197
+ width="140"
198
+ />
192
199
 
193
200
  <p><strong>ASGI3 scope, event, receive/send, and extension primitives for the Tigrcorn Python web server.</strong></p>
194
201
 
195
202
  <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="PyPI version for tigrcorn-asgi" src="https://img.shields.io/pypi/v/tigrcorn-asgi?label=PyPI"></a>
196
203
  <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="tigrcorn-asgi package on PyPI" src="https://img.shields.io/badge/package-PyPI-blue"></a>
204
+ <a href="https://pepy.tech/project/tigrcorn-asgi"><img alt="Downloads for tigrcorn-asgi" src="https://static.pepy.tech/badge/tigrcorn-asgi"></a>
205
+ <a href="https://github.com/tigrbl/tigrcorn/blob/master/pkgs/tigrcorn-asgi/README.md"><img alt="Hits for tigrcorn-asgi README" src="https://hits.sh/github.com/tigrbl/tigrcorn/blob/master/pkgs/tigrcorn-asgi/README.md.svg?label=hits"></a>
197
206
  <a href="LICENSE"><img alt="Apache 2.0 license" src="https://img.shields.io/badge/license-Apache%202.0-525252"></a>
198
- <a href="pyproject.toml"><img alt="Python 3.11 supported" src="https://img.shields.io/badge/python-3.11-3776ab"></a>
199
- <a href="pyproject.toml"><img alt="Python 3.12 supported" src="https://img.shields.io/badge/python-3.12-3776ab"></a>
200
- <a href="pyproject.toml"><img alt="Python 3.13 supported" src="https://img.shields.io/badge/python-3.13-3776ab"></a>
201
- <a href="src/tigrcorn_asgi/py.typed"><img alt="typed package" src="https://img.shields.io/badge/typed-py.typed-2f7ed8"></a>
207
+ <a href="pyproject.toml"><img alt="Python 3.10 | 3.11 | 3.12 | 3.13 | 3.14 supported" src="https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-3776ab"></a>
202
208
  <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="asgi role package" src="https://img.shields.io/badge/role-asgi-0a7f5a"></a>
203
209
  </div>
204
210
 
211
+ <p align="center"><a href="https://github.com/Tigrbl/tigrcorn/blob/master/.ssot/registry.json"><img alt="SSOT governed" src="https://img.shields.io/badge/SSOT-governed-2f6f4e.svg"></a> <a href="https://discord.gg/jzvrbEtTtt"><img alt="Discord" src="https://img.shields.io/badge/Discord-Join%20chat-5865F2?logo=discord&amp;logoColor=white"></a></p>
212
+
205
213
  ## Install
206
214
 
207
- ~~~bash
215
+ ```bash
216
+ uv add tigrcorn-asgi
217
+ ```
218
+
219
+ ```bash
208
220
  pip install tigrcorn-asgi
209
- ~~~
221
+ ```
210
222
 
211
223
  Use the aggregate [tigrcorn](https://pypi.org/project/tigrcorn/) distribution when you want the full ASGI3 Python web server stack. Install <code>tigrcorn-asgi</code> directly when you want only this package boundary and its declared dependencies.
212
224
 
@@ -214,22 +226,63 @@ Use the aggregate [tigrcorn](https://pypi.org/project/tigrcorn/) distribution wh
214
226
 
215
227
  <code>tigrcorn-asgi</code> owns ASGI scopes, ASGI events, receive/send channels, extensions, and connection state. Its import package is <code>tigrcorn_asgi</code>, and its declared package dependencies are: tigrcorn-core.
216
228
 
217
- This package page is written for developers searching for Tigrcorn ASGI3 server components, Python web server packages, HTTP/3 and QUIC support, WebSocket and WebTransport runtime surfaces, typed package boundaries, and Apache 2.0 licensed infrastructure.
229
+ This package page is written for developers searching for Tigrcorn ASGI3 server components, Python web server packages, HTTP/3 and QUIC support, WebSocket and WebTransport-adjacent surfaces, and Apache 2.0 licensed infrastructure.
230
+
231
+ ## Why Use This?
232
+
233
+ Use <code>tigrcorn-asgi</code> when you want the asgi layer as a direct install target instead of the full server bundle. It lets application, operator, or certification workflows depend on this boundary explicitly while keeping the broader Tigrcorn runtime assembled from smaller repo-owned package surfaces.
234
+
235
+ ## FAQ
236
+
237
+ ### What does this package export?
238
+
239
+ The package exports through the <code>tigrcorn_asgi</code> namespace and keeps the root <code>tigrcorn</code> package as the compatibility umbrella.
240
+
241
+ ### Which boundary does this package own?
242
+
243
+ It is the package boundary for ASGI scopes, ASGI events, receive/send channels, extensions, and connection state in the Tigrcorn package graph.
244
+
245
+ ### Why is this package separate from runtime and protocols?
246
+
247
+ It isolates scopes, events, extensions, and receive/send contracts so protocol and runtime packages can share one ASGI3 boundary without duplicating event or scope logic.
248
+
249
+ ## Features
250
+
251
+ - Owns ASGI scopes, ASGI events, receive/send channels, extensions, and connection state inside the Tigrcorn split-package architecture.
252
+ - Publishes the <code>tigrcorn_asgi</code> import surface for module-oriented public surfaces.
253
+ - Declared runtime dependencies: tigrcorn-core.
254
+ - Optional dependency surface: none.
255
+ - Supports Python 3.10, 3.11, 3.12, 3.13, and 3.14.
218
256
 
219
257
  ## Use It When
220
258
 
221
- Use <code>tigrcorn-asgi</code> when you need ASGI3 event, scope, extension, or channel primitives without importing the full server runtime. It is part of Tigrcorn's split-package architecture, so it can be installed independently while remaining linked to the rest of the Tigrcorn package family on PyPI.
259
+ Use <code>tigrcorn-asgi</code> when you need asgi-level behavior without pulling the entire server stack into the import surface. It is part of Tigrcorn's split-package architecture, so it can be installed independently while remaining linked to the rest of the Tigrcorn package family on PyPI.
222
260
 
223
261
  ## Import Surface
224
262
 
225
- ~~~python
263
+ ```python
226
264
  import tigrcorn_asgi
227
265
 
228
266
  print(tigrcorn_asgi.__name__)
229
- ~~~
267
+ ```
230
268
 
231
269
  The package exposes its supported public surface through the <code>tigrcorn_asgi</code> namespace. The root [tigrcorn](https://pypi.org/project/tigrcorn/) package keeps compatibility shims for users who install the full server distribution.
232
270
 
271
+ ## Related Packages
272
+
273
+ - [tigrcorn-core](https://pypi.org/project/tigrcorn-core/)
274
+ - [tigrcorn](https://pypi.org/project/tigrcorn/)
275
+
233
276
  ## Package Graph
234
277
 
235
- [tigrcorn](https://pypi.org/project/tigrcorn/) | [tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
278
+ [tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
279
+
280
+ ## Best Practices
281
+
282
+ - Keep new event and scope behavior aligned to ASGI3 contracts first, then layer protocol-specific behavior on top.
283
+ - Reuse the shared ASGI surface here before inventing protocol-local scope or event shapes.
284
+ - Validate extension and connection-state assumptions at this boundary before they leak into runtime code.
285
+
286
+ ## License
287
+
288
+ Apache-2.0
@@ -0,0 +1,97 @@
1
+ <div align="center">
2
+ <h1>tigrcorn-asgi</h1>
3
+ <img
4
+ src="https://raw.githubusercontent.com/Tigrbl/tigrcorn/master/assets/tigrcorn_logo.png"
5
+ alt="Tigrcorn tiger-unicorn logo"
6
+ width="140"
7
+ />
8
+
9
+ <p><strong>ASGI3 scope, event, receive/send, and extension primitives for the Tigrcorn Python web server.</strong></p>
10
+
11
+ <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="PyPI version for tigrcorn-asgi" src="https://img.shields.io/pypi/v/tigrcorn-asgi?label=PyPI"></a>
12
+ <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="tigrcorn-asgi package on PyPI" src="https://img.shields.io/badge/package-PyPI-blue"></a>
13
+ <a href="https://pepy.tech/project/tigrcorn-asgi"><img alt="Downloads for tigrcorn-asgi" src="https://static.pepy.tech/badge/tigrcorn-asgi"></a>
14
+ <a href="https://github.com/tigrbl/tigrcorn/blob/master/pkgs/tigrcorn-asgi/README.md"><img alt="Hits for tigrcorn-asgi README" src="https://hits.sh/github.com/tigrbl/tigrcorn/blob/master/pkgs/tigrcorn-asgi/README.md.svg?label=hits"></a>
15
+ <a href="LICENSE"><img alt="Apache 2.0 license" src="https://img.shields.io/badge/license-Apache%202.0-525252"></a>
16
+ <a href="pyproject.toml"><img alt="Python 3.10 | 3.11 | 3.12 | 3.13 | 3.14 supported" src="https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-3776ab"></a>
17
+ <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="asgi role package" src="https://img.shields.io/badge/role-asgi-0a7f5a"></a>
18
+ </div>
19
+
20
+ <p align="center"><a href="https://github.com/Tigrbl/tigrcorn/blob/master/.ssot/registry.json"><img alt="SSOT governed" src="https://img.shields.io/badge/SSOT-governed-2f6f4e.svg"></a> <a href="https://discord.gg/jzvrbEtTtt"><img alt="Discord" src="https://img.shields.io/badge/Discord-Join%20chat-5865F2?logo=discord&amp;logoColor=white"></a></p>
21
+
22
+ ## Install
23
+
24
+ ```bash
25
+ uv add tigrcorn-asgi
26
+ ```
27
+
28
+ ```bash
29
+ pip install tigrcorn-asgi
30
+ ```
31
+
32
+ Use the aggregate [tigrcorn](https://pypi.org/project/tigrcorn/) distribution when you want the full ASGI3 Python web server stack. Install <code>tigrcorn-asgi</code> directly when you want only this package boundary and its declared dependencies.
33
+
34
+ ## What It Owns
35
+
36
+ <code>tigrcorn-asgi</code> owns ASGI scopes, ASGI events, receive/send channels, extensions, and connection state. Its import package is <code>tigrcorn_asgi</code>, and its declared package dependencies are: tigrcorn-core.
37
+
38
+ This package page is written for developers searching for Tigrcorn ASGI3 server components, Python web server packages, HTTP/3 and QUIC support, WebSocket and WebTransport-adjacent surfaces, and Apache 2.0 licensed infrastructure.
39
+
40
+ ## Why Use This?
41
+
42
+ Use <code>tigrcorn-asgi</code> when you want the asgi layer as a direct install target instead of the full server bundle. It lets application, operator, or certification workflows depend on this boundary explicitly while keeping the broader Tigrcorn runtime assembled from smaller repo-owned package surfaces.
43
+
44
+ ## FAQ
45
+
46
+ ### What does this package export?
47
+
48
+ The package exports through the <code>tigrcorn_asgi</code> namespace and keeps the root <code>tigrcorn</code> package as the compatibility umbrella.
49
+
50
+ ### Which boundary does this package own?
51
+
52
+ It is the package boundary for ASGI scopes, ASGI events, receive/send channels, extensions, and connection state in the Tigrcorn package graph.
53
+
54
+ ### Why is this package separate from runtime and protocols?
55
+
56
+ It isolates scopes, events, extensions, and receive/send contracts so protocol and runtime packages can share one ASGI3 boundary without duplicating event or scope logic.
57
+
58
+ ## Features
59
+
60
+ - Owns ASGI scopes, ASGI events, receive/send channels, extensions, and connection state inside the Tigrcorn split-package architecture.
61
+ - Publishes the <code>tigrcorn_asgi</code> import surface for module-oriented public surfaces.
62
+ - Declared runtime dependencies: tigrcorn-core.
63
+ - Optional dependency surface: none.
64
+ - Supports Python 3.10, 3.11, 3.12, 3.13, and 3.14.
65
+
66
+ ## Use It When
67
+
68
+ Use <code>tigrcorn-asgi</code> when you need asgi-level behavior without pulling the entire server stack into the import surface. It is part of Tigrcorn's split-package architecture, so it can be installed independently while remaining linked to the rest of the Tigrcorn package family on PyPI.
69
+
70
+ ## Import Surface
71
+
72
+ ```python
73
+ import tigrcorn_asgi
74
+
75
+ print(tigrcorn_asgi.__name__)
76
+ ```
77
+
78
+ The package exposes its supported public surface through the <code>tigrcorn_asgi</code> namespace. The root [tigrcorn](https://pypi.org/project/tigrcorn/) package keeps compatibility shims for users who install the full server distribution.
79
+
80
+ ## Related Packages
81
+
82
+ - [tigrcorn-core](https://pypi.org/project/tigrcorn-core/)
83
+ - [tigrcorn](https://pypi.org/project/tigrcorn/)
84
+
85
+ ## Package Graph
86
+
87
+ [tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
88
+
89
+ ## Best Practices
90
+
91
+ - Keep new event and scope behavior aligned to ASGI3 contracts first, then layer protocol-specific behavior on top.
92
+ - Reuse the shared ASGI surface here before inventing protocol-local scope or event shapes.
93
+ - Validate extension and connection-state assumptions at this boundary before they leak into runtime code.
94
+
95
+ ## License
96
+
97
+ Apache-2.0
@@ -4,10 +4,10 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "tigrcorn-asgi"
7
- version = "0.3.16.dev5"
7
+ version = "0.3.16.dev11"
8
8
  description = "ASGI3 scope, event, receive/send, and extension primitives for the Tigrcorn Python web server."
9
9
  readme = "README.md"
10
- requires-python = ">=3.11"
10
+ requires-python = ">=3.10,<3.15"
11
11
  license = {file = "LICENSE"}
12
12
  authors = [{name = "Jacob Stewart", email = "jacob@swarmauri.com"}]
13
13
  keywords = ["tigrcorn", "asgi", "asgi3", "scopes", "events", "extensions", "python-web-server"]
@@ -19,14 +19,16 @@ classifiers = [
19
19
  "Operating System :: OS Independent",
20
20
  "Programming Language :: Python :: 3",
21
21
  "Programming Language :: Python :: 3 :: Only",
22
+ "Programming Language :: Python :: 3.10",
22
23
  "Programming Language :: Python :: 3.11",
23
24
  "Programming Language :: Python :: 3.12",
24
25
  "Programming Language :: Python :: 3.13",
26
+ "Programming Language :: Python :: 3.14",
25
27
  "Topic :: Internet :: WWW/HTTP",
26
28
  "Topic :: Software Development :: Libraries :: Python Modules",
27
29
  "Typing :: Typed",
28
30
  ]
29
- dependencies = ["tigrcorn-core==0.3.16.dev5"]
31
+ dependencies = ["tigrcorn-core==0.3.16.dev11"]
30
32
 
31
33
  [tool.setuptools]
32
34
  package-dir = {"" = "src"}
@@ -6,11 +6,11 @@ def websocket_connect() -> dict:
6
6
 
7
7
 
8
8
  def websocket_receive_text(text: str) -> dict:
9
- return {"type": "websocket.receive", "text": text, "bytes": None}
9
+ return {"type": "websocket.receive", "text": text, "bytes": None, "framing": "text"}
10
10
 
11
11
 
12
12
  def websocket_receive_bytes(data: bytes) -> dict:
13
- return {"type": "websocket.receive", "text": None, "bytes": data}
13
+ return {"type": "websocket.receive", "text": None, "bytes": data, "framing": "bytes"}
14
14
 
15
15
 
16
16
  def websocket_disconnect(code: int = 1005, reason: str = "") -> dict:
@@ -54,6 +54,57 @@ class HTTPRequestReceive:
54
54
  return http_disconnect()
55
55
 
56
56
 
57
+ class HTTP2QueuedRequestReceive:
58
+ """Queue-backed HTTP/2 request body with consumption-driven flow credit."""
59
+
60
+ def __init__(
61
+ self,
62
+ *,
63
+ trailers: list[tuple[bytes, bytes]] | None = None,
64
+ trailer_policy: str = 'pass',
65
+ on_body_consumed: Callable[[int], Awaitable[None]] | None = None,
66
+ ) -> None:
67
+ self._queue: asyncio.Queue[Message] = asyncio.Queue()
68
+ self._trailers = apply_request_trailer_policy(list(trailers or ()), trailer_policy)
69
+ self._on_body_consumed = on_body_consumed
70
+ self._body_complete = False
71
+ self._sent_trailers = False
72
+ self._disconnected = False
73
+
74
+ @property
75
+ def body_complete(self) -> bool:
76
+ return self._body_complete
77
+
78
+ async def put_body(self, body: bytes, *, more_body: bool) -> None:
79
+ if self._body_complete:
80
+ return
81
+ if not more_body:
82
+ self._body_complete = True
83
+ await self._queue.put(http_request(body, more_body))
84
+
85
+ async def finish_body(self) -> None:
86
+ if not self._body_complete:
87
+ await self.put_body(b'', more_body=False)
88
+
89
+ async def put_trailers(self, trailers: list[tuple[bytes, bytes]]) -> None:
90
+ self._trailers = apply_request_trailer_policy(trailers, 'pass')
91
+
92
+ async def __call__(self) -> Message:
93
+ if self._disconnected:
94
+ return http_disconnect()
95
+ if not self._body_complete or not self._queue.empty():
96
+ message = await self._queue.get()
97
+ body = message.get('body', b'')
98
+ if body and self._on_body_consumed is not None:
99
+ await self._on_body_consumed(len(body))
100
+ return message
101
+ if self._trailers and not self._sent_trailers:
102
+ self._sent_trailers = True
103
+ return http_request_trailers(self._trailers)
104
+ self._disconnected = True
105
+ return http_disconnect()
106
+
107
+
57
108
  class HTTPStreamingRequestReceive:
58
109
  """Reader-backed HTTP/1.1 request body exposed incrementally as ASGI events."""
59
110
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tigrcorn-asgi
3
- Version: 0.3.16.dev5
3
+ Version: 0.3.16.dev11
4
4
  Summary: ASGI3 scope, event, receive/send, and extension primitives for the Tigrcorn Python web server.
5
5
  Author-email: Jacob Stewart <jacob@swarmauri.com>
6
6
  License: Apache License
@@ -175,38 +175,50 @@ Classifier: License :: OSI Approved :: Apache Software License
175
175
  Classifier: Operating System :: OS Independent
176
176
  Classifier: Programming Language :: Python :: 3
177
177
  Classifier: Programming Language :: Python :: 3 :: Only
178
+ Classifier: Programming Language :: Python :: 3.10
178
179
  Classifier: Programming Language :: Python :: 3.11
179
180
  Classifier: Programming Language :: Python :: 3.12
180
181
  Classifier: Programming Language :: Python :: 3.13
182
+ Classifier: Programming Language :: Python :: 3.14
181
183
  Classifier: Topic :: Internet :: WWW/HTTP
182
184
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
183
185
  Classifier: Typing :: Typed
184
- Requires-Python: >=3.11
186
+ Requires-Python: <3.15,>=3.10
185
187
  Description-Content-Type: text/markdown
186
188
  License-File: LICENSE
187
- Requires-Dist: tigrcorn-core==0.3.16.dev5
189
+ Requires-Dist: tigrcorn-core==0.3.16.dev11
188
190
  Dynamic: license-file
189
191
 
190
192
  <div align="center">
191
193
  <h1>tigrcorn-asgi</h1>
194
+ <img
195
+ src="https://raw.githubusercontent.com/Tigrbl/tigrcorn/master/assets/tigrcorn_logo.png"
196
+ alt="Tigrcorn tiger-unicorn logo"
197
+ width="140"
198
+ />
192
199
 
193
200
  <p><strong>ASGI3 scope, event, receive/send, and extension primitives for the Tigrcorn Python web server.</strong></p>
194
201
 
195
202
  <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="PyPI version for tigrcorn-asgi" src="https://img.shields.io/pypi/v/tigrcorn-asgi?label=PyPI"></a>
196
203
  <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="tigrcorn-asgi package on PyPI" src="https://img.shields.io/badge/package-PyPI-blue"></a>
204
+ <a href="https://pepy.tech/project/tigrcorn-asgi"><img alt="Downloads for tigrcorn-asgi" src="https://static.pepy.tech/badge/tigrcorn-asgi"></a>
205
+ <a href="https://github.com/tigrbl/tigrcorn/blob/master/pkgs/tigrcorn-asgi/README.md"><img alt="Hits for tigrcorn-asgi README" src="https://hits.sh/github.com/tigrbl/tigrcorn/blob/master/pkgs/tigrcorn-asgi/README.md.svg?label=hits"></a>
197
206
  <a href="LICENSE"><img alt="Apache 2.0 license" src="https://img.shields.io/badge/license-Apache%202.0-525252"></a>
198
- <a href="pyproject.toml"><img alt="Python 3.11 supported" src="https://img.shields.io/badge/python-3.11-3776ab"></a>
199
- <a href="pyproject.toml"><img alt="Python 3.12 supported" src="https://img.shields.io/badge/python-3.12-3776ab"></a>
200
- <a href="pyproject.toml"><img alt="Python 3.13 supported" src="https://img.shields.io/badge/python-3.13-3776ab"></a>
201
- <a href="src/tigrcorn_asgi/py.typed"><img alt="typed package" src="https://img.shields.io/badge/typed-py.typed-2f7ed8"></a>
207
+ <a href="pyproject.toml"><img alt="Python 3.10 | 3.11 | 3.12 | 3.13 | 3.14 supported" src="https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12%20%7C%203.13%20%7C%203.14-3776ab"></a>
202
208
  <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="asgi role package" src="https://img.shields.io/badge/role-asgi-0a7f5a"></a>
203
209
  </div>
204
210
 
211
+ <p align="center"><a href="https://github.com/Tigrbl/tigrcorn/blob/master/.ssot/registry.json"><img alt="SSOT governed" src="https://img.shields.io/badge/SSOT-governed-2f6f4e.svg"></a> <a href="https://discord.gg/jzvrbEtTtt"><img alt="Discord" src="https://img.shields.io/badge/Discord-Join%20chat-5865F2?logo=discord&amp;logoColor=white"></a></p>
212
+
205
213
  ## Install
206
214
 
207
- ~~~bash
215
+ ```bash
216
+ uv add tigrcorn-asgi
217
+ ```
218
+
219
+ ```bash
208
220
  pip install tigrcorn-asgi
209
- ~~~
221
+ ```
210
222
 
211
223
  Use the aggregate [tigrcorn](https://pypi.org/project/tigrcorn/) distribution when you want the full ASGI3 Python web server stack. Install <code>tigrcorn-asgi</code> directly when you want only this package boundary and its declared dependencies.
212
224
 
@@ -214,22 +226,63 @@ Use the aggregate [tigrcorn](https://pypi.org/project/tigrcorn/) distribution wh
214
226
 
215
227
  <code>tigrcorn-asgi</code> owns ASGI scopes, ASGI events, receive/send channels, extensions, and connection state. Its import package is <code>tigrcorn_asgi</code>, and its declared package dependencies are: tigrcorn-core.
216
228
 
217
- This package page is written for developers searching for Tigrcorn ASGI3 server components, Python web server packages, HTTP/3 and QUIC support, WebSocket and WebTransport runtime surfaces, typed package boundaries, and Apache 2.0 licensed infrastructure.
229
+ This package page is written for developers searching for Tigrcorn ASGI3 server components, Python web server packages, HTTP/3 and QUIC support, WebSocket and WebTransport-adjacent surfaces, and Apache 2.0 licensed infrastructure.
230
+
231
+ ## Why Use This?
232
+
233
+ Use <code>tigrcorn-asgi</code> when you want the asgi layer as a direct install target instead of the full server bundle. It lets application, operator, or certification workflows depend on this boundary explicitly while keeping the broader Tigrcorn runtime assembled from smaller repo-owned package surfaces.
234
+
235
+ ## FAQ
236
+
237
+ ### What does this package export?
238
+
239
+ The package exports through the <code>tigrcorn_asgi</code> namespace and keeps the root <code>tigrcorn</code> package as the compatibility umbrella.
240
+
241
+ ### Which boundary does this package own?
242
+
243
+ It is the package boundary for ASGI scopes, ASGI events, receive/send channels, extensions, and connection state in the Tigrcorn package graph.
244
+
245
+ ### Why is this package separate from runtime and protocols?
246
+
247
+ It isolates scopes, events, extensions, and receive/send contracts so protocol and runtime packages can share one ASGI3 boundary without duplicating event or scope logic.
248
+
249
+ ## Features
250
+
251
+ - Owns ASGI scopes, ASGI events, receive/send channels, extensions, and connection state inside the Tigrcorn split-package architecture.
252
+ - Publishes the <code>tigrcorn_asgi</code> import surface for module-oriented public surfaces.
253
+ - Declared runtime dependencies: tigrcorn-core.
254
+ - Optional dependency surface: none.
255
+ - Supports Python 3.10, 3.11, 3.12, 3.13, and 3.14.
218
256
 
219
257
  ## Use It When
220
258
 
221
- Use <code>tigrcorn-asgi</code> when you need ASGI3 event, scope, extension, or channel primitives without importing the full server runtime. It is part of Tigrcorn's split-package architecture, so it can be installed independently while remaining linked to the rest of the Tigrcorn package family on PyPI.
259
+ Use <code>tigrcorn-asgi</code> when you need asgi-level behavior without pulling the entire server stack into the import surface. It is part of Tigrcorn's split-package architecture, so it can be installed independently while remaining linked to the rest of the Tigrcorn package family on PyPI.
222
260
 
223
261
  ## Import Surface
224
262
 
225
- ~~~python
263
+ ```python
226
264
  import tigrcorn_asgi
227
265
 
228
266
  print(tigrcorn_asgi.__name__)
229
- ~~~
267
+ ```
230
268
 
231
269
  The package exposes its supported public surface through the <code>tigrcorn_asgi</code> namespace. The root [tigrcorn](https://pypi.org/project/tigrcorn/) package keeps compatibility shims for users who install the full server distribution.
232
270
 
271
+ ## Related Packages
272
+
273
+ - [tigrcorn-core](https://pypi.org/project/tigrcorn-core/)
274
+ - [tigrcorn](https://pypi.org/project/tigrcorn/)
275
+
233
276
  ## Package Graph
234
277
 
235
- [tigrcorn](https://pypi.org/project/tigrcorn/) | [tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
278
+ [tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
279
+
280
+ ## Best Practices
281
+
282
+ - Keep new event and scope behavior aligned to ASGI3 contracts first, then layer protocol-specific behavior on top.
283
+ - Reuse the shared ASGI surface here before inventing protocol-local scope or event shapes.
284
+ - Validate extension and connection-state assumptions at this boundary before they leak into runtime code.
285
+
286
+ ## License
287
+
288
+ Apache-2.0
@@ -0,0 +1 @@
1
+ tigrcorn-core==0.3.16.dev11
@@ -1,46 +0,0 @@
1
- <div align="center">
2
- <h1>tigrcorn-asgi</h1>
3
-
4
- <p><strong>ASGI3 scope, event, receive/send, and extension primitives for the Tigrcorn Python web server.</strong></p>
5
-
6
- <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="PyPI version for tigrcorn-asgi" src="https://img.shields.io/pypi/v/tigrcorn-asgi?label=PyPI"></a>
7
- <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="tigrcorn-asgi package on PyPI" src="https://img.shields.io/badge/package-PyPI-blue"></a>
8
- <a href="LICENSE"><img alt="Apache 2.0 license" src="https://img.shields.io/badge/license-Apache%202.0-525252"></a>
9
- <a href="pyproject.toml"><img alt="Python 3.11 supported" src="https://img.shields.io/badge/python-3.11-3776ab"></a>
10
- <a href="pyproject.toml"><img alt="Python 3.12 supported" src="https://img.shields.io/badge/python-3.12-3776ab"></a>
11
- <a href="pyproject.toml"><img alt="Python 3.13 supported" src="https://img.shields.io/badge/python-3.13-3776ab"></a>
12
- <a href="src/tigrcorn_asgi/py.typed"><img alt="typed package" src="https://img.shields.io/badge/typed-py.typed-2f7ed8"></a>
13
- <a href="https://pypi.org/project/tigrcorn-asgi/"><img alt="asgi role package" src="https://img.shields.io/badge/role-asgi-0a7f5a"></a>
14
- </div>
15
-
16
- ## Install
17
-
18
- ~~~bash
19
- pip install tigrcorn-asgi
20
- ~~~
21
-
22
- Use the aggregate [tigrcorn](https://pypi.org/project/tigrcorn/) distribution when you want the full ASGI3 Python web server stack. Install <code>tigrcorn-asgi</code> directly when you want only this package boundary and its declared dependencies.
23
-
24
- ## What It Owns
25
-
26
- <code>tigrcorn-asgi</code> owns ASGI scopes, ASGI events, receive/send channels, extensions, and connection state. Its import package is <code>tigrcorn_asgi</code>, and its declared package dependencies are: tigrcorn-core.
27
-
28
- This package page is written for developers searching for Tigrcorn ASGI3 server components, Python web server packages, HTTP/3 and QUIC support, WebSocket and WebTransport runtime surfaces, typed package boundaries, and Apache 2.0 licensed infrastructure.
29
-
30
- ## Use It When
31
-
32
- Use <code>tigrcorn-asgi</code> when you need ASGI3 event, scope, extension, or channel primitives without importing the full server runtime. It is part of Tigrcorn's split-package architecture, so it can be installed independently while remaining linked to the rest of the Tigrcorn package family on PyPI.
33
-
34
- ## Import Surface
35
-
36
- ~~~python
37
- import tigrcorn_asgi
38
-
39
- print(tigrcorn_asgi.__name__)
40
- ~~~
41
-
42
- The package exposes its supported public surface through the <code>tigrcorn_asgi</code> namespace. The root [tigrcorn](https://pypi.org/project/tigrcorn/) package keeps compatibility shims for users who install the full server distribution.
43
-
44
- ## Package Graph
45
-
46
- [tigrcorn](https://pypi.org/project/tigrcorn/) | [tigrcorn-core](https://pypi.org/project/tigrcorn-core/) | [tigrcorn-config](https://pypi.org/project/tigrcorn-config/) | [tigrcorn-asgi](https://pypi.org/project/tigrcorn-asgi/) | [tigrcorn-contract](https://pypi.org/project/tigrcorn-contract/) | [tigrcorn-transports](https://pypi.org/project/tigrcorn-transports/) | [tigrcorn-protocols](https://pypi.org/project/tigrcorn-protocols/) | [tigrcorn-http](https://pypi.org/project/tigrcorn-http/) | [tigrcorn-security](https://pypi.org/project/tigrcorn-security/) | [tigrcorn-runtime](https://pypi.org/project/tigrcorn-runtime/) | [tigrcorn-static](https://pypi.org/project/tigrcorn-static/) | [tigrcorn-observability](https://pypi.org/project/tigrcorn-observability/) | [tigrcorn-compat](https://pypi.org/project/tigrcorn-compat/) | [tigrcorn-certification](https://pypi.org/project/tigrcorn-certification/)
@@ -1 +0,0 @@
1
- tigrcorn-core==0.3.16.dev5