Current Path: > > opt > cloudlinux > venv > lib64 > 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 ]
Name | Type | Size | Last Modified | Actions |
---|---|---|---|---|
.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. |
import asyncio from contextlib import suppress from typing import Any, Optional, Tuple from .base_protocol import BaseProtocol from .client_exceptions import ( ClientOSError, ClientPayloadError, ServerDisconnectedError, ServerTimeoutError, ) from .helpers import BaseTimerContext, status_code_must_be_empty_body from .http import HttpResponseParser, RawResponseMessage from .streams import EMPTY_PAYLOAD, DataQueue, StreamReader class ResponseHandler(BaseProtocol, DataQueue[Tuple[RawResponseMessage, StreamReader]]): """Helper class to adapt between Protocol and StreamReader.""" def __init__(self, loop: asyncio.AbstractEventLoop) -> None: BaseProtocol.__init__(self, loop=loop) DataQueue.__init__(self, loop) self._should_close = False self._payload: Optional[StreamReader] = None self._skip_payload = False self._payload_parser = None self._timer = None self._tail = b"" self._upgraded = False self._parser: Optional[HttpResponseParser] = None self._read_timeout: Optional[float] = None self._read_timeout_handle: Optional[asyncio.TimerHandle] = None self._timeout_ceil_threshold: Optional[float] = 5 @property def upgraded(self) -> bool: return self._upgraded @property def should_close(self) -> bool: if self._payload is not None and not self._payload.is_eof() or self._upgraded: return True return ( self._should_close or self._upgraded or self.exception() is not None or self._payload_parser is not None or len(self) > 0 or bool(self._tail) ) def force_close(self) -> None: self._should_close = True def close(self) -> None: transport = self.transport if transport is not None: transport.close() self.transport = None self._payload = None self._drop_timeout() def is_connected(self) -> bool: return self.transport is not None and not self.transport.is_closing() def connection_lost(self, exc: Optional[BaseException]) -> None: self._drop_timeout() if self._payload_parser is not None: with suppress(Exception): self._payload_parser.feed_eof() uncompleted = None if self._parser is not None: try: uncompleted = self._parser.feed_eof() except Exception as e: if self._payload is not None: exc = ClientPayloadError("Response payload is not completed") exc.__cause__ = e self._payload.set_exception(exc) if not self.is_eof(): if isinstance(exc, OSError): exc = ClientOSError(*exc.args) if exc is None: exc = ServerDisconnectedError(uncompleted) # assigns self._should_close to True as side effect, # we do it anyway below self.set_exception(exc) self._should_close = True self._parser = None self._payload = None self._payload_parser = None self._reading_paused = False super().connection_lost(exc) def eof_received(self) -> None: # should call parser.feed_eof() most likely self._drop_timeout() def pause_reading(self) -> None: super().pause_reading() self._drop_timeout() def resume_reading(self) -> None: super().resume_reading() self._reschedule_timeout() def set_exception(self, exc: BaseException) -> None: self._should_close = True self._drop_timeout() super().set_exception(exc) def set_parser(self, parser: Any, payload: Any) -> None: # TODO: actual types are: # parser: WebSocketReader # payload: FlowControlDataQueue # but they are not generi enough # Need an ABC for both types self._payload = payload self._payload_parser = parser self._drop_timeout() if self._tail: data, self._tail = self._tail, b"" self.data_received(data) def set_response_params( self, *, timer: Optional[BaseTimerContext] = None, skip_payload: bool = False, read_until_eof: bool = False, auto_decompress: bool = True, read_timeout: Optional[float] = None, read_bufsize: int = 2**16, timeout_ceil_threshold: float = 5, max_line_size: int = 8190, max_field_size: int = 8190, ) -> None: self._skip_payload = skip_payload self._read_timeout = read_timeout self._timeout_ceil_threshold = timeout_ceil_threshold self._parser = HttpResponseParser( self, self._loop, read_bufsize, timer=timer, payload_exception=ClientPayloadError, response_with_body=not skip_payload, read_until_eof=read_until_eof, auto_decompress=auto_decompress, max_line_size=max_line_size, max_field_size=max_field_size, ) if self._tail: data, self._tail = self._tail, b"" self.data_received(data) def _drop_timeout(self) -> None: if self._read_timeout_handle is not None: self._read_timeout_handle.cancel() self._read_timeout_handle = None def _reschedule_timeout(self) -> None: timeout = self._read_timeout if self._read_timeout_handle is not None: self._read_timeout_handle.cancel() if timeout: self._read_timeout_handle = self._loop.call_later( timeout, self._on_read_timeout ) else: self._read_timeout_handle = None def start_timeout(self) -> None: self._reschedule_timeout() def _on_read_timeout(self) -> None: exc = ServerTimeoutError("Timeout on reading data from socket") self.set_exception(exc) if self._payload is not None: self._payload.set_exception(exc) def data_received(self, data: bytes) -> None: self._reschedule_timeout() if not data: return # custom payload parser if self._payload_parser is not None: eof, tail = self._payload_parser.feed_data(data) if eof: self._payload = None self._payload_parser = None if tail: self.data_received(tail) return else: if self._upgraded or self._parser is None: # i.e. websocket connection, websocket parser is not set yet self._tail += data else: # parse http messages try: messages, upgraded, tail = self._parser.feed_data(data) except BaseException as exc: if self.transport is not None: # connection.release() could be called BEFORE # data_received(), the transport is already # closed in this case self.transport.close() # should_close is True after the call self.set_exception(exc) return self._upgraded = upgraded payload: Optional[StreamReader] = None for message, payload in messages: if message.should_close: self._should_close = True self._payload = payload if self._skip_payload or status_code_must_be_empty_body( message.code ): self.feed_data((message, EMPTY_PAYLOAD), 0) else: self.feed_data((message, payload), 0) if payload is not None: # new message(s) was processed # register timeout handler unsubscribing # either on end-of-stream or immediately for # EMPTY_PAYLOAD if payload is not EMPTY_PAYLOAD: payload.on_eof(self._drop_timeout) else: self._drop_timeout() if tail: if upgraded: self.data_received(tail) else: self._tail = tail
SILENT KILLER Tool