Esempio n. 1
0
 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))
Esempio n. 2
0
 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
Esempio n. 3
0
    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
Esempio n. 4
0
    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
Esempio n. 5
0
File: app.py Progetto: astagi/sanic
    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
Esempio n. 6
0
    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)
Esempio n. 7
0
    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)
Esempio n. 8
0
    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))
Esempio n. 9
0
    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
Esempio n. 10
0
 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 = []
Esempio n. 11
0
 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
Esempio n. 12
0
 def sanic_add_routes(routes):
     router = SanicRouter()
     for url, controller, methods, method_dict in routes:
         router.add(url, methods, controller)
     return router
Esempio n. 13
0
    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
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