GRAYBYTE WORDPRESS FILE MANAGER6601

Server IP : 198.54.121.189 / Your IP : 216.73.216.224
System : Linux premium69.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
PHP Version : 7.4.33
Disable Function : NONE
cURL : ON | WGET : ON | Sudo : OFF | Pkexec : OFF
Directory : /opt/cloudlinux/venv/lib/python3.11/site-packages/aiohttp/
Upload Files :
Current_dir [ Not Writeable ] Document_root [ Writeable ]

Command :


Current File : /opt/cloudlinux/venv/lib/python3.11/site-packages/aiohttp//client_ws.py
"""WebSocket client for asyncio."""

import asyncio
import sys
from typing import Any, Optional, cast

from .client_exceptions import ClientError
from .client_reqrep import ClientResponse
from .helpers import call_later, set_result
from .http import (
    WS_CLOSED_MESSAGE,
    WS_CLOSING_MESSAGE,
    WebSocketError,
    WSCloseCode,
    WSMessage,
    WSMsgType,
)
from .http_websocket import WebSocketWriter  # WSMessage
from .streams import EofStream, FlowControlDataQueue
from .typedefs import (
    DEFAULT_JSON_DECODER,
    DEFAULT_JSON_ENCODER,
    JSONDecoder,
    JSONEncoder,
)

if sys.version_info >= (3, 11):
    import asyncio as async_timeout
else:
    import async_timeout


