def __init__(self, name=None, router=None, error_handler=None): # Only set up a default log handler if the # end-user application didn't set anything up. if not logging.root.handlers and log.level == logging.NOTSET: formatter = logging.Formatter( "%(asctime)s: %(levelname)s: %(message)s") handler = logging.StreamHandler() handler.setFormatter(formatter) log.addHandler(handler) log.setLevel(logging.INFO) # Get name from previous stack frame if name is None: frame_records = stack()[1] name = getmodulename(frame_records[1]) self.name = name self.router = router or Router() self.error_handler = error_handler or ErrorHandler() self.config = Config() self.request_middleware = deque() self.response_middleware = deque() self.blueprints = {} self._blueprint_order = [] self.debug = None self.sock = None self.listeners = defaultdict(list) self.is_running = False self.websocket_enabled = False self.websocket_tasks = [] # Register alternative method names self.go_fast = self.run
def __init__( self, name: str = None, router: Router = None, error_handler: ErrorHandler = None, load_env: bool = True, request_class: Type[Request] = None, strict_slashes: bool = False, log_config: Optional[Dict[str, Any]] = None, configure_logging: bool = True, register: Optional[bool] = None, dumps: Optional[Callable[..., str]] = None, ) -> None: super().__init__() if name is None: raise SanicException( "Sanic instance cannot be unnamed. " "Please use Sanic(name='your_application_name') instead.", ) # logging if configure_logging: logging.config.dictConfig(log_config or LOGGING_CONFIG_DEFAULTS) self.name = name self.asgi = False self.router = router or Router() self.request_class = request_class self.error_handler = error_handler or ErrorHandler() self.config = Config(load_env=load_env) self.request_middleware: Deque[MiddlewareType] = deque() self.response_middleware: Deque[MiddlewareType] = deque() self.blueprints: Dict[str, Blueprint] = {} self._blueprint_order: List[Blueprint] = [] self.configure_logging = configure_logging self.debug = None self.sock = None self.strict_slashes = strict_slashes self.listeners: Dict[str, List[ListenerType]] = defaultdict(list) self.is_stopping = False self.is_running = False self.websocket_enabled = False self.websocket_tasks: Set[Future] = set() self.named_request_middleware: Dict[str, Deque[MiddlewareType]] = {} self.named_response_middleware: Dict[str, Deque[MiddlewareType]] = {} self._test_manager = None self._test_client = None self._asgi_client = None # Register alternative method names self.go_fast = self.run if register is not None: self.config.REGISTER = register if self.config.REGISTER: self.__class__.register_app(self) self.router.ctx.app = self if dumps: BaseHTTPResponse._dumps = dumps
def __init__(self, name=None, router=None, error_handler=None, load_env=True, request_class=None, strict_slashes=False, log_config=None, configure_logging=True): # Get name from previous stack frame if name is None: frame_records = stack()[1] name = getmodulename(frame_records[1]) # logging if configure_logging: logging.config.dictConfig(log_config or LOGGING_CONFIG_DEFAULTS) self.name = name self.router = router or Router() self.request_class = request_class self.error_handler = error_handler or ErrorHandler() self.config = Config(load_env=load_env) self.request_middleware = deque() self.response_middleware = deque() self.blueprints = {} self._blueprint_order = [] self.configure_logging = configure_logging self.debug = None self.sock = None self.strict_slashes = strict_slashes self.listeners = defaultdict(list) self.is_running = False self.is_request_stream = False self.websocket_enabled = False self.websocket_tasks = set() # Register alternative method names self.go_fast = self.run
def test_basic_target_path(self): router = Router() template = URITemplate('/root/{target}{/path*}') routeuri = templateuri_to_sanic_routeuri(template) # have to use strict slashes to avoid ambiguity. router.add(routeuri, ['GET'], 'root-target-path', strict_slashes=True) request = make_request('/root/base/some/test/path') self.assertEqual(( 'root-target-path', [], { 'target': 'base', 'path': '/some/test/path', }, routeuri, None, ), router.get(request)) request = make_request('/root/base/some/test/path/') self.assertEqual(( 'root-target-path', [], { 'target': 'base', 'path': '/some/test/path/', }, routeuri, None, ), router.get(request))
def test_fail_on_partial(self): router = Router() template = URITemplate('/rooted') routeuri = templateuri_to_sanic_routeuri(template) router.add(routeuri, ['GET'], 'root') request = make_request('/root') with self.assertRaises(NotFound): router.get(request) request = make_request('/roottedmore') with self.assertRaises(NotFound): router.get(request)
def __init__( self, name=None, router=None, error_handler=None, load_env=True, request_class=None, strict_slashes=False, log_config=None, configure_logging=True, register=None, ): # Get name from previous stack frame if name is None: raise SanicException( "Sanic instance cannot be unnamed. " "Please use Sanic(name='your_application_name') instead.", ) # logging if configure_logging: logging.config.dictConfig(log_config or LOGGING_CONFIG_DEFAULTS) self.name = name self.asgi = False self.router = router or Router(self) self.request_class = request_class self.error_handler = error_handler or ErrorHandler() self.config = Config(load_env=load_env) self.request_middleware = deque() self.response_middleware = deque() self.blueprints = {} self._blueprint_order = [] self.configure_logging = configure_logging self.debug = None self.sock = None self.strict_slashes = strict_slashes self.listeners = defaultdict(list) self.is_stopping = False self.is_running = False self.is_request_stream = False self.websocket_enabled = False self.websocket_tasks = set() self.named_request_middleware = {} self.named_response_middleware = {} # Register alternative method names self.go_fast = self.run if register is not None: self.config.REGISTER = register if self.config.REGISTER: self.__class__.register_app(self)
def __init__( self, name=None, router=None, error_handler=None, load_env=True, request_class=None, strict_slashes=False, log_config=None, configure_logging=True, ): # Get name from previous stack frame if name is None: warnings.warn( "Sanic(name=None) is deprecated and None value support " "for `name` will be removed in the next release. " "Please use Sanic(name='your_application_name') instead.", DeprecationWarning, stacklevel=2, ) frame_records = stack()[1] name = getmodulename(frame_records[1]) # logging if configure_logging: logging.config.dictConfig(log_config or LOGGING_CONFIG_DEFAULTS) self.name = name self.asgi = False self.router = router or Router() self.request_class = request_class self.error_handler = error_handler or ErrorHandler() self.config = Config(load_env=load_env) self.request_middleware = deque() self.response_middleware = deque() self.blueprints = {} self._blueprint_order = [] self.configure_logging = configure_logging self.debug = None self.sock = None self.strict_slashes = strict_slashes self.listeners = defaultdict(list) self.is_stopping = False self.is_running = False self.is_request_stream = False self.websocket_enabled = False self.websocket_tasks = set() self.named_request_middleware = {} self.named_response_middleware = {} # Register alternative method names self.go_fast = self.run
def test_basic(self): router = Router() template = URITemplate('/root') routeuri = templateuri_to_sanic_routeuri(template) router.add(routeuri, ['GET'], 'root') request = make_request('/root') self.assertEqual(( 'root', [], {}, routeuri, None, ), router.get(request))
def _setup(route_details: tuple) -> (Router, tuple): router = Router(app) added_router = [] for method, route in route_details: try: router._add( uri=f"/{route}", methods=frozenset({method}), host="localhost", handler=_handler, ) added_router.append((method, route)) except RouteExists: pass return router, added_router
def _setup(route_details: tuple) -> Tuple[Router, tuple]: router = Router() router.ctx.app = app added_router = [] for method, route in route_details: try: router.add( uri=f"/{route}", methods=frozenset({method}), host="localhost", handler=_handler, ) added_router.append((method, route)) except RouteExists: pass router.finalize() return router, added_router
def create_sanic_router(uri_data): endpoint = Endpoint("sanic") router = Router() # static routes for u in uri_data.get_static_uris(): router.add(u, methods=["GET"], handler=endpoint) # zero variable template = uri_data.get_zero_var_uri(ParamFormat.SANIC) router.add(template, methods=["GET"], handler=endpoint) # one variable template = uri_data.get_one_var_uri(ParamFormat.SANIC) router.add(template, methods=["GET"], handler=endpoint) # two variables template = uri_data.get_two_var_uri(ParamFormat.SANIC) router.add(template, methods=["GET"], handler=endpoint) # three variables template = uri_data.get_three_var_uri(ParamFormat.SANIC) router.add(template, methods=["GET"], handler=endpoint) # done return router
def __init__(self, name=None, router=None, error_handler=None, logger=None): if logger is None: logging.basicConfig( level=logging.INFO, format="%(asctime)s: %(levelname)s: %(message)s" ) if name is None: frame_records = stack()[1] name = getmodulename(frame_records[1]) self.name = name self.router = router or Router() # 路由 self.error_handler = error_handler or Handler(self) # 错误处理 self.config = Config() # 默认配置项 self.loop = None self.debug = None self.sock = None self.processes = None self.request_middleware = deque() # 请求中间件 self.response_middleware = deque() # 响应中间件 self.blueprints = {} # 蓝图 self._blueprint_order = []
def __init__( self, name: str = None, config: Optional[Config] = None, ctx: Optional[Any] = None, router: Optional[Router] = None, signal_router: Optional[SignalRouter] = None, error_handler: Optional[ErrorHandler] = None, load_env: Union[bool, str] = True, env_prefix: Optional[str] = SANIC_PREFIX, request_class: Optional[Type[Request]] = None, strict_slashes: bool = False, log_config: Optional[Dict[str, Any]] = None, configure_logging: bool = True, register: Optional[bool] = None, dumps: Optional[Callable[..., str]] = None, ) -> None: super().__init__(name=name) # logging if configure_logging: logging.config.dictConfig(log_config or LOGGING_CONFIG_DEFAULTS) if config and (load_env is not True or env_prefix != SANIC_PREFIX): raise SanicException( "When instantiating Sanic with config, you cannot also pass " "load_env or env_prefix") self._asgi_client = None self._blueprint_order: List[Blueprint] = [] self._test_client = None self._test_manager = None self.asgi = False self.auto_reload = False self.blueprints: Dict[str, Blueprint] = {} self.config = config or Config(load_env=load_env, env_prefix=env_prefix) self.configure_logging = configure_logging self.ctx = ctx or SimpleNamespace() self.debug = None self.error_handler = error_handler or ErrorHandler() self.is_running = False self.is_stopping = False 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.request_class = request_class self.request_middleware: Deque[MiddlewareType] = deque() self.response_middleware: Deque[MiddlewareType] = deque() self.router = router or Router() self.signal_router = signal_router or SignalRouter() self.sock = None self.strict_slashes = strict_slashes self.websocket_enabled = False self.websocket_tasks: Set[Future] = set() # Register alternative method names self.go_fast = self.run if register is not None: self.config.REGISTER = register if self.config.REGISTER: self.__class__.register_app(self) self.router.ctx.app = self if dumps: BaseHTTPResponse._dumps = dumps