Skip to content

Commit

Permalink
Add some suggestions from review
Browse files Browse the repository at this point in the history
  • Loading branch information
ahopkins committed Mar 13, 2021
1 parent 4a7252e commit 472d121
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 18 deletions.
34 changes: 20 additions & 14 deletions sanic/app.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import asyncio
import logging
import logging.config
import os
Expand Down Expand Up @@ -327,11 +328,11 @@ def dispatch(
where=where,
)

def event(self, event: str):
def event(self, event: str, timeout: Optional[Union[int, float]] = None):
signal = self.signal_router.name_index.get(event)
if not signal:
raise NotFound("Could not find signal %s" % event)
return signal.ctx.event.wait()
return asyncio.wait_for(signal.ctx.event.wait(), timeout=timeout)

def enable_websocket(self, enable=True):
"""Enable or disable the support for websocket.
Expand Down Expand Up @@ -1055,18 +1056,9 @@ def _helper(
):
"""Helper function used by `run` and `create_server`."""

async def finalize(app, _):
try:
app.router.finalize()
if app.signal_router.routes:
app.signal_router.finalize() # noqa
except FinalizationError as e:
if not Sanic.test_mode:
raise e # noqa

self.listeners["before_server_start"] = [finalize] + self.listeners[
"before_server_start"
]
self.listeners["before_server_start"] = [
self.finalize
] + self.listeners["before_server_start"]

if isinstance(ssl, dict):
# try common aliaseses
Expand Down Expand Up @@ -1236,3 +1228,17 @@ def get_app(
if force_create:
return cls(name)
raise SanicException(f'Sanic app name "{name}" not found.')

# -------------------------------------------------------------------- #
# Static methods
# -------------------------------------------------------------------- #

@staticmethod
async def finalize(app, _):
try:
app.router.finalize()
if app.signal_router.routes:
app.signal_router.finalize() # noqa
except FinalizationError as e:
if not Sanic.test_mode:
raise e # noqa
2 changes: 2 additions & 0 deletions sanic/asgi.py
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,8 @@ async def startup(self) -> None:
startup event.
"""
self.asgi_app.sanic_app.router.finalize()
if self.asgi_app.sanic_app.signal_router.routes:
self.asgi_app.sanic_app.signal_router.finalize()
listeners = self.asgi_app.sanic_app.listeners.get(
"before_server_start", []
) + self.asgi_app.sanic_app.listeners.get("after_server_start", [])
Expand Down
9 changes: 5 additions & 4 deletions sanic/blueprints.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import asyncio

from collections import defaultdict
from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Set
from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Set, Union

from sanic_routing.exceptions import NotFound # type: ignore
from sanic_routing.route import Route # type: ignore
Expand Down Expand Up @@ -109,9 +109,9 @@ def exception(self, *args, **kwargs):
kwargs["apply"] = False
return super().exception(*args, **kwargs)

def signal(self, *args, **kwargs):
def signal(self, event: str, *args, **kwargs):
kwargs["apply"] = False
return super().signal(*args, **kwargs)
return super().signal(event, *args, **kwargs)

@staticmethod
def group(*blueprints, url_prefix="", version=None, strict_slashes=None):
Expand Down Expand Up @@ -246,7 +246,7 @@ async def dispatch(self, *args, **kwargs):
*[app.dispatch(*args, **kwargs) for app in self.apps]
)

def event(self, event: str):
def event(self, event: str, timeout: Optional[Union[int, float]] = None):
events = set()
for app in self.apps:
signal = app.signal_router.name_index.get(event)
Expand All @@ -258,6 +258,7 @@ def event(self, event: str):
return asyncio.wait(
[event.wait() for event in events],
return_when=asyncio.FIRST_COMPLETED,
timeout=timeout,
)

raise NotFound("Could not find signal %s" % event)

0 comments on commit 472d121

Please sign in to comment.