golden hour
/opt/alt/python37/lib64/python3.7/site-packages/aiohttp
⬆️ Go Up
Upload
File/Folder
Size
Actions
.hash
-
Del
OK
__init__.py
6.71 KB
Del
OK
__pycache__
-
Del
OK
_cparser.pxd
4.88 KB
Del
OK
_find_header.c
183.17 KB
Del
OK
_find_header.h
170 B
Del
OK
_find_header.pxd
68 B
Del
OK
_headers.pxi
1.96 KB
Del
OK
_helpers.c
207.99 KB
Del
OK
_helpers.cpython-37m-x86_64-linux-gnu.so
207.44 KB
Del
OK
_helpers.pyi
202 B
Del
OK
_helpers.pyx
1.02 KB
Del
OK
_http_parser.c
955.26 KB
Del
OK
_http_parser.cpython-37m-x86_64-linux-gnu.so
1.56 MB
Del
OK
_http_parser.pyx
25.95 KB
Del
OK
_http_writer.c
216.08 KB
Del
OK
_http_writer.cpython-37m-x86_64-linux-gnu.so
196.02 KB
Del
OK
_http_writer.pyx
4.47 KB
Del
OK
_websocket.c
135.18 KB
Del
OK
_websocket.cpython-37m-x86_64-linux-gnu.so
95.97 KB
Del
OK
_websocket.pyx
1.52 KB
Del
OK
abc.py
5.38 KB
Del
OK
base_protocol.py
2.64 KB
Del
OK
client.py
43.87 KB
Del
OK
client_exceptions.py
9.06 KB
Del
OK
client_proto.py
8 KB
Del
OK
client_reqrep.py
36.02 KB
Del
OK
client_ws.py
10.29 KB
Del
OK
connector.py
49.66 KB
Del
OK
cookiejar.py
13.25 KB
Del
OK
formdata.py
5.98 KB
Del
OK
hdrs.py
4.61 KB
Del
OK
helpers.py
25.63 KB
Del
OK
http.py
1.78 KB
Del
OK
http_exceptions.py
2.53 KB
Del
OK
http_parser.py
31.83 KB
Del
OK
http_websocket.py
24.76 KB
Del
OK
http_writer.py
5.84 KB
Del
OK
locks.py
1.13 KB
Del
OK
log.py
325 B
Del
OK
multipart.py
31.68 KB
Del
OK
payload.py
13.38 KB
Del
OK
payload_streamer.py
2.06 KB
Del
OK
py.typed
7 B
Del
OK
pytest_plugin.py
11.5 KB
Del
OK
resolver.py
4.97 KB
Del
OK
streams.py
20.35 KB
Del
OK
tcp_helpers.py
962 B
Del
OK
test_utils.py
20.72 KB
Del
OK
tracing.py
14.95 KB
Del
OK
typedefs.py
1.72 KB
Del
OK
web.py
17.51 KB
Del
OK
web_app.py
16.86 KB
Del
OK
web_exceptions.py
9.87 KB
Del
OK
web_fileresponse.py
10.53 KB
Del
OK
web_log.py
7.39 KB
Del
OK
web_middlewares.py
4.04 KB
Del
OK
web_protocol.py
22.02 KB
Del
OK
web_request.py
27.23 KB
Del
OK
web_response.py
26.92 KB
Del
OK
web_routedef.py
5.9 KB
Del
OK
web_runner.py
10.93 KB
Del
OK
web_server.py
2.01 KB
Del
OK
web_urldispatcher.py
38.62 KB
Del
OK
web_ws.py
16.85 KB
Del
OK
worker.py
8.57 KB
Del
OK
Edit: http_writer.py
"""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 .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._transport = protocol.transport self.loop = loop self.length = None self.chunked = False self.buffer_size = 0 self.output_size = 0 self._eof = False self._compress = None # type: Any self._drain_waiter = None self._on_chunk_sent = on_chunk_sent # type: _T_OnChunkSent self._on_headers_sent = on_headers_sent # type: _T_OnHeadersSent @property def transport(self) -> Optional[asyncio.Transport]: return self._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: zlib_mode = 16 + zlib.MAX_WBITS if encoding == "gzip" else zlib.MAX_WBITS self._compress = zlib.compressobj(wbits=zlib_mode, strategy=strategy) def _write(self, chunk: bytes) -> None: size = len(chunk) self.buffer_size += size self.output_size += size if self._transport is None or self._transport.is_closing(): raise ConnectionResetError("Cannot write to closing transport") self._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 = 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 = self._compress.compress(chunk) 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 self._transport = None 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] _c_serialize_headers = _http_writer._serialize_headers if not NO_EXTENSIONS: _serialize_headers = _c_serialize_headers except ImportError: pass
Save