Source code for asyncwebsockets.client
"""
Client connection utilities.
"""
from ssl import SSLContext
from typing import Optional, List
import anyio
import yarl
from asyncwebsockets.websocket import Websocket
try:
from contextlib import acontextmanager
except ImportError:
from async_generator import asynccontextmanager as acontextmanager
[docs]@acontextmanager
async def open_websocket(
url: str, headers: Optional[list] = None, subprotocols: Optional[list] = None
):
"""
Opens a websocket.
"""
ws = await create_websocket(url, headers=headers, subprotocols=subprotocols)
try:
yield ws
finally:
await ws.close()
[docs]async def create_websocket(
url: str,
ssl: Optional[SSLContext] = None,
headers: Optional[list] = None,
subprotocols: Optional[list] = None,
):
"""
A more low-level form of open_websocket.
You are responsible for closing this websocket.
"""
url = yarl.URL(url)
args = {}
if headers:
args["headers"] = headers
# automatically use ssl if it's websocket secure
if ssl is None:
ssl = url.scheme == "wss"
if ssl:
if ssl is True:
ssl = SSLContext()
args["ssl_context"] = ssl
args["autostart_tls"] = True
args["tls_standard_compatible"] = False
addr = (url.host, int(url.port))
ws = Websocket()
await ws.__ainit__(addr=addr, path=url.path_qs, subprotocols=subprotocols, **args)
return ws
[docs]@acontextmanager
async def open_websocket_client(
sock: anyio.abc.SocketStream,
addr,
path: str,
headers: Optional[list] = None,
subprotocols: Optional[list] = None,
):
"""Create a websocket on top of a socket."""
ws = await create_websocket_client(
sock, addr=addr, path=path, headers=headers, subprotocols=subprotocols
)
try:
yield ws
finally:
await ws.close()
[docs]async def create_websocket_client(
sock: anyio.abc.SocketStream,
addr,
path: str,
headers: Optional[List] = None,
subprotocols: Optional[List[str]] = None,
):
"""
A more low-level form of create_websocket_client.
You are responsible for closing this websocket.
"""
ws = Websocket()
await ws.start_client(sock, addr=addr, path=path, headers=headers, subprotocols=subprotocols)
return ws