/
opt
/
cloudlinux
/
venv
/
lib
/
python3.11
/
site-packages
/
aiohttp
/
/opt/cloudlinux/venv/lib/python3.11/site-packages/aiohttp
mkdir
upload
Name
Size
Mode
Actions
.hash/
-
0755
rm
__pycache__/
-
0755
rm
abc.py
5500
0644
edit
dl
rm
base_protocol.py
2741
0644
edit
dl
rm
client.py
47276
0644
edit
dl
rm
client_exceptions.py
9411
0644
edit
dl
rm
client_proto.py
8651
0644
edit
dl
rm
client_reqrep.py
39680
0644
edit
dl
rm
client_ws.py
11010
0644
edit
dl
rm
compression_utils.py
5015
0644
edit
dl
rm
connector.py
52798
0644
edit
dl
rm
cookiejar.py
14015
0644
edit
dl
rm
formdata.py
6106
0644
edit
dl
rm
hdrs.py
4613
0644
edit
dl
rm
helpers.py
30255
0644
edit
dl
rm
http.py
1842
0644
edit
dl
rm
http_exceptions.py
2716
0644
edit
dl
rm
http_parser.py
35496
0644
edit
dl
rm
http_websocket.py
26716
0644
edit
dl
rm
http_writer.py
5933
0644
edit
dl
rm
locks.py
1136
0644
edit
dl
rm
log.py
325
0644
edit
dl
rm
multipart.py
32472
0644
edit
dl
rm
payload.py
13542
0644
edit
dl
rm
payload_streamer.py
2087
0644
edit
dl
rm
py.typed
7
0644
edit
dl
rm
pytest_plugin.py
11605
0644
edit
dl
rm
resolver.py
5070
0644
edit
dl
rm
streams.py
20836
0644
edit
dl
rm
tcp_helpers.py
961
0644
edit
dl
rm
test_utils.py
20185
0644
edit
dl
rm
tracing.py
15132
0644
edit
dl
rm
typedefs.py
1471
0644
edit
dl
rm
web.py
19263
0644
edit
dl
rm
web_app.py
18311
0644
edit
dl
rm
web_exceptions.py
10360
0644
edit
dl
rm
web_fileresponse.py
11416
0644
edit
dl
rm
web_log.py
7801
0644
edit
dl
rm
web_middlewares.py
4032
0644
edit
dl
rm
web_protocol.py
23044
0644
edit
dl
rm
web_request.py
28756
0644
edit
dl
rm
web_response.py
27729
0644
edit
dl
rm
web_routedef.py
6132
0644
edit
dl
rm
web_runner.py
11736
0644
edit
dl
rm
web_server.py
2587
0644
edit
dl
rm
web_urldispatcher.py
40057
0644
edit
dl
rm
web_ws.py
18647
0644
edit
dl
rm
worker.py
7965
0644
edit
dl
rm
_cparser.pxd
4318
0644
edit
dl
rm
_find_header.pxd
68
0644
edit
dl
rm
_headers.pxi
2007
0644
edit
dl
rm
_helpers.cpython-311-x86_64-linux-gnu.so
310476
0755
edit
dl
rm
_helpers.pyi
202
0644
edit
dl
rm
_helpers.pyx
1049
0644
edit
dl
rm
_http_parser.cpython-311-x86_64-linux-gnu.so
1889106
0755
edit
dl
rm
_http_parser.pyx
28058
0644
edit
dl
rm
_http_writer.cpython-311-x86_64-linux-gnu.so
320845
0755
edit
dl
rm
_http_writer.pyx
4575
0644
edit
dl
rm
_websocket.cpython-311-x86_64-linux-gnu.so
187629
0755
edit
dl
rm
_websocket.pyx
1561
0644
edit
dl
rm
__init__.py
7762
0644
edit
dl
rm
Edit:
/opt/cloudlinux/venv/lib/python3.11/site-packages/aiohttp/http_writer.py
(5933B)
"""Http related parsers and protocol.""" import asyncio import zlib from typing import Any, Awaitable, Callable, NamedTuple, Optional, Union # noqa from multidict import CIMultiDict from .abc import AbstractStreamWriter from .base_protocol import BaseProtocol from .compression_utils import ZLibCompressor from .helpers import NO_EXTENSIONS __all__ = ("StreamWriter", "HttpVersion", "HttpVersion10", "HttpVersion11") class HttpVersion(NamedTuple): major: int minor: int HttpVersion10 = HttpVersion(1, 0) HttpVersion11 = HttpVersion(1, 1) _T_OnChunkSent = Optional[Callable[[bytes], Awaitable[None]]] _T_OnHeadersSent = Optional[Callable[["CIMultiDict[str]"], Awaitable[None]]] class StreamWriter(AbstractStreamWriter): def __init__( self, protocol: BaseProtocol, loop: asyncio.AbstractEventLoop, on_chunk_sent: _T_OnChunkSent = None, on_headers_sent: _T_OnHeadersSent = None, ) -> None: self._protocol = protocol self.loop = loop self.length = None self.chunked = False self.buffer_size = 0 self.output_size = 0 self._eof = False self._compress: Optional[ZLibCompressor] = None self._drain_waiter = None self._on_chunk_sent: _T_OnChunkSent = on_chunk_sent self._on_headers_sent: _T_OnHeadersSent = on_headers_sent @property def transport(self) -> Optional[asyncio.Transport]: return self._protocol.transport @property def protocol(self) -> BaseProtocol: return self._protocol def enable_chunking(self) -> None: self.chunked = True def enable_compression( self, encoding: str = "deflate", strategy: int = zlib.Z_DEFAULT_STRATEGY ) -> None: self._compress = ZLibCompressor(encoding=encoding, strategy=strategy) def _write(self, chunk: bytes) -> None: size = len(chunk) self.buffer_size += size self.output_size += size transport = self.transport if not self._protocol.connected or transport is None or transport.is_closing(): raise ConnectionResetError("Cannot write to closing transport") transport.write(chunk) async def write( self, chunk: bytes, *, drain: bool = True, LIMIT: int = 0x10000 ) -> None: """Writes chunk of data to a stream. write_eof() indicates end of stream. writer can't be used after write_eof() method being called. write() return drain future. """ if self._on_chunk_sent is not None: await self._on_chunk_sent(chunk) if isinstance(chunk, memoryview): if chunk.nbytes != len(chunk): # just reshape it chunk = chunk.cast("c") if self._compress is not None: chunk = await self._compress.compress(chunk) if not chunk: return if self.length is not None: chunk_len = len(chunk) if self.length >= chunk_len: self.length = self.length - chunk_len else: chunk = chunk[: self.length] self.length = 0 if not chunk: return if chunk: if self.chunked: chunk_len_pre = ("%x\r\n" % len(chunk)).encode("ascii") chunk = chunk_len_pre + chunk + b"\r\n" self._write(chunk) if self.buffer_size > LIMIT and drain: self.buffer_size = 0 await self.drain() async def write_headers( self, status_line: str, headers: "CIMultiDict[str]" ) -> None: """Write request/response status and headers.""" if self._on_headers_sent is not None: await self._on_headers_sent(headers) # status + headers buf = _serialize_headers(status_line, headers) self._write(buf) async def write_eof(self, chunk: bytes = b"") -> None: if self._eof: return if chunk and self._on_chunk_sent is not None: await self._on_chunk_sent(chunk) if self._compress: if chunk: chunk = await self._compress.compress(chunk) chunk += self._compress.flush() if chunk and self.chunked: chunk_len = ("%x\r\n" % len(chunk)).encode("ascii") chunk = chunk_len + chunk + b"\r\n0\r\n\r\n" else: if self.chunked: if chunk: chunk_len = ("%x\r\n" % len(chunk)).encode("ascii") chunk = chunk_len + chunk + b"\r\n0\r\n\r\n" else: chunk = b"0\r\n\r\n" if chunk: self._write(chunk) await self.drain() self._eof = True async def drain(self) -> None: """Flush the write buffer. The intended use is to write await w.write(data) await w.drain() """ if self._protocol.transport is not None: await self._protocol._drain_helper() def _safe_header(string: str) -> str: if "\r" in string or "\n" in string: raise ValueError( "Newline or carriage return detected in headers. " "Potential header injection attack." ) return string def _py_serialize_headers(status_line: str, headers: "CIMultiDict[str]") -> bytes: headers_gen = (_safe_header(k) + ": " + _safe_header(v) for k, v in headers.items()) line = status_line + "\r\n" + "\r\n".join(headers_gen) + "\r\n\r\n" return line.encode("utf-8") _serialize_headers = _py_serialize_headers try: import aiohttp._http_writer as _http_writer # type: ignore[import-not-found] _c_serialize_headers = _http_writer._serialize_headers if not NO_EXTENSIONS: _serialize_headers = _c_serialize_headers except ImportError: pass
Save
cmd:
run