Пример #1
0
def setup_routes(app: Application, base_dir: Path,
                 cors_config: CorsConfig) -> None:
    app.router.add_view('/zbs/login', LoginView, name='login_view')
    app.router.add_view('/zbs/logout', LogoutView)
    app.router.add_view('/zbs/switches',
                        SwitchListAdminView,
                        name='switches_list')
    app.router.add_view('/zbs/switches/add',
                        SwitchAddAdminView,
                        name='switches_add')
    app.router.add_view('/zbs/switches/copy',
                        SwitchesCopyAdminView,
                        name='switches_copy')
    app.router.add_view('/zbs/switches/{id}',
                        SwitchDetailAdminView,
                        name='switch_detail')
    app.router.add_view('/zbs/switches/{id}/delete', SwitchDeleteAdminView)
    app.router.add_view('/zbs/users', UserListAdminView)
    app.router.add_view('/zbs/users/{id}', UserDetailAdminView)

    get_switch_view = app.router.add_view('/api/v1/switch', SwitchListView)
    cors_config.add(get_switch_view)

    if settings.ENABLE_SWITCHES_FULL_INFO_ENDPOINT:
        get_switch_full_view = app.router.add_view(
            '/api/v1/switches_full_info', SwitchFullListView)
        cors_config.add(get_switch_full_view)

    if settings.ENVIRONMENT == 'Dev':
        app.router.add_static('/static', str(base_dir / 'its_on' / 'static'))
Пример #2
0
 def enable_cors(cls, cors: CorsConfig):
     """Enables CORS on the view."""
     try:
         cors.add(cls.route, webview=True)
     except AttributeError as error:
         raise ViewConfigurationError(
             "No route assigned. Please register the route first."
         ) from error
Пример #3
0
class TestCorsConfig(unittest.TestCase):
    """Unit tests for CorsConfig"""
    def setUp(self):
        self.loop = asyncio.new_event_loop()
        self.app = web.Application(loop=self.loop)
        self.cors = CorsConfig(self.app, defaults={"*": ResourceOptions()})
        self.get_route = self.app.router.add_route("GET", "/get_path",
                                                   _handler)
        self.options_route = self.app.router.add_route("OPTIONS",
                                                       "/options_path",
                                                       _handler)

    def tearDown(self):
        self.loop.close()

    def test_add_options_route(self):
        """Test configuring OPTIONS route"""

        with self.assertRaises(RuntimeError):
            self.cors.add(self.options_route.resource)

    def test_plain_named_route(self):
        """Test adding plain named route."""
        # Adding CORS routes should not introduce new named routes.
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_route("GET",
                                          "/{name}",
                                          _handler,
                                          name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)

    def test_dynamic_named_route(self):
        """Test adding dynamic named route."""
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_route("GET",
                                          "/{name}",
                                          _handler,
                                          name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)

    def test_static_named_route(self):
        """Test adding dynamic named route."""
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_static("/file",
                                           "/",
                                           name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)
Пример #4
0
class TestCorsConfig(unittest.TestCase):
    """Unit tests for CorsConfig"""
    def setUp(self):
        self.loop = asyncio.new_event_loop()
        self.app = web.Application(loop=self.loop)
        self.cors = CorsConfig(self.app, defaults={"*": ResourceOptions()})
        self.get_route = self.app.router.add_route("GET", "/get_path",
                                                   _handler)
        self.options_route = self.app.router.add_route("OPTIONS",
                                                       "/options_path",
                                                       _handler)

    def tearDown(self):
        self.loop.close()

    def test_add_get_route(self):
        """Test configuring GET route"""
        result = self.cors.add(self.get_route)
        self.assertIs(result, self.get_route)

        self.assertEqual(len(self.cors._route_config), 1)
        self.assertIn(self.get_route, self.cors._route_config)

        self.assertEqual(len(self.cors._preflight_route_settings), 1)

    def test_add_options_route(self):
        """Test configuring OPTIONS route"""

        with self.assertRaisesRegex(
                ValueError,
                "CORS can't be enabled on route that handles OPTIONS request"):
            self.cors.add(self.options_route)

        self.assertFalse(self.cors._route_config)
        self.assertFalse(self.cors._preflight_route_settings)

    def test_add_preflight_route(self):
        """Test configuring preflight route"""

        self.cors.add(self.get_route)
        preflight_route = next(iter(
            self.cors._preflight_route_settings.keys()))

        self.assertEqual(len(self.cors._route_config), 1)
        self.assertEqual(len(self.cors._preflight_route_settings), 1)

        # TODO: Capture and verify log warning message.
        result = self.cors.add(preflight_route)
        self.assertIs(result, preflight_route)

        self.assertEqual(len(self.cors._route_config), 1)
        self.assertEqual(len(self.cors._preflight_route_settings), 1)

    def test_plain_named_route(self):
        """Test adding plain named route."""
        # Adding CORS routes should not introduce new named routes.
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_route("GET",
                                          "/{name}",
                                          _handler,
                                          name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)

    def test_dynamic_named_route(self):
        """Test adding dynamic named route."""
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_route("GET",
                                          "/{name}",
                                          _handler,
                                          name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)

    def test_static_named_route(self):
        """Test adding dynamic named route."""
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_static("/file",
                                           "/",
                                           name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)
