From 08e02376391e7ecf2218416c14bd1af0a6e374b9 Mon Sep 17 00:00:00 2001 From: Evgeniy Alekseev Date: Sun, 5 Sep 2021 06:46:14 +0300 Subject: [PATCH] move api endpoints to status-api --- src/ahriman/core/status/web_client.py | 6 +-- src/ahriman/web/middlewares/auth_handler.py | 2 +- src/ahriman/web/routes.py | 40 +++++++++---------- tests/ahriman/core/status/test_web_client.py | 6 +-- .../web/middlewares/test_auth_handler.py | 4 +- tests/ahriman/web/views/test_view_ahriman.py | 10 ++--- tests/ahriman/web/views/test_view_package.py | 40 +++++++++---------- tests/ahriman/web/views/test_view_packages.py | 8 ++-- tests/ahriman/web/views/test_view_status.py | 4 +- 9 files changed, 60 insertions(+), 60 deletions(-) diff --git a/src/ahriman/core/status/web_client.py b/src/ahriman/core/status/web_client.py index 04d48386..badd9c52 100644 --- a/src/ahriman/core/status/web_client.py +++ b/src/ahriman/core/status/web_client.py @@ -58,7 +58,7 @@ class WebClient(Client): """ :return: full url for web service for ahriman service itself """ - return f"{self.address}/api/v1/ahriman" + return f"{self.address}/status-api/v1/ahriman" @property def _login_url(self) -> str: @@ -72,7 +72,7 @@ class WebClient(Client): """ :return: full url for web service for status """ - return f"{self.address}/api/v1/status" + return f"{self.address}/status-api/v1/status" @staticmethod def parse_address(configuration: Configuration) -> str: @@ -115,7 +115,7 @@ class WebClient(Client): :param base: package base to generate url :return: full url of web service for specific package base """ - return f"{self.address}/api/v1/packages/{base}" + return f"{self.address}/status-api/v1/packages/{base}" def add(self, package: Package, status: BuildStatusEnum) -> None: """ diff --git a/src/ahriman/web/middlewares/auth_handler.py b/src/ahriman/web/middlewares/auth_handler.py index 56a324a3..26da6725 100644 --- a/src/ahriman/web/middlewares/auth_handler.py +++ b/src/ahriman/web/middlewares/auth_handler.py @@ -73,7 +73,7 @@ def auth_handler(validator: Auth) -> MiddlewareType: """ @middleware async def handle(request: Request, handler: HandlerType) -> StreamResponse: - if request.path.startswith("/api"): + if request.path.startswith("/status-api"): permission = UserAccess.Status elif request.method in ("GET", "HEAD", "OPTIONS"): permission = UserAccess.Read diff --git a/src/ahriman/web/routes.py b/src/ahriman/web/routes.py index c3284c71..0c6ba966 100644 --- a/src/ahriman/web/routes.py +++ b/src/ahriman/web/routes.py @@ -34,23 +34,23 @@ def setup_routes(application: Application) -> None: Available routes are: - GET / get build status page - GET /index.html same as above + GET / get build status page + GET /index.html same as above - POST /login login to service - POST /logout logout from service + POST /login login to service + POST /logout logout from service - GET /api/v1/ahriman get current service status - POST /api/v1/ahriman update service status + GET /status-api/v1/ahriman get current service status + POST /status-api/v1/ahriman update service status - GET /api/v1/packages get all known packages - POST /api/v1/packages force update every package from repository + GET /status-api/v1/packages get all known packages + POST /status-api/v1/packages force update every package from repository - DELETE /api/v1/package/:base delete package base from status page - GET /api/v1/package/:base get package base status - POST /api/v1/package/:base update package base status + DELETE /status-api/v1/package/:base delete package base from status page + GET /status-api/v1/package/:base get package base status + POST /status-api/v1/package/:base update package base status - GET /api/v1/status get web service status itself + GET /status-api/v1/status get web service status itself :param application: web application instance """ @@ -60,14 +60,14 @@ def setup_routes(application: Application) -> None: application.router.add_post("/login", LoginView) application.router.add_post("/logout", LogoutView) - application.router.add_get("/api/v1/ahriman", AhrimanView, allow_head=True) - application.router.add_post("/api/v1/ahriman", AhrimanView) + application.router.add_get("/status-api/v1/ahriman", AhrimanView, allow_head=True) + application.router.add_post("/status-api/v1/ahriman", AhrimanView) - application.router.add_get("/api/v1/packages", PackagesView, allow_head=True) - application.router.add_post("/api/v1/packages", PackagesView) + application.router.add_get("/status-api/v1/packages", PackagesView, allow_head=True) + application.router.add_post("/status-api/v1/packages", PackagesView) - application.router.add_delete("/api/v1/packages/{package}", PackageView) - application.router.add_get("/api/v1/packages/{package}", PackageView, allow_head=True) - application.router.add_post("/api/v1/packages/{package}", PackageView) + application.router.add_delete("/status-api/v1/packages/{package}", PackageView) + application.router.add_get("/status-api/v1/packages/{package}", PackageView, allow_head=True) + application.router.add_post("/status-api/v1/packages/{package}", PackageView) - application.router.add_get("/api/v1/status", StatusView, allow_head=True) + application.router.add_get("/status-api/v1/status", StatusView, allow_head=True) diff --git a/tests/ahriman/core/status/test_web_client.py b/tests/ahriman/core/status/test_web_client.py index 36bc1c7b..c8348eab 100644 --- a/tests/ahriman/core/status/test_web_client.py +++ b/tests/ahriman/core/status/test_web_client.py @@ -18,7 +18,7 @@ def test_ahriman_url(web_client: WebClient) -> None: must generate service status url correctly """ assert web_client._ahriman_url.startswith(web_client.address) - assert web_client._ahriman_url.endswith("/api/v1/ahriman") + assert web_client._ahriman_url.endswith("/status-api/v1/ahriman") def test_status_url(web_client: WebClient) -> None: @@ -26,7 +26,7 @@ def test_status_url(web_client: WebClient) -> None: must generate service status url correctly """ assert web_client._status_url.startswith(web_client.address) - assert web_client._status_url.endswith("/api/v1/status") + assert web_client._status_url.endswith("/status-api/v1/status") def test_parse_address(configuration: Configuration) -> None: @@ -88,7 +88,7 @@ def test_package_url(web_client: WebClient, package_ahriman: Package) -> None: must generate package status correctly """ assert web_client._package_url(package_ahriman.base).startswith(web_client.address) - assert web_client._package_url(package_ahriman.base).endswith(f"/api/v1/packages/{package_ahriman.base}") + assert web_client._package_url(package_ahriman.base).endswith(f"/status-api/v1/packages/{package_ahriman.base}") def test_add(web_client: WebClient, package_ahriman: Package, mocker: MockerFixture) -> None: diff --git a/tests/ahriman/web/middlewares/test_auth_handler.py b/tests/ahriman/web/middlewares/test_auth_handler.py index a89f35f6..96b09db8 100644 --- a/tests/ahriman/web/middlewares/test_auth_handler.py +++ b/tests/ahriman/web/middlewares/test_auth_handler.py @@ -33,7 +33,7 @@ async def test_auth_handler_api(aiohttp_request: Any, auth: Auth, mocker: Mocker """ must ask for status permission for api calls """ - aiohttp_request = aiohttp_request._replace(path="/api") + aiohttp_request = aiohttp_request._replace(path="/status-api") request_handler = AsyncMock() mocker.patch("ahriman.core.auth.auth.Auth.is_safe_request", return_value=False) check_permission_mock = mocker.patch("aiohttp_security.check_permission") @@ -47,7 +47,7 @@ async def test_auth_handler_api_post(aiohttp_request: Any, auth: Auth, mocker: M """ must ask for status permission for api calls with POST """ - aiohttp_request = aiohttp_request._replace(path="/api", method="POST") + aiohttp_request = aiohttp_request._replace(path="/status-api", method="POST") request_handler = AsyncMock() mocker.patch("ahriman.core.auth.auth.Auth.is_safe_request", return_value=False) check_permission_mock = mocker.patch("aiohttp_security.check_permission") diff --git a/tests/ahriman/web/views/test_view_ahriman.py b/tests/ahriman/web/views/test_view_ahriman.py index 258dc635..489da68c 100644 --- a/tests/ahriman/web/views/test_view_ahriman.py +++ b/tests/ahriman/web/views/test_view_ahriman.py @@ -8,7 +8,7 @@ async def test_get(client: TestClient) -> None: """ must return valid service status """ - response = await client.get("/api/v1/ahriman") + response = await client.get("/status-api/v1/ahriman") status = BuildStatus.from_json(await response.json()) assert response.status == 200 @@ -20,10 +20,10 @@ async def test_post(client: TestClient) -> None: must update service status correctly """ payload = {"status": BuildStatusEnum.Success.value} - post_response = await client.post("/api/v1/ahriman", json=payload) + post_response = await client.post("/status-api/v1/ahriman", json=payload) assert post_response.status == 204 - response = await client.get("/api/v1/ahriman") + response = await client.get("/status-api/v1/ahriman") status = BuildStatus.from_json(await response.json()) assert response.status == 200 @@ -34,7 +34,7 @@ async def test_post_exception(client: TestClient) -> None: """ must raise exception on invalid payload """ - post_response = await client.post("/api/v1/ahriman", json={}) + post_response = await client.post("/status-api/v1/ahriman", json={}) assert post_response.status == 400 @@ -45,5 +45,5 @@ async def test_post_exception_inside(client: TestClient, mocker: MockerFixture) payload = {"status": BuildStatusEnum.Success.value} mocker.patch("ahriman.core.status.watcher.Watcher.update_self", side_effect=Exception()) - post_response = await client.post("/api/v1/ahriman", json=payload) + post_response = await client.post("/status-api/v1/ahriman", json=payload) assert post_response.status == 500 diff --git a/tests/ahriman/web/views/test_view_package.py b/tests/ahriman/web/views/test_view_package.py index d804a8a0..bb760890 100644 --- a/tests/ahriman/web/views/test_view_package.py +++ b/tests/ahriman/web/views/test_view_package.py @@ -8,12 +8,12 @@ async def test_get(client: TestClient, package_ahriman: Package, package_python_ """ must return status for specific package """ - await client.post(f"/api/v1/packages/{package_ahriman.base}", + await client.post(f"/status-api/v1/packages/{package_ahriman.base}", json={"status": BuildStatusEnum.Success.value, "package": package_ahriman.view()}) - await client.post(f"/api/v1/packages/{package_python_schedule.base}", + await client.post(f"/status-api/v1/packages/{package_python_schedule.base}", json={"status": BuildStatusEnum.Success.value, "package": package_python_schedule.view()}) - response = await client.get(f"/api/v1/packages/{package_ahriman.base}") + response = await client.get(f"/status-api/v1/packages/{package_ahriman.base}") assert response.status == 200 packages = [Package.from_json(item["package"]) for item in await response.json()] @@ -25,7 +25,7 @@ async def test_get_not_found(client: TestClient, package_ahriman: Package) -> No """ must return Not Found for unknown package """ - response = await client.get(f"/api/v1/packages/{package_ahriman.base}") + response = await client.get(f"/status-api/v1/packages/{package_ahriman.base}") assert response.status == 404 @@ -33,18 +33,18 @@ async def test_delete(client: TestClient, package_ahriman: Package, package_pyth """ must delete single base """ - await client.post(f"/api/v1/packages/{package_ahriman.base}", + await client.post(f"/status-api/v1/packages/{package_ahriman.base}", json={"status": BuildStatusEnum.Success.value, "package": package_ahriman.view()}) - await client.post(f"/api/v1/packages/{package_python_schedule.base}", + await client.post(f"/status-api/v1/packages/{package_python_schedule.base}", json={"status": BuildStatusEnum.Success.value, "package": package_python_schedule.view()}) - response = await client.delete(f"/api/v1/packages/{package_ahriman.base}") + response = await client.delete(f"/status-api/v1/packages/{package_ahriman.base}") assert response.status == 204 - response = await client.get(f"/api/v1/packages/{package_ahriman.base}") + response = await client.get(f"/status-api/v1/packages/{package_ahriman.base}") assert response.status == 404 - response = await client.get(f"/api/v1/packages/{package_python_schedule.base}") + response = await client.get(f"/status-api/v1/packages/{package_python_schedule.base}") assert response.status == 200 @@ -52,16 +52,16 @@ async def test_delete_unknown(client: TestClient, package_ahriman: Package, pack """ must suppress errors on unknown package deletion """ - await client.post(f"/api/v1/packages/{package_python_schedule.base}", + await client.post(f"/status-api/v1/packages/{package_python_schedule.base}", json={"status": BuildStatusEnum.Success.value, "package": package_python_schedule.view()}) - response = await client.delete(f"/api/v1/packages/{package_ahriman.base}") + response = await client.delete(f"/status-api/v1/packages/{package_ahriman.base}") assert response.status == 204 - response = await client.get(f"/api/v1/packages/{package_ahriman.base}") + response = await client.get(f"/status-api/v1/packages/{package_ahriman.base}") assert response.status == 404 - response = await client.get(f"/api/v1/packages/{package_python_schedule.base}") + response = await client.get(f"/status-api/v1/packages/{package_python_schedule.base}") assert response.status == 200 @@ -70,11 +70,11 @@ async def test_post(client: TestClient, package_ahriman: Package) -> None: must update package status """ post_response = await client.post( - f"/api/v1/packages/{package_ahriman.base}", + f"/status-api/v1/packages/{package_ahriman.base}", json={"status": BuildStatusEnum.Success.value, "package": package_ahriman.view()}) assert post_response.status == 204 - response = await client.get(f"/api/v1/packages/{package_ahriman.base}") + response = await client.get(f"/status-api/v1/packages/{package_ahriman.base}") assert response.status == 200 @@ -82,7 +82,7 @@ async def test_post_exception(client: TestClient, package_ahriman: Package) -> N """ must raise exception on invalid payload """ - post_response = await client.post(f"/api/v1/packages/{package_ahriman.base}", json={}) + post_response = await client.post(f"/status-api/v1/packages/{package_ahriman.base}", json={}) assert post_response.status == 400 @@ -91,15 +91,15 @@ async def test_post_light(client: TestClient, package_ahriman: Package) -> None: must update package status only """ post_response = await client.post( - f"/api/v1/packages/{package_ahriman.base}", + f"/status-api/v1/packages/{package_ahriman.base}", json={"status": BuildStatusEnum.Unknown.value, "package": package_ahriman.view()}) assert post_response.status == 204 post_response = await client.post( - f"/api/v1/packages/{package_ahriman.base}", json={"status": BuildStatusEnum.Success.value}) + f"/status-api/v1/packages/{package_ahriman.base}", json={"status": BuildStatusEnum.Success.value}) assert post_response.status == 204 - response = await client.get(f"/api/v1/packages/{package_ahriman.base}") + response = await client.get(f"/status-api/v1/packages/{package_ahriman.base}") assert response.status == 200 statuses = { Package.from_json(item["package"]).base: BuildStatus.from_json(item["status"]) @@ -113,5 +113,5 @@ async def test_post_not_found(client: TestClient, package_ahriman: Package) -> N must raise exception on status update for unknown package """ post_response = await client.post( - f"/api/v1/packages/{package_ahriman.base}", json={"status": BuildStatusEnum.Success.value}) + f"/status-api/v1/packages/{package_ahriman.base}", json={"status": BuildStatusEnum.Success.value}) assert post_response.status == 400 diff --git a/tests/ahriman/web/views/test_view_packages.py b/tests/ahriman/web/views/test_view_packages.py index a1691b65..c1d18b0e 100644 --- a/tests/ahriman/web/views/test_view_packages.py +++ b/tests/ahriman/web/views/test_view_packages.py @@ -9,12 +9,12 @@ async def test_get(client: TestClient, package_ahriman: Package, package_python_ """ must return status for all packages """ - await client.post(f"/api/v1/packages/{package_ahriman.base}", + await client.post(f"/status-api/v1/packages/{package_ahriman.base}", json={"status": BuildStatusEnum.Success.value, "package": package_ahriman.view()}) - await client.post(f"/api/v1/packages/{package_python_schedule.base}", + await client.post(f"/status-api/v1/packages/{package_python_schedule.base}", json={"status": BuildStatusEnum.Success.value, "package": package_python_schedule.view()}) - response = await client.get("/api/v1/packages") + response = await client.get("/status-api/v1/packages") assert response.status == 200 packages = [Package.from_json(item["package"]) for item in await response.json()] @@ -27,6 +27,6 @@ async def test_post(client: TestClient, mocker: MockerFixture) -> None: must be able to reload packages """ load_mock = mocker.patch("ahriman.core.status.watcher.Watcher.load") - response = await client.post("/api/v1/packages") + response = await client.post("/status-api/v1/packages") assert response.status == 204 load_mock.assert_called_once() diff --git a/tests/ahriman/web/views/test_view_status.py b/tests/ahriman/web/views/test_view_status.py index e5be2666..e7e7fd1c 100644 --- a/tests/ahriman/web/views/test_view_status.py +++ b/tests/ahriman/web/views/test_view_status.py @@ -10,10 +10,10 @@ async def test_get(client: TestClient, package_ahriman: Package) -> None: """ must generate web service status correctly """ - await client.post(f"/api/v1/packages/{package_ahriman.base}", + await client.post(f"/status-api/v1/packages/{package_ahriman.base}", json={"status": BuildStatusEnum.Success.value, "package": package_ahriman.view()}) - response = await client.get("/api/v1/status") + response = await client.get("/status-api/v1/status") assert response.status == 200 json = await response.json()