class ClientWebSocketResponse:
    def __init__(
        self,
        reader: "FlowControlDataQueue[WSMessage]",
        writer: WebSocketWriter,
        protocol: Optional[str],
        response: ClientResponse,
        timeout: float,
        autoclose: bool,
        autoping: bool,
        loop: asyncio.AbstractEventLoop,
        *,
        receive_timeout: Optional[float] = None,
        heartbeat: Optional[float] = None,
        compress: int = 0,
        client_notakeover: bool = False,
    ) -> None:
        self._response = response
        self._conn = response.connection

        self._writer = writer
        self._reader = reader
        self._protocol = protocol
        self._closed = False
        self._closing = False
        self._close_code: Optional[int] = None
        self._timeout = timeout
        self._receive_timeout = receive_timeout
        self._autoclose = autoclose
        self._autoping = autoping
        self._heartbeat = heartbeat
        self._heartbeat_cb: Optional[asyncio.TimerHandle] = None
        if heartbeat is not None:
            self._pong_heartbeat = heartbeat / 2.0
        self._pong_response_cb: Optional[asyncio.TimerHandle] = None
        self._loop = loop
        self._waiting: Optional[asyncio.Future[bool]] = None
        self._exception: Optional[BaseException] = None
        self._compress = compress
        self._client_notakeover = client_notakeover

        self._reset_heartbeat()

    def _cancel_heartbeat(self) -> None:
        if self._pong_response_cb is not None:
            self._pong_response_cb.cancel()
            self._pong_response_cb = None

        if self._heartbeat_cb is not None:
            self._heartbeat_cb.cancel()
            self._heartbeat_cb = None

    def _reset_heartbeat(self) -> None:
        self._cancel_heartbeat()

        if self._heartbeat is not None:
            self._heartbeat_cb = call_later(
                self._send_heartbeat,
                self._heartbeat,
                self._loop,
                timeout_ceil_threshold=self._conn._connector._timeout_ceil_threshold
                if self._conn is not None
                else 5,
            )

    def _send_heartbeat(self) -> None:
        if self._heartbeat is not None and not self._closed:
            # fire-and-forget a task is not perfect but maybe ok for
            # sending ping. Otherwise we need a long-living heartbeat
            # task in the class.
            self._loop.create_task(self._writer.ping())

            if self._pong_response_cb is not None:
                self._pong_response_cb.cancel()
            self._pong_response_cb = call_later(
                self._pong_not_received,
                self._pong_heartbeat,
                self._loop,
                timeout_ceil_threshold=self._conn._connector._timeout_ceil_threshold
                if self._conn is not None
                else 5,
            )

    def _pong_not_received(self) -> None:
        if not self._closed:
            self._closed = True
            self._close_code = WSCloseCode.ABNORMAL_CLOSURE
            self._exception = asyncio.TimeoutError()
            self._response.close()

    @property
    def closed(self) -> bool:
        return self._closed

    @property
    def close_code(self) -> Optional[int]:
        return self._close_code

    @property
    def protocol(self) -> Optional[str]:
        return self._protocol

    @property
    def compress(self) -> int:
        return self._compress

    @property
    def client_notakeover(self) -> bool:
        return self._client_notakeover

    def get_extra_info(self, name: str, default: Any = None) -> Any:
        """extra info from connection transport"""
        conn = self._response.connection
        if conn is None:
            return default
        transport = conn.transport
        if transport is None:
            return default
        return transport.get_extra_info(name, default)

    def exception(self) -> Optional[BaseException]:
        return self._exception

    async def ping(self, message: bytes = b"") -> None:
        await self._writer.ping(message)

    async def pong(self, message: bytes = b"") -> None:
        await self._writer.pong(message)

    async def send_str(self, data: str, compress: Optional[int] = None) -> None:
        if not isinstance(data, str):
            raise TypeError("data argument must be str (%r)" % type(data))
        await self._writer.send(data, binary=False, compress=compress)

    async def send_bytes(self, data: bytes, compress: Optional[int] = None) -> None:
        if not isinstance(data, (bytes, bytearray, memoryview)):
            raise TypeError("data argument must be byte-ish (%r)" % type(data))
        await self._writer.send(data, binary=True, compress=compress)

    async def send_json(
        self,
        data: Any,
        compress: Optional[int] = None,
        *,
        dumps: JSONEncoder = DEFAULT_JSON_ENCODER,
    ) -> None:
        await self.send_str(dumps(data), compress=compress)

    async def close(self, *, code: int = WSCloseCode.OK, message: bytes = b"") -> bool:
        # we need to break `receive()` cycle first,
        # `close()` may be called from different task
        if self._waiting is not None and not self._closing:
            self._closing = True
            self._reader.feed_data(WS_CLOSING_MESSAGE, 0)
            await self._waiting

        if not self._closed:
            self._cancel_heartbeat()
            self._closed = True
            try:
                await self._writer.close(code, message)
            except asyncio.CancelledError:
                self._close_code = WSCloseCode.ABNORMAL_CLOSURE
                self._response.close()
                raise
            except Exception as exc:
                self._close_code = WSCloseCode.ABNORMAL_CLOSURE
                self._exception = exc
                self._response.close()
                return True

            if self._close_code:
                self._response.close()
                return True

            while True:
                try:
                    async with async_timeout.timeout(self._timeout):
                        msg = await self._reader.read()
                except asyncio.CancelledError:
                    self._close_code = WSCloseCode.ABNORMAL_CLOSURE
                    self._response.close()
                    raise
                except Exception as exc:
                    self._close_code = WSCloseCode.ABNORMAL_CLOSURE
                    self._exception = exc
                    self._response.close()
                    return True

                if msg.type == WSMsgType.CLOSE:
                    self._close_code = msg.data
                    self._response.close()
                    return True
        else:
            return False

    async def receive(self, timeout: Optional[float] = None) -> WSMessage:
        while True:
            if self._waiting is not None:
                raise RuntimeError("Concurrent call to receive() is not allowed")

            if self._closed:
                return WS_CLOSED_MESSAGE
            elif self._closing:
                await self.close()
                return WS_CLOSED_MESSAGE

            try:
                self._waiting = self._loop.create_future()
                try:
                    async with async_timeout.timeout(timeout or self._receive_timeout):
                        msg = await self._reader.read()
                    self._reset_heartbeat()
                finally:
                    waiter = self._waiting
                    self._waiting = None
                    set_result(waiter, True)
            except (asyncio.CancelledError, asyncio.TimeoutError):
                self._close_code = WSCloseCode.ABNORMAL_CLOSURE
                raise
            except EofStream:
                self._close_code = WSCloseCode.OK
                await self.close()
                return WSMessage(WSMsgType.CLOSED, None, None)
            except ClientError:
                self._closed = True
                self._close_code = WSCloseCode.ABNORMAL_CLOSURE
                return WS_CLOSED_MESSAGE
            except WebSocketError as exc:
                self._close_code = exc.code
                await self.close(code=exc.code)
                return WSMessage(WSMsgType.ERROR, exc, None)
            except Exception as exc:
                self._exception = exc
                self._closing = True
                self._close_code = WSCloseCode.ABNORMAL_CLOSURE
                await self.close()
                return WSMessage(WSMsgType.ERROR, exc, None)

            if msg.type == WSMsgType.CLOSE:
                self._closing = True
                self._close_code = msg.data
                if not self._closed and self._autoclose:
                    await self.close()
            elif msg.type == WSMsgType.CLOSING:
                self._closing = True
            elif msg.type == WSMsgType.PING and self._autoping:
                await self.pong(msg.data)
                continue
            elif msg.type == WSMsgType.PONG and self._autoping:
                continue

            return msg

    async def receive_str(self, *, timeout: Optional[float] = None) -> str:
        msg = await self.receive(timeout)
        if msg.type != WSMsgType.TEXT:
            raise TypeError(f"Received message {msg.type}:{msg.data!r} is not str")
        return cast(str, msg.data)

    async def receive_bytes(self, *, timeout: Optional[float] = None) -> bytes:
        msg = await self.receive(timeout)
        if msg.type != WSMsgType.BINARY:
            raise TypeError(f"Received message {msg.type}:{msg.data!r} is not bytes")
        return cast(bytes, msg.data)

    async def receive_json(
        self,
        *,
        loads: JSONDecoder = DEFAULT_JSON_DECODER,
        timeout: Optional[float] = None,
    ) -> Any:
        data = await self.receive_str(timeout=timeout)
        return loads(data)

    def __aiter__(self) -> "ClientWebSocketResponse":
        return self

    async def __anext__(self) -> WSMessage:
        msg = await self.receive()
        if msg.type in (WSMsgType.CLOSE, WSMsgType.CLOSING, WSMsgType.CLOSED):
            raise StopAsyncIteration
        return msg

