22
33"""
44
5- import functools
65import logging
76from typing import Any
87
2221 parse_request_path_parameters_as ,
2322 parse_request_query_parameters_as ,
2423)
25- from servicelib .aiohttp .typing_extension import Handler
2624from servicelib .mimetype_constants import MIMETYPE_APPLICATION_JSON
2725from servicelib .rest_constants import RESPONSE_MODEL_POLICY
2826
3129from ..security .decorators import permission_required
3230from ..utils_aiohttp import envelope_json_response
3331from . import _comments_api , projects_service
32+ from ._common .exceptions_handlers import handle_plugin_requests_exceptions
3433from ._common .models import RequestContext
35- from .exceptions import ProjectInvalidRightsError , ProjectNotFoundError
3634
3735_logger = logging .getLogger (__name__ )
3836
39-
40- def _handle_project_comments_exceptions (handler : Handler ):
41- @functools .wraps (handler )
42- async def wrapper (request : web .Request ) -> web .StreamResponse :
43- try :
44- return await handler (request )
45-
46- except ProjectNotFoundError as exc :
47- raise web .HTTPNotFound (reason = f"{ exc } " ) from exc
48- except ProjectInvalidRightsError as exc :
49- raise web .HTTPForbidden (reason = f"{ exc } " ) from exc
50-
51- return wrapper
52-
53-
5437#
5538# projects/*/comments COLLECTION -------------------------
5639#
@@ -79,7 +62,7 @@ class _ProjectCommentsBodyParams(BaseModel):
7962)
8063@login_required
8164@permission_required ("project.read" )
82- @_handle_project_comments_exceptions
65+ @handle_plugin_requests_exceptions
8366async def create_project_comment (request : web .Request ):
8467 req_ctx = RequestContext .model_validate (request )
8568 path_params = parse_request_path_parameters_as (_ProjectCommentsPathParams , request )
@@ -119,7 +102,7 @@ class _ListProjectCommentsQueryParams(BaseModel):
119102@routes .get (f"/{ VTAG } /projects/{{project_uuid}}/comments" , name = "list_project_comments" )
120103@login_required
121104@permission_required ("project.read" )
122- @_handle_project_comments_exceptions
105+ @handle_plugin_requests_exceptions
123106async def list_project_comments (request : web .Request ):
124107 req_ctx = RequestContext .model_validate (request )
125108 path_params = parse_request_path_parameters_as (_ProjectCommentsPathParams , request )
@@ -168,6 +151,7 @@ async def list_project_comments(request: web.Request):
168151)
169152@login_required
170153@permission_required ("project.read" )
154+ @handle_plugin_requests_exceptions
171155async def update_project_comment (request : web .Request ):
172156 req_ctx = RequestContext .model_validate (request )
173157 path_params = parse_request_path_parameters_as (
@@ -183,12 +167,13 @@ async def update_project_comment(request: web.Request):
183167 include_state = False ,
184168 )
185169
186- return await _comments_api .update_project_comment (
170+ updated_comment = await _comments_api .update_project_comment (
187171 request = request ,
188172 comment_id = path_params .comment_id ,
189173 project_uuid = path_params .project_uuid ,
190174 contents = body_params .contents ,
191175 )
176+ return envelope_json_response (updated_comment )
192177
193178
194179@routes .delete (
@@ -197,7 +182,7 @@ async def update_project_comment(request: web.Request):
197182)
198183@login_required
199184@permission_required ("project.read" )
200- @_handle_project_comments_exceptions
185+ @handle_plugin_requests_exceptions
201186async def delete_project_comment (request : web .Request ):
202187 req_ctx = RequestContext .model_validate (request )
203188 path_params = parse_request_path_parameters_as (
@@ -225,7 +210,7 @@ async def delete_project_comment(request: web.Request):
225210)
226211@login_required
227212@permission_required ("project.read" )
228- @_handle_project_comments_exceptions
213+ @handle_plugin_requests_exceptions
229214async def get_project_comment (request : web .Request ):
230215 req_ctx = RequestContext .model_validate (request )
231216 path_params = parse_request_path_parameters_as (
@@ -240,7 +225,8 @@ async def get_project_comment(request: web.Request):
240225 include_state = False ,
241226 )
242227
243- return await _comments_api .get_project_comment (
228+ comment = await _comments_api .get_project_comment (
244229 request = request ,
245230 comment_id = path_params .comment_id ,
246231 )
232+ return envelope_json_response (comment )
0 commit comments