SILENT KILLERPanel

Current Path: > > opt > cloudlinux > venv > lib > python3.11 > site-packages > aiohttp


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: //opt/cloudlinux/venv/lib/python3.11/site-packages/aiohttp

NameTypeSizeLast ModifiedActions
.hash Directory - -
__pycache__ Directory - -
__init__.py File 7762 bytes April 17 2025 13:10:59.
_cparser.pxd File 4318 bytes April 17 2025 13:10:59.
_find_header.pxd File 68 bytes April 17 2025 13:10:59.
_headers.pxi File 2007 bytes April 17 2025 13:10:59.
_helpers.cpython-311-x86_64-linux-gnu.so File 88072 bytes April 17 2025 13:11:30.
_helpers.pyi File 202 bytes April 17 2025 13:10:59.
_helpers.pyx File 1049 bytes April 17 2025 13:10:59.
_http_parser.cpython-311-x86_64-linux-gnu.so File 583264 bytes April 17 2025 13:11:30.
_http_parser.pyx File 28058 bytes April 17 2025 13:10:59.
_http_writer.cpython-311-x86_64-linux-gnu.so File 76808 bytes April 17 2025 13:11:30.
_http_writer.pyx File 4575 bytes April 17 2025 13:10:59.
_websocket.cpython-311-x86_64-linux-gnu.so File 54648 bytes April 17 2025 13:11:30.
_websocket.pyx File 1561 bytes April 17 2025 13:10:59.
abc.py File 5500 bytes April 17 2025 13:10:59.
base_protocol.py File 2741 bytes April 17 2025 13:10:59.
client.py File 47276 bytes April 17 2025 13:10:59.
client_exceptions.py File 9411 bytes April 17 2025 13:10:59.
client_proto.py File 8651 bytes April 17 2025 13:10:59.
client_reqrep.py File 39680 bytes April 17 2025 13:10:59.
client_ws.py File 11010 bytes April 17 2025 13:10:59.
compression_utils.py File 5015 bytes April 17 2025 13:10:59.
connector.py File 52798 bytes April 17 2025 13:10:59.
cookiejar.py File 14015 bytes April 17 2025 13:10:59.
formdata.py File 6106 bytes April 17 2025 13:10:59.
hdrs.py File 4613 bytes April 17 2025 13:10:59.
helpers.py File 30255 bytes April 17 2025 13:10:59.
http.py File 1842 bytes April 17 2025 13:10:59.
http_exceptions.py File 2716 bytes April 17 2025 13:10:59.
http_parser.py File 35496 bytes April 17 2025 13:10:59.
http_websocket.py File 26716 bytes April 17 2025 13:10:59.
http_writer.py File 5933 bytes April 17 2025 13:10:59.
locks.py File 1136 bytes April 17 2025 13:10:59.
log.py File 325 bytes April 17 2025 13:10:59.
multipart.py File 32472 bytes April 17 2025 13:10:59.
payload.py File 13542 bytes April 17 2025 13:10:59.
payload_streamer.py File 2087 bytes April 17 2025 13:10:59.
py.typed File 7 bytes April 17 2025 13:10:59.
pytest_plugin.py File 11605 bytes April 17 2025 13:10:59.
resolver.py File 5070 bytes April 17 2025 13:10:59.
streams.py File 20836 bytes April 17 2025 13:10:59.
tcp_helpers.py File 961 bytes April 17 2025 13:10:59.
test_utils.py File 20185 bytes April 17 2025 13:10:59.
tracing.py File 15132 bytes April 17 2025 13:10:59.
typedefs.py File 1471 bytes April 17 2025 13:10:59.
web.py File 19263 bytes April 17 2025 13:10:59.
web_app.py File 18311 bytes April 17 2025 13:10:59.
web_exceptions.py File 10360 bytes April 17 2025 13:10:59.
web_fileresponse.py File 11416 bytes April 17 2025 13:10:59.
web_log.py File 7801 bytes April 17 2025 13:10:59.
web_middlewares.py File 4032 bytes April 17 2025 13:10:59.
web_protocol.py File 23044 bytes April 17 2025 13:10:59.
web_request.py File 28756 bytes April 17 2025 13:10:59.
web_response.py File 27729 bytes April 17 2025 13:10:59.
web_routedef.py File 6132 bytes April 17 2025 13:10:59.
web_runner.py File 11736 bytes April 17 2025 13:10:59.
web_server.py File 2587 bytes April 17 2025 13:10:59.
web_urldispatcher.py File 40057 bytes April 17 2025 13:10:59.
web_ws.py File 18647 bytes April 17 2025 13:10:59.
worker.py File 7965 bytes April 17 2025 13:10:59.

Reading File: //opt/cloudlinux/venv/lib/python3.11/site-packages/aiohttp/compression_utils.py

