$75 GRAYBYTE WORDPRESS FILE MANAGER $64

SERVER : in-mum-web1330.main-hosting.eu #1 SMP Mon Feb 10 22:45:17 UTC 2025
SERVER IP : 147.79.69.233 | ADMIN IP 216.73.216.143
OPTIONS : CRL = ON | WGT = ON | SDO = OFF | PKEX = OFF
DEACTIVATED : NONE

/opt/alt/python37/lib64/python3.7/site-packages/aiohttp/

HOME
Current File : /opt/alt/python37/lib64/python3.7/site-packages/aiohttp//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

Current_dir [ NOT WRITEABLE ] Document_root [ WRITEABLE ]


[ Back ]
NAME
SIZE
LAST TOUCH
USER
CAN-I?
FUNCTIONS
..
--
28 Feb 2025 12.45 AM
root / 996
0755
.hash
--
25 Jan 2024 4.26 PM
root / 996
0755
__pycache__
--
25 Jan 2024 4.26 PM
root / 996
0755
__init__.py
6.709 KB
14 Nov 2021 8.05 PM
root / 996
0644
_cparser.pxd
4.881 KB
14 Nov 2021 8.05 PM
root / 996
0644
_find_header.c
183.174 KB
14 Nov 2021 8.05 PM
root / 996
0644
_find_header.h
0.166 KB
14 Nov 2021 8.05 PM
root / 996
0644
_find_header.pxd
0.066 KB
14 Nov 2021 8.05 PM
root / 996
0644
_headers.pxi
1.96 KB
14 Nov 2021 8.05 PM
root / 996
0644
_helpers.c
207.99 KB
14 Nov 2021 8.05 PM
root / 996
0644
_helpers.cpython-37m-x86_64-linux-gnu.so
66.117 KB
14 Nov 2023 11.36 AM
root / 996
0755
_helpers.pyi
0.197 KB
14 Nov 2021 8.05 PM
root / 996
0644
_helpers.pyx
1.024 KB
14 Nov 2021 8.05 PM
root / 996
0644
_http_parser.c
955.261 KB
14 Nov 2021 8.05 PM
root / 996
0644
_http_parser.cpython-37m-x86_64-linux-gnu.so
523.539 KB
14 Nov 2023 11.36 AM
root / 996
0755
_http_parser.pyx
25.948 KB
14 Nov 2021 8.05 PM
root / 996
0644
_http_writer.c
216.084 KB
14 Nov 2021 8.05 PM
root / 996
0644
_http_writer.cpython-37m-x86_64-linux-gnu.so
61.203 KB
14 Nov 2023 11.36 AM
root / 996
0755
_http_writer.pyx
4.468 KB
14 Nov 2021 8.05 PM
root / 996
0644
_websocket.c
135.176 KB
14 Nov 2021 8.05 PM
root / 996
0644
_websocket.cpython-37m-x86_64-linux-gnu.so
37.367 KB
14 Nov 2023 11.36 AM
root / 996
0755
_websocket.pyx
1.524 KB
14 Nov 2021 8.05 PM
root / 996
0644
abc.py
5.384 KB
14 Nov 2021 8.05 PM
root / 996
0644
base_protocol.py
2.637 KB
14 Nov 2021 8.05 PM
root / 996
0644
client.py
43.873 KB
14 Nov 2021 8.05 PM
root / 996
0644
client_exceptions.py
9.06 KB
14 Nov 2021 8.05 PM
root / 996
0644
client_proto.py
8.004 KB
14 Nov 2021 8.05 PM
root / 996
0644
client_reqrep.py
36.021 KB
14 Nov 2021 8.05 PM
root / 996
0644
client_ws.py
10.293 KB
14 Nov 2021 8.05 PM
root / 996
0644
connector.py
49.662 KB
14 Nov 2021 8.05 PM
root / 996
0644
cookiejar.py
13.252 KB
14 Nov 2021 8.05 PM
root / 996
0644
formdata.py
5.979 KB
14 Nov 2021 8.05 PM
root / 996
0644
hdrs.py
4.613 KB
14 Nov 2021 8.05 PM
root / 996
0644
helpers.py
25.628 KB
14 Nov 2021 8.05 PM
root / 996
0644
http.py
1.781 KB
14 Nov 2021 8.05 PM
root / 996
0644
http_exceptions.py
2.525 KB
14 Nov 2021 8.05 PM
root / 996
0644
http_parser.py
31.826 KB
14 Nov 2021 8.05 PM
root / 996
0644
http_websocket.py
24.765 KB
14 Nov 2021 8.05 PM
root / 996
0644
http_writer.py
5.836 KB
14 Nov 2021 8.05 PM
root / 996
0644
locks.py
1.125 KB
14 Nov 2021 8.05 PM
root / 996
0644
log.py
0.317 KB
14 Nov 2021 8.05 PM
root / 996
0644
multipart.py
31.677 KB
14 Nov 2021 8.05 PM
root / 996
0644
payload.py
13.379 KB
14 Nov 2021 8.05 PM
root / 996
0644
payload_streamer.py
2.063 KB
14 Nov 2021 8.05 PM
root / 996
0644
py.typed
0.007 KB
14 Nov 2021 8.05 PM
root / 996
0644
pytest_plugin.py
11.496 KB
14 Nov 2021 8.05 PM
root / 996
0644
resolver.py
4.973 KB
14 Nov 2021 8.05 PM
root / 996
0644
streams.py
20.352 KB
14 Nov 2021 8.05 PM
root / 996
0644
tcp_helpers.py
0.939 KB
14 Nov 2021 8.05 PM
root / 996
0644
test_utils.py
20.722 KB
14 Nov 2021 8.05 PM
root / 996
0644
tracing.py
14.946 KB
14 Nov 2021 8.05 PM
root / 996
0644
typedefs.py
1.725 KB
14 Nov 2021 8.05 PM
root / 996
0644
web.py
17.509 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_app.py
16.863 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_exceptions.py
9.869 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_fileresponse.py
10.531 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_log.py
7.388 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_middlewares.py
4.04 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_protocol.py
22.02 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_request.py
27.234 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_response.py
26.921 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_routedef.py
5.898 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_runner.py
10.927 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_server.py
2.01 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_urldispatcher.py
38.62 KB
14 Nov 2021 8.05 PM
root / 996
0644
web_ws.py
16.854 KB
14 Nov 2021 8.05 PM
root / 996
0644
worker.py
8.573 KB
14 Nov 2021 8.05 PM
root / 996
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2026 CONTACT ME
Static GIF