[ Back ]
Name
Size
Last Modified
Owner / Group
Permissions
Options
..
--
June 25 2025 08:31:36
root / root
0755
.hash
--
May 15 2025 08:30:33
root / root
0755
__pycache__
--
May 15 2025 08:31:38
root / root
0755
__init__.py
7.58 KB
April 17 2025 13:10:59
root / root
0644
_cparser.pxd
4.217 KB
April 17 2025 13:10:59
root / root
0644
_find_header.pxd
0.066 KB
April 17 2025 13:10:59
root / root
0644
_headers.pxi
1.96 KB
April 17 2025 13:10:59
root / root
0644
_helpers.cpython-311-x86_64-linux-gnu.so
86.008 KB
April 17 2025 13:11:30
root / root
0755
_helpers.pyi
0.197 KB
April 17 2025 13:10:59
root / root
0644
_helpers.pyx
1.024 KB
April 17 2025 13:10:59
root / root
0644
_http_parser.cpython-311-x86_64-linux-gnu.so
569.594 KB
April 17 2025 13:11:30
root / root
0755
_http_parser.pyx
27.4 KB
April 17 2025 13:10:59
root / root
0644
_http_writer.cpython-311-x86_64-linux-gnu.so
75.008 KB
April 17 2025 13:11:30
root / root
0755
_http_writer.pyx
4.468 KB
April 17 2025 13:10:59
root / root
0644
_websocket.cpython-311-x86_64-linux-gnu.so
53.367 KB
April 17 2025 13:11:30
root / root
0755
_websocket.pyx
1.524 KB
April 17 2025 13:10:59
root / root
0644
abc.py
5.371 KB
April 17 2025 13:10:59
root / root
0644
base_protocol.py
2.677 KB
April 17 2025 13:10:59
root / root
0644
client.py
46.168 KB
April 17 2025 13:10:59
root / root
0644
client_exceptions.py
9.19 KB
April 17 2025 13:10:59
root / root
0644
client_proto.py
8.448 KB
April 17 2025 13:10:59
root / root
0644
client_reqrep.py
38.75 KB
April 17 2025 13:10:59
root / root
0644
client_ws.py
10.752 KB
April 17 2025 13:10:59
root / root
0644
compression_utils.py
4.897 KB
April 17 2025 13:10:59
root / root
0644
connector.py
51.561 KB
April 17 2025 13:10:59
root / root
0644
cookiejar.py
13.687 KB
April 17 2025 13:10:59
root / root
0644
formdata.py
5.963 KB
April 17 2025 13:10:59
root / root
0644
hdrs.py
4.505 KB
April 17 2025 13:10:59
root / root
0644
helpers.py
29.546 KB
April 17 2025 13:10:59
root / root
0644
http.py
1.799 KB
April 17 2025 13:10:59
root / root
0644
http_exceptions.py
2.652 KB
April 17 2025 13:10:59
root / root
0644
http_parser.py
34.664 KB
April 17 2025 13:10:59
root / root
0644
http_websocket.py
26.09 KB
April 17 2025 13:10:59
root / root
0644
http_writer.py
5.794 KB
April 17 2025 13:10:59
root / root
0644
locks.py
1.109 KB
April 17 2025 13:10:59
root / root
0644
log.py
0.317 KB
April 17 2025 13:10:59
root / root
0644
multipart.py
31.711 KB
April 17 2025 13:10:59
root / root
0644
payload.py
13.225 KB
April 17 2025 13:10:59
root / root
0644
payload_streamer.py
2.038 KB
April 17 2025 13:10:59
root / root
0644
py.typed
0.007 KB
April 17 2025 13:10:59
root / root
0644
pytest_plugin.py
11.333 KB
April 17 2025 13:10:59
root / root
0644
resolver.py
4.951 KB
April 17 2025 13:10:59
root / root
0644
streams.py
20.348 KB
April 17 2025 13:10:59
root / root
0644
tcp_helpers.py
0.938 KB
April 17 2025 13:10:59
root / root
0644
test_utils.py
19.712 KB
April 17 2025 13:10:59
root / root
0644
tracing.py
14.777 KB
April 17 2025 13:10:59
root / root
0644
typedefs.py
1.437 KB
April 17 2025 13:10:59
root / root
0644
web.py
18.812 KB
April 17 2025 13:10:59
root / root
0644
web_app.py
17.882 KB
April 17 2025 13:10:59
root / root
0644
web_exceptions.py
10.117 KB
April 17 2025 13:10:59
root / root
0644
web_fileresponse.py
11.148 KB
April 17 2025 13:10:59
root / root
0644
web_log.py
7.618 KB
April 17 2025 13:10:59
root / root
0644
web_middlewares.py
3.938 KB
April 17 2025 13:10:59
root / root
0644
web_protocol.py
22.504 KB
April 17 2025 13:10:59
root / root
0644
web_request.py
28.082 KB
April 17 2025 13:10:59
root / root
0644
web_response.py
27.079 KB
April 17 2025 13:10:59
root / root
0644
web_routedef.py
5.988 KB
April 17 2025 13:10:59
root / root
0644
web_runner.py
11.461 KB
April 17 2025 13:10:59
root / root
0644
web_server.py
2.526 KB
April 17 2025 13:10:59
root / root
0644
web_urldispatcher.py
39.118 KB
April 17 2025 13:10:59
root / root
0644
web_ws.py
18.21 KB
April 17 2025 13:10:59
root / root
0644
worker.py
7.778 KB
April 17 2025 13:10:59
root / root
0644

GRAYBYTE WORDPRESS FILE MANAGER @ 2025
CONTACT ME
Static GIF