Add reloading on addtional directories (#2167)
This commit is contained in:
18
sanic/app.py
18
sanic/app.py
@@ -14,6 +14,7 @@ from asyncio.futures import Future
|
||||
from collections import defaultdict, deque
|
||||
from functools import partial
|
||||
from inspect import isawaitable
|
||||
from pathlib import Path
|
||||
from socket import socket
|
||||
from ssl import Purpose, SSLContext, create_default_context
|
||||
from traceback import format_exc
|
||||
@@ -105,6 +106,7 @@ class Sanic(BaseSanic):
|
||||
"name",
|
||||
"named_request_middleware",
|
||||
"named_response_middleware",
|
||||
"reload_dirs",
|
||||
"request_class",
|
||||
"request_middleware",
|
||||
"response_middleware",
|
||||
@@ -168,6 +170,7 @@ class Sanic(BaseSanic):
|
||||
self.listeners: Dict[str, List[ListenerType]] = defaultdict(list)
|
||||
self.named_request_middleware: Dict[str, Deque[MiddlewareType]] = {}
|
||||
self.named_response_middleware: Dict[str, Deque[MiddlewareType]] = {}
|
||||
self.reload_dirs: Set[Path] = set()
|
||||
self.request_class = request_class
|
||||
self.request_middleware: Deque[MiddlewareType] = deque()
|
||||
self.response_middleware: Deque[MiddlewareType] = deque()
|
||||
@@ -389,7 +392,7 @@ class Sanic(BaseSanic):
|
||||
if self.config.EVENT_AUTOREGISTER:
|
||||
self.signal_router.reset()
|
||||
self.add_signal(None, event)
|
||||
signal = self.signal_router.name_index.get(event)
|
||||
signal = self.signal_router.name_index[event]
|
||||
self.signal_router.finalize()
|
||||
else:
|
||||
raise NotFound("Could not find signal %s" % event)
|
||||
@@ -846,6 +849,7 @@ class Sanic(BaseSanic):
|
||||
access_log: Optional[bool] = None,
|
||||
unix: Optional[str] = None,
|
||||
loop: None = None,
|
||||
reload_dir: Optional[Union[List[str], str]] = None,
|
||||
) -> None:
|
||||
"""
|
||||
Run the HTTP Server and listen until keyboard interrupt or term
|
||||
@@ -880,6 +884,18 @@ class Sanic(BaseSanic):
|
||||
:type unix: str
|
||||
:return: Nothing
|
||||
"""
|
||||
if reload_dir:
|
||||
if isinstance(reload_dir, str):
|
||||
reload_dir = [reload_dir]
|
||||
|
||||
for directory in reload_dir:
|
||||
direc = Path(directory)
|
||||
if not direc.is_dir():
|
||||
logger.warning(
|
||||
f"Directory {directory} could not be located"
|
||||
)
|
||||
self.reload_dirs.add(Path(directory))
|
||||
|
||||
if loop is not None:
|
||||
raise TypeError(
|
||||
"loop is not a valid argument. To use an existing loop, "
|
||||
|
||||
Reference in New Issue
Block a user