Voice et bot modif
This commit is contained in:
parent
189d56026b
commit
7333a22bcd
10774 changed files with 634644 additions and 933308 deletions
|
|
@ -10,20 +10,9 @@ import socket
|
|||
import sys
|
||||
import warnings
|
||||
from abc import ABC, abstractmethod
|
||||
from collections.abc import Callable, Iterator
|
||||
from types import TracebackType
|
||||
from typing import (
|
||||
TYPE_CHECKING,
|
||||
Any,
|
||||
Callable,
|
||||
Generic,
|
||||
Iterator,
|
||||
List,
|
||||
Optional,
|
||||
Type,
|
||||
TypeVar,
|
||||
cast,
|
||||
overload,
|
||||
)
|
||||
from typing import TYPE_CHECKING, Any, Generic, Literal, TypeVar, cast, overload
|
||||
from unittest import IsolatedAsyncioTestCase, mock
|
||||
|
||||
from aiosignal import Signal
|
||||
|
|
@ -32,6 +21,7 @@ from yarl import URL
|
|||
|
||||
import aiohttp
|
||||
from aiohttp.client import (
|
||||
_BaseRequestContextManager,
|
||||
_RequestContextManager,
|
||||
_RequestOptions,
|
||||
_WSRequestContextManager,
|
||||
|
|
@ -61,7 +51,7 @@ from .web_protocol import _RequestHandler
|
|||
if TYPE_CHECKING:
|
||||
from ssl import SSLContext
|
||||
else:
|
||||
SSLContext = None
|
||||
SSLContext = Any
|
||||
|
||||
if sys.version_info >= (3, 11) and TYPE_CHECKING:
|
||||
from typing import Unpack
|
||||
|
|
@ -110,9 +100,9 @@ class BaseTestServer(ABC):
|
|||
self,
|
||||
*,
|
||||
scheme: str = "",
|
||||
loop: Optional[asyncio.AbstractEventLoop] = None,
|
||||
loop: asyncio.AbstractEventLoop | None = None,
|
||||
host: str = "127.0.0.1",
|
||||
port: Optional[int] = None,
|
||||
port: int | None = None,
|
||||
skip_url_asserts: bool = False,
|
||||
socket_factory: Callable[
|
||||
[str, int, socket.AddressFamily], socket.socket
|
||||
|
|
@ -120,8 +110,8 @@ class BaseTestServer(ABC):
|
|||
**kwargs: Any,
|
||||
) -> None:
|
||||
self._loop = loop
|
||||
self.runner: Optional[BaseRunner] = None
|
||||
self._root: Optional[URL] = None
|
||||
self.runner: BaseRunner | None = None
|
||||
self._root: URL | None = None
|
||||
self.host = host
|
||||
self.port = port
|
||||
self._closed = False
|
||||
|
|
@ -130,7 +120,7 @@ class BaseTestServer(ABC):
|
|||
self.socket_factory = socket_factory
|
||||
|
||||
async def start_server(
|
||||
self, loop: Optional[asyncio.AbstractEventLoop] = None, **kwargs: Any
|
||||
self, loop: asyncio.AbstractEventLoop | None = None, **kwargs: Any
|
||||
) -> None:
|
||||
if self.runner:
|
||||
return
|
||||
|
|
@ -215,9 +205,9 @@ class BaseTestServer(ABC):
|
|||
|
||||
def __exit__(
|
||||
self,
|
||||
exc_type: Optional[Type[BaseException]],
|
||||
exc_value: Optional[BaseException],
|
||||
traceback: Optional[TracebackType],
|
||||
exc_type: type[BaseException] | None,
|
||||
exc_value: BaseException | None,
|
||||
traceback: TracebackType | None,
|
||||
) -> None:
|
||||
# __exit__ should exist in pair with __enter__ but never executed
|
||||
pass # pragma: no cover
|
||||
|
|
@ -228,9 +218,9 @@ class BaseTestServer(ABC):
|
|||
|
||||
async def __aexit__(
|
||||
self,
|
||||
exc_type: Optional[Type[BaseException]],
|
||||
exc_value: Optional[BaseException],
|
||||
traceback: Optional[TracebackType],
|
||||
exc_type: type[BaseException] | None,
|
||||
exc_value: BaseException | None,
|
||||
traceback: TracebackType | None,
|
||||
) -> None:
|
||||
await self.close()
|
||||
|
||||
|
|
@ -242,7 +232,7 @@ class TestServer(BaseTestServer):
|
|||
*,
|
||||
scheme: str = "",
|
||||
host: str = "127.0.0.1",
|
||||
port: Optional[int] = None,
|
||||
port: int | None = None,
|
||||
**kwargs: Any,
|
||||
):
|
||||
self.app = app
|
||||
|
|
@ -259,7 +249,7 @@ class RawTestServer(BaseTestServer):
|
|||
*,
|
||||
scheme: str = "",
|
||||
host: str = "127.0.0.1",
|
||||
port: Optional[int] = None,
|
||||
port: int | None = None,
|
||||
**kwargs: Any,
|
||||
) -> None:
|
||||
self._handler = handler
|
||||
|
|
@ -285,7 +275,7 @@ class TestClient(Generic[_Request, _ApplicationNone]):
|
|||
self: "TestClient[Request, Application]",
|
||||
server: TestServer,
|
||||
*,
|
||||
cookie_jar: Optional[AbstractCookieJar] = None,
|
||||
cookie_jar: AbstractCookieJar | None = None,
|
||||
**kwargs: Any,
|
||||
) -> None: ...
|
||||
@overload
|
||||
|
|
@ -293,15 +283,15 @@ class TestClient(Generic[_Request, _ApplicationNone]):
|
|||
self: "TestClient[_Request, None]",
|
||||
server: BaseTestServer,
|
||||
*,
|
||||
cookie_jar: Optional[AbstractCookieJar] = None,
|
||||
cookie_jar: AbstractCookieJar | None = None,
|
||||
**kwargs: Any,
|
||||
) -> None: ...
|
||||
def __init__(
|
||||
self,
|
||||
server: BaseTestServer,
|
||||
*,
|
||||
cookie_jar: Optional[AbstractCookieJar] = None,
|
||||
loop: Optional[asyncio.AbstractEventLoop] = None,
|
||||
cookie_jar: AbstractCookieJar | None = None,
|
||||
loop: asyncio.AbstractEventLoop | None = None,
|
||||
**kwargs: Any,
|
||||
) -> None:
|
||||
if not isinstance(server, BaseTestServer):
|
||||
|
|
@ -315,8 +305,8 @@ class TestClient(Generic[_Request, _ApplicationNone]):
|
|||
self._session = ClientSession(loop=loop, cookie_jar=cookie_jar, **kwargs)
|
||||
self._session._retry_connection = False
|
||||
self._closed = False
|
||||
self._responses: List[ClientResponse] = []
|
||||
self._websockets: List[ClientWebSocketResponse] = []
|
||||
self._responses: list[ClientResponse] = []
|
||||
self._websockets: list[ClientWebSocketResponse[bool]] = []
|
||||
|
||||
async def start_server(self) -> None:
|
||||
await self._server.start_server(loop=self._loop)
|
||||
|
|
@ -326,7 +316,7 @@ class TestClient(Generic[_Request, _ApplicationNone]):
|
|||
return self._server.host
|
||||
|
||||
@property
|
||||
def port(self) -> Optional[int]:
|
||||
def port(self) -> int | None:
|
||||
return self._server.port
|
||||
|
||||
@property
|
||||
|
|
@ -455,18 +445,54 @@ class TestClient(Generic[_Request, _ApplicationNone]):
|
|||
self._request(hdrs.METH_DELETE, path, **kwargs)
|
||||
)
|
||||
|
||||
def ws_connect(self, path: StrOrURL, **kwargs: Any) -> _WSRequestContextManager:
|
||||
@overload
|
||||
def ws_connect(
|
||||
self, path: StrOrURL, *, decode_text: Literal[True] = ..., **kwargs: Any
|
||||
) -> "_BaseRequestContextManager[ClientWebSocketResponse[Literal[True]]]": ...
|
||||
|
||||
@overload
|
||||
def ws_connect(
|
||||
self, path: StrOrURL, *, decode_text: Literal[False], **kwargs: Any
|
||||
) -> "_BaseRequestContextManager[ClientWebSocketResponse[Literal[False]]]": ...
|
||||
|
||||
@overload
|
||||
def ws_connect(
|
||||
self, path: StrOrURL, *, decode_text: bool = ..., **kwargs: Any
|
||||
) -> "_BaseRequestContextManager[ClientWebSocketResponse[bool]]": ...
|
||||
|
||||
def ws_connect(
|
||||
self, path: StrOrURL, *, decode_text: bool = True, **kwargs: Any
|
||||
) -> "_BaseRequestContextManager[ClientWebSocketResponse[bool]]":
|
||||
"""Initiate websocket connection.
|
||||
|
||||
The api corresponds to aiohttp.ClientSession.ws_connect.
|
||||
|
||||
"""
|
||||
return _WSRequestContextManager(self._ws_connect(path, **kwargs))
|
||||
return _WSRequestContextManager(
|
||||
self._ws_connect(path, decode_text=decode_text, **kwargs)
|
||||
)
|
||||
|
||||
@overload
|
||||
async def _ws_connect(
|
||||
self, path: StrOrURL, *, decode_text: Literal[True] = ..., **kwargs: Any
|
||||
) -> "ClientWebSocketResponse[Literal[True]]": ...
|
||||
|
||||
@overload
|
||||
async def _ws_connect(
|
||||
self, path: StrOrURL, *, decode_text: Literal[False], **kwargs: Any
|
||||
) -> "ClientWebSocketResponse[Literal[False]]": ...
|
||||
|
||||
@overload
|
||||
async def _ws_connect(
|
||||
self, path: StrOrURL, *, decode_text: bool = ..., **kwargs: Any
|
||||
) -> "ClientWebSocketResponse[bool]": ...
|
||||
|
||||
async def _ws_connect(
|
||||
self, path: StrOrURL, **kwargs: Any
|
||||
) -> ClientWebSocketResponse:
|
||||
ws = await self._session.ws_connect(self.make_url(path), **kwargs)
|
||||
self, path: StrOrURL, *, decode_text: bool = True, **kwargs: Any
|
||||
) -> "ClientWebSocketResponse[bool]":
|
||||
ws = await self._session.ws_connect(
|
||||
self.make_url(path), decode_text=decode_text, **kwargs
|
||||
)
|
||||
self._websockets.append(ws)
|
||||
return ws
|
||||
|
||||
|
|
@ -496,9 +522,9 @@ class TestClient(Generic[_Request, _ApplicationNone]):
|
|||
|
||||
def __exit__(
|
||||
self,
|
||||
exc_type: Optional[Type[BaseException]],
|
||||
exc: Optional[BaseException],
|
||||
tb: Optional[TracebackType],
|
||||
exc_type: type[BaseException] | None,
|
||||
exc: BaseException | None,
|
||||
tb: TracebackType | None,
|
||||
) -> None:
|
||||
# __exit__ should exist in pair with __enter__ but never executed
|
||||
pass # pragma: no cover
|
||||
|
|
@ -509,9 +535,9 @@ class TestClient(Generic[_Request, _ApplicationNone]):
|
|||
|
||||
async def __aexit__(
|
||||
self,
|
||||
exc_type: Optional[Type[BaseException]],
|
||||
exc: Optional[BaseException],
|
||||
tb: Optional[TracebackType],
|
||||
exc_type: type[BaseException] | None,
|
||||
exc: BaseException | None,
|
||||
tb: TracebackType | None,
|
||||
) -> None:
|
||||
await self.close()
|
||||
|
||||
|
|
@ -648,14 +674,13 @@ def _create_app_mock() -> mock.MagicMock:
|
|||
return app
|
||||
|
||||
|
||||
def _create_transport(sslcontext: Optional[SSLContext] = None) -> mock.Mock:
|
||||
def _create_transport(sslcontext: SSLContext | None = None) -> mock.Mock:
|
||||
transport = mock.Mock()
|
||||
|
||||
def get_extra_info(key: str) -> Optional[SSLContext]:
|
||||
def get_extra_info(key: str) -> SSLContext | tuple[str, int] | None:
|
||||
if key == "sslcontext":
|
||||
return sslcontext
|
||||
else:
|
||||
return None
|
||||
return ("127.0.0.1", 80) if key == "sockname" else None
|
||||
|
||||
transport.get_extra_info.side_effect = get_extra_info
|
||||
return transport
|
||||
|
|
@ -674,7 +699,7 @@ def make_mocked_request(
|
|||
protocol: Any = sentinel,
|
||||
transport: Any = sentinel,
|
||||
payload: StreamReader = EMPTY_PAYLOAD,
|
||||
sslcontext: Optional[SSLContext] = None,
|
||||
sslcontext: SSLContext | None = None,
|
||||
client_max_size: int = 1024**2,
|
||||
loop: Any = ...,
|
||||
) -> Request:
|
||||
|
|
@ -708,6 +733,9 @@ def make_mocked_request(
|
|||
raw_hdrs = ()
|
||||
|
||||
chunked = "chunked" in headers.get(hdrs.TRANSFER_ENCODING, "").lower()
|
||||
upgrade = headers.get(hdrs.CONNECTION, "").lower() == "upgrade" and bool(
|
||||
headers.get(hdrs.UPGRADE)
|
||||
)
|
||||
|
||||
message = RawRequestMessage(
|
||||
method,
|
||||
|
|
@ -717,7 +745,7 @@ def make_mocked_request(
|
|||
raw_hdrs,
|
||||
closing,
|
||||
None,
|
||||
False,
|
||||
upgrade,
|
||||
chunked,
|
||||
URL(path),
|
||||
)
|
||||
|
|
@ -729,10 +757,16 @@ def make_mocked_request(
|
|||
|
||||
if protocol is sentinel:
|
||||
protocol = mock.Mock()
|
||||
protocol.max_field_size = 8190
|
||||
protocol.max_line_length = 8190
|
||||
protocol.max_headers = 128
|
||||
protocol.transport = transport
|
||||
type(protocol).peername = mock.PropertyMock(
|
||||
return_value=transport.get_extra_info("peername")
|
||||
)
|
||||
type(protocol).sockname = mock.PropertyMock(
|
||||
return_value=transport.get_extra_info("sockname")
|
||||
)
|
||||
type(protocol).ssl_context = mock.PropertyMock(return_value=sslcontext)
|
||||
|
||||
if writer is sentinel:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue