Skip to content

Commit 559a82e

Browse files
committed
trash
1 parent 4ae1b85 commit 559a82e

File tree

5 files changed

+59
-10
lines changed

5 files changed

+59
-10
lines changed

services/web/server/src/simcore_service_webserver/login/decorators.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
import functools
22
import inspect
3+
from typing import cast
34

45
from aiohttp import web
6+
from models_library.users import UserID
57
from servicelib.aiohttp.typing_extension import HandlerAnyReturn
68
from servicelib.request_keys import RQT_USERID_KEY
79

@@ -69,3 +71,7 @@ async def _wrapper(request: web.Request):
6971
return await handler(request)
7072

7173
return _wrapper
74+
75+
76+
def get_user_id(request: web.Request) -> UserID:
77+
return cast(UserID, request[RQT_USERID_KEY])

services/web/server/src/simcore_service_webserver/projects/_trash_api.py

Lines changed: 0 additions & 10 deletions
This file was deleted.

services/web/server/src/simcore_service_webserver/trash/__init__.py

Whitespace-only changes.
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
from aiohttp import web
2+
from models_library.products import ProductName
3+
from models_library.users import UserID
4+
5+
6+
async def empty_trash(app: web.Application, product_name: ProductName, user_id: UserID):
7+
raise NotImplementedError
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
import functools
2+
3+
from aiohttp import web
4+
from servicelib.aiohttp import status
5+
from servicelib.aiohttp.typing_extension import Handler
6+
from simcore_postgres_database.utils_tags import (
7+
TagNotFoundError,
8+
TagOperationNotAllowedError,
9+
)
10+
from simcore_service_webserver.products.api import get_product_name
11+
12+
from .._meta import API_VTAG as VTAG
13+
from ..login.decorators import get_user_id, login_required
14+
from ..security.decorators import permission_required
15+
from . import _api
16+
17+
18+
def _handle_trash_exceptions(handler: Handler):
19+
@functools.wraps(handler)
20+
async def wrapper(request: web.Request) -> web.StreamResponse:
21+
try:
22+
return await handler(request)
23+
24+
except TagNotFoundError as exc:
25+
raise web.HTTPNotFound(reason=f"{exc}") from exc
26+
27+
except TagOperationNotAllowedError as exc:
28+
raise web.HTTPForbidden(reason=f"{exc}") from exc
29+
30+
return wrapper
31+
32+
33+
routes = web.RouteTableDef()
34+
35+
36+
@routes.delete(f"/{VTAG}/trash", name="empty_trash")
37+
@login_required
38+
@permission_required("project.delete")
39+
@_handle_trash_exceptions
40+
async def empty_trash(request: web.Request):
41+
user_id = get_user_id(request)
42+
product_name = get_product_name(request)
43+
44+
await _api.empty_trash(request.app, product_name=product_name, user_id=user_id)
45+
46+
return web.json_response(status=status.HTTP_204_NO_CONTENT)

0 commit comments

Comments
 (0)