aboutsummaryrefslogtreecommitdiff
path: root/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/flow_control.py
diff options
context:
space:
mode:
authorS. Solomon Darnell2025-03-28 21:52:21 -0500
committerS. Solomon Darnell2025-03-28 21:52:21 -0500
commit4a52a71956a8d46fcb7294ac71734504bb09bcc2 (patch)
treeee3dc5af3b6313e921cd920906356f5d4febc4ed /.venv/lib/python3.12/site-packages/uvicorn/protocols/http/flow_control.py
parentcc961e04ba734dd72309fb548a2f97d67d578813 (diff)
downloadgn-ai-master.tar.gz
two version of R2R are hereHEADmaster
Diffstat (limited to '.venv/lib/python3.12/site-packages/uvicorn/protocols/http/flow_control.py')
-rw-r--r--.venv/lib/python3.12/site-packages/uvicorn/protocols/http/flow_control.py66
1 files changed, 66 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/flow_control.py b/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/flow_control.py
new file mode 100644
index 00000000..df642c7b
--- /dev/null
+++ b/.venv/lib/python3.12/site-packages/uvicorn/protocols/http/flow_control.py
@@ -0,0 +1,66 @@
+import asyncio
+
+from uvicorn._types import (
+ ASGIReceiveCallable,
+ ASGISendCallable,
+ HTTPResponseBodyEvent,
+ HTTPResponseStartEvent,
+ Scope,
+)
+
+CLOSE_HEADER = (b"connection", b"close")
+
+HIGH_WATER_LIMIT = 65536
+
+
+class FlowControl:
+ def __init__(self, transport: asyncio.Transport) -> None:
+ self._transport = transport
+ self.read_paused = False
+ self.write_paused = False
+ self._is_writable_event = asyncio.Event()
+ self._is_writable_event.set()
+
+ async def drain(self) -> None:
+ await self._is_writable_event.wait()
+
+ def pause_reading(self) -> None:
+ if not self.read_paused:
+ self.read_paused = True
+ self._transport.pause_reading()
+
+ def resume_reading(self) -> None:
+ if self.read_paused:
+ self.read_paused = False
+ self._transport.resume_reading()
+
+ def pause_writing(self) -> None:
+ if not self.write_paused:
+ self.write_paused = True
+ self._is_writable_event.clear()
+
+ def resume_writing(self) -> None:
+ if self.write_paused:
+ self.write_paused = False
+ self._is_writable_event.set()
+
+
+async def service_unavailable(
+ scope: "Scope", receive: "ASGIReceiveCallable", send: "ASGISendCallable"
+) -> None:
+ response_start: "HTTPResponseStartEvent" = {
+ "type": "http.response.start",
+ "status": 503,
+ "headers": [
+ (b"content-type", b"text/plain; charset=utf-8"),
+ (b"connection", b"close"),
+ ],
+ }
+ await send(response_start)
+
+ response_body: "HTTPResponseBodyEvent" = {
+ "type": "http.response.body",
+ "body": b"Service Unavailable",
+ "more_body": False,
+ }
+ await send(response_body)