Пример #5
0
def _enable_cors(prefix: str, cors: CorsConfig):
    for route in web_server.router.routes():
        if route.resource and route.resource.canonical.startswith(prefix):
            cors.add(route)
Пример #6
0
class TestCorsConfig(unittest.TestCase):
    """Unit tests for CorsConfig"""

    def setUp(self):
        self.loop = asyncio.new_event_loop()
        self.app = web.Application(loop=self.loop)
        self.cors = CorsConfig(self.app, defaults={
            "*": ResourceOptions()
        })
        self.get_route = self.app.router.add_route(
            "GET", "/get_path", _handler)
        self.options_route = self.app.router.add_route(
            "OPTIONS", "/options_path", _handler)

    def tearDown(self):
        self.loop.close()

    def test_add_options_route(self):
        """Test configuring OPTIONS route"""

        with self.assertRaises(RuntimeError):
            self.cors.add(self.options_route.resource)

    def test_plain_named_route(self):
        """Test adding plain named route."""
        # Adding CORS routes should not introduce new named routes.
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_route(
            "GET", "/{name}", _handler, name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)

    def test_dynamic_named_route(self):
        """Test adding dynamic named route."""
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_route(
            "GET", "/{name}", _handler, name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)

    def test_static_named_route(self):
        """Test adding dynamic named route."""
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_static(
            "/file", "/", name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)

    def test_static_resource(self):
        """Test adding static resource."""
        self.assertEqual(len(self.app.router.keys()), 0)
        self.app.router.add_static(
            "/file", "/", name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        for resource in list(self.app.router.resources()):
            if issubclass(resource, web.StaticResource):
                self.cors.add(resource)
        self.assertEqual(len(self.app.router.keys()), 1)
Пример #7
0
class TestCorsConfig(unittest.TestCase):
    """Unit tests for CorsConfig"""

    def setUp(self):
        self.loop = asyncio.new_event_loop()
        self.app = web.Application(loop=self.loop)
        self.cors = CorsConfig(self.app, defaults={
            "*": ResourceOptions()
        })
        self.get_route = self.app.router.add_route(
            "GET", "/get_path", _handler)
        self.options_route = self.app.router.add_route(
            "OPTIONS", "/options_path", _handler)

    def tearDown(self):
        self.loop.close()

    def test_add_get_route(self):
        """Test configuring GET route"""
        result = self.cors.add(self.get_route)
        self.assertIs(result, self.get_route)

        self.assertEqual(len(self.cors._route_config), 1)
        self.assertIn(self.get_route, self.cors._route_config)

        self.assertEqual(len(self.cors._preflight_route_settings), 1)

    def test_add_options_route(self):
        """Test configuring OPTIONS route"""

        with self.assertRaisesRegex(
                ValueError,
                "CORS can't be enabled on route that handles OPTIONS request"):
            self.cors.add(self.options_route)

        self.assertFalse(self.cors._route_config)
        self.assertFalse(self.cors._preflight_route_settings)

    def test_add_preflight_route(self):
        """Test configuring preflight route"""

        self.cors.add(self.get_route)
        preflight_route = next(iter(
            self.cors._preflight_route_settings.keys()))

        self.assertEqual(len(self.cors._route_config), 1)
        self.assertEqual(len(self.cors._preflight_route_settings), 1)

        # TODO: Capture and verify log warning message.
        result = self.cors.add(preflight_route)
        self.assertIs(result, preflight_route)

        self.assertEqual(len(self.cors._route_config), 1)
        self.assertEqual(len(self.cors._preflight_route_settings), 1)

    def test_plain_named_route(self):
        """Test adding plain named route."""
        # Adding CORS routes should not introduce new named routes.
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_route(
            "GET", "/{name}", _handler, name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)

    def test_dynamic_named_route(self):
        """Test adding dynamic named route."""
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_route(
            "GET", "/{name}", _handler, name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)

    def test_static_named_route(self):
        """Test adding dynamic named route."""
        self.assertEqual(len(self.app.router.keys()), 0)
        route = self.app.router.add_static(
            "/file", "/", name="dynamic_named_route")
        self.assertEqual(len(self.app.router.keys()), 1)
        self.cors.add(route)
        self.assertEqual(len(self.app.router.keys()), 1)