mirror of
https://github.com/RYGhub/royalnet.git
synced 2024-11-27 13:34:28 +00:00
#105: Add optional imports to herald
This commit is contained in:
parent
14c3ce4420
commit
47327cf693
2 changed files with 16 additions and 6 deletions
|
@ -1,5 +1,4 @@
|
||||||
import asyncio
|
import asyncio
|
||||||
import websockets
|
|
||||||
import uuid
|
import uuid
|
||||||
import functools
|
import functools
|
||||||
import logging as _logging
|
import logging as _logging
|
||||||
|
@ -11,6 +10,11 @@ from .broadcast import Broadcast
|
||||||
from .errors import ConnectionClosedError, InvalidServerResponseError
|
from .errors import ConnectionClosedError, InvalidServerResponseError
|
||||||
from .config import Config
|
from .config import Config
|
||||||
|
|
||||||
|
try:
|
||||||
|
import websockets
|
||||||
|
except ImportError:
|
||||||
|
websockets = None
|
||||||
|
|
||||||
|
|
||||||
log = _logging.getLogger(__name__)
|
log = _logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -53,9 +57,11 @@ def requires_identification(func):
|
||||||
class Link:
|
class Link:
|
||||||
def __init__(self, config: Config, request_handler, *,
|
def __init__(self, config: Config, request_handler, *,
|
||||||
loop: asyncio.AbstractEventLoop = None):
|
loop: asyncio.AbstractEventLoop = None):
|
||||||
|
if websockets is None:
|
||||||
|
raise ImportError("'websockets' extra is not installed")
|
||||||
self.config: Config = config
|
self.config: Config = config
|
||||||
self.nid: str = str(uuid.uuid4())
|
self.nid: str = str(uuid.uuid4())
|
||||||
self.websocket: typing.Optional[websockets.WebSocketClientProtocol] = None
|
self.websocket: typing.Optional["websockets.WebSocketClientProtocol"] = None
|
||||||
self.request_handler: typing.Callable[[typing.Union[Request, Broadcast]],
|
self.request_handler: typing.Callable[[typing.Union[Request, Broadcast]],
|
||||||
typing.Awaitable[Response]] = request_handler
|
typing.Awaitable[Response]] = request_handler
|
||||||
self._pending_requests: typing.Dict[str, PendingRequest] = {}
|
self._pending_requests: typing.Dict[str, PendingRequest] = {}
|
||||||
|
|
|
@ -1,5 +1,4 @@
|
||||||
import typing
|
import typing
|
||||||
import websockets
|
|
||||||
import re
|
import re
|
||||||
import datetime
|
import datetime
|
||||||
import uuid
|
import uuid
|
||||||
|
@ -8,14 +7,19 @@ import logging as _logging
|
||||||
from .package import Package
|
from .package import Package
|
||||||
from .config import Config
|
from .config import Config
|
||||||
|
|
||||||
|
try:
|
||||||
|
import websockets
|
||||||
|
except ImportError:
|
||||||
|
websockets = None
|
||||||
|
|
||||||
|
|
||||||
log = _logging.getLogger(__name__)
|
log = _logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
class ConnectedClient:
|
class ConnectedClient:
|
||||||
"""The :py:class:`Server`-side representation of a connected :py:class:`Link`."""
|
"""The :py:class:`Server`-side representation of a connected :py:class:`Link`."""
|
||||||
def __init__(self, socket: websockets.WebSocketServerProtocol):
|
def __init__(self, socket: "websockets.WebSocketServerProtocol"):
|
||||||
self.socket: websockets.WebSocketServerProtocol = socket
|
self.socket: "websockets.WebSocketServerProtocol" = socket
|
||||||
self.nid: typing.Optional[str] = None
|
self.nid: typing.Optional[str] = None
|
||||||
self.link_type: typing.Optional[str] = None
|
self.link_type: typing.Optional[str] = None
|
||||||
self.connection_datetime: datetime.datetime = datetime.datetime.now()
|
self.connection_datetime: datetime.datetime = datetime.datetime.now()
|
||||||
|
@ -57,7 +61,7 @@ class Server:
|
||||||
matching = [client for client in self.identified_clients if client.link_type == link_type]
|
matching = [client for client in self.identified_clients if client.link_type == link_type]
|
||||||
return matching or []
|
return matching or []
|
||||||
|
|
||||||
async def listener(self, websocket: websockets.server.WebSocketServerProtocol, path):
|
async def listener(self, websocket: "websockets.server.WebSocketServerProtocol", path):
|
||||||
log.info(f"{websocket.remote_address} connected to the server.")
|
log.info(f"{websocket.remote_address} connected to the server.")
|
||||||
connected_client = ConnectedClient(websocket)
|
connected_client = ConnectedClient(websocket)
|
||||||
# Wait for identification
|
# Wait for identification
|
||||||
|
|
Loading…
Reference in a new issue