import asyncio
import zlib
from concurrent.futures import Executor
from typing import Optional, cast

try:
    try:
        import brotlicffi as brotli
    except ImportError:
        import brotli

    HAS_BROTLI = True
except ImportError:  # pragma: no cover
    HAS_BROTLI = False

MAX_SYNC_CHUNK_SIZE = 1024


def encoding_to_mode(
    encoding: Optional[str] = None,
    suppress_deflate_header: bool = False,
) -> int:
    if encoding == "gzip":
        return 16 + zlib.MAX_WBITS

    return -zlib.MAX_WBITS if suppress_deflate_header else zlib.MAX_WBITS


class ZlibBaseHandler:
    def __init__(
        self,
        mode: int,
        executor: Optional[Executor] = None,
        max_sync_chunk_size: Optional[int] = MAX_SYNC_CHUNK_SIZE,
    ):
        self._mode = mode
        self._executor = executor
        self._max_sync_chunk_size = max_sync_chunk_size


class ZLibCompressor(ZlibBaseHandler):
    def __init__(
        self,
        encoding: Optional[str] = None,
        suppress_deflate_header: bool = False,
        level: Optional[int] = None,
        wbits: Optional[int] = None,
        strategy: int = zlib.Z_DEFAULT_STRATEGY,
        executor: Optional[Executor] = None,
        max_sync_chunk_size: Optional[int] = MAX_SYNC_CHUNK_SIZE,
    ):
        super().__init__(
            mode=encoding_to_mode(encoding, suppress_deflate_header)
            if wbits is None
            else wbits,
            executor=executor,
            max_sync_chunk_size=max_sync_chunk_size,
        )
        if level is None:
            self._compressor = zlib.compressobj(wbits=self._mode, strategy=strategy)
        else:
            self._compressor = zlib.compressobj(
                wbits=self._mode, strategy=strategy, level=level
            )
        self._compress_lock = asyncio.Lock()

    def compress_sync(self, data: bytes) -> bytes:
        return self._compressor.compress(data)

    async def compress(self, data: bytes) -> bytes:
        async with self._compress_lock:
            # To ensure the stream is consistent in the event
            # there are multiple writers, we need to lock
            # the compressor so that only one writer can
            # compress at a time.
            if (
                self._max_sync_chunk_size is not None
                and len(data) > self._max_sync_chunk_size
            ):
                return await asyncio.get_event_loop().run_in_executor(
                    self._executor, self.compress_sync, data
                )
            return self.compress_sync(data)

    def flush(self, mode: int = zlib.Z_FINISH) -> bytes:
        return self._compressor.flush(mode)


class ZLibDecompressor(ZlibBaseHandler):
    def __init__(
        self,
        encoding: Optional[str] = None,
        suppress_deflate_header: bool = False,
        executor: Optional[Executor] = None,
        max_sync_chunk_size: Optional[int] = MAX_SYNC_CHUNK_SIZE,
    ):
        super().__init__(
            mode=encoding_to_mode(encoding, suppress_deflate_header),
            executor=executor,
            max_sync_chunk_size=max_sync_chunk_size,
        )
        self._decompressor = zlib.decompressobj(wbits=self._mode)

    def decompress_sync(self, data: bytes, max_length: int = 0) -> bytes:
        return self._decompressor.decompress(data, max_length)

    async def decompress(self, data: bytes, max_length: int = 0) -> bytes:
        if (
            self._max_sync_chunk_size is not None
            and len(data) > self._max_sync_chunk_size
        ):
            return await asyncio.get_event_loop().run_in_executor(
                self._executor, self.decompress_sync, data, max_length
            )
        return self.decompress_sync(data, max_length)

    def flush(self, length: int = 0) -> bytes:
        return (
            self._decompressor.flush(length)
            if length > 0
            else self._decompressor.flush()
        )

    @property
    def eof(self) -> bool:
        return self._decompressor.eof

    @property
    def unconsumed_tail(self) -> bytes:
        return self._decompressor.unconsumed_tail

    @property
    def unused_data(self) -> bytes:
        return self._decompressor.unused_data


class BrotliDecompressor:
    # Supports both 'brotlipy' and 'Brotli' packages
    # since they share an import name. The top branches
    # are for 'brotlipy' and bottom branches for 'Brotli'
    def __init__(self) -> None:
        if not HAS_BROTLI:
            raise RuntimeError(
                "The brotli decompression is not available. "
                "Please install `Brotli` module"
            )
        self._obj = brotli.Decompressor()

    def decompress_sync(self, data: bytes) -> bytes:
        if hasattr(self._obj, "decompress"):
            return cast(bytes, self._obj.decompress(data))
        return cast(bytes, self._obj.process(data))

    def flush(self) -> bytes:
        if hasattr(self._obj, "flush"):
            return cast(bytes, self._obj.flush())
        return b""

SILENT KILLER Tool