22
33"""
44
5- import functools
65import logging
76
87from aiohttp import web
1312from models_library .resource_tracker import PricingPlanId , PricingUnitId
1413from pydantic import BaseModel , ConfigDict
1514from servicelib .aiohttp .requests_validation import parse_request_path_parameters_as
16- from servicelib .aiohttp .typing_extension import Handler
1715
1816from .._meta import API_VTAG
1917from ..login .decorators import login_required
2018from ..resource_usage import service as rut_api
2119from ..security .decorators import permission_required
2220from ..utils_aiohttp import envelope_json_response
2321from . import projects_service
22+ from ._common .exceptions_handlers import handle_plugin_requests_exceptions
2423from ._common .models import RequestContext
2524from ._nodes_handlers import NodePathParams
2625from .db import ProjectDBAPI
27- from .exceptions import ProjectInvalidRightsError , ProjectNotFoundError
2826
2927_logger = logging .getLogger (__name__ )
3028
@@ -37,21 +35,6 @@ class PricingUnitNotFoundError(PricingUnitError):
3735 msg_template = "Pricing unit not found"
3836
3937
40- def _handle_projects_nodes_pricing_unit_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-
49- except (PricingUnitNotFoundError , ProjectInvalidRightsError ) as exc :
50- raise web .HTTPForbidden (reason = f"{ exc } " ) from exc
51-
52- return wrapper
53-
54-
5538routes = web .RouteTableDef ()
5639
5740
@@ -61,7 +44,7 @@ async def wrapper(request: web.Request) -> web.StreamResponse:
6144)
6245@login_required
6346@permission_required ("project.wallet.*" )
64- @_handle_projects_nodes_pricing_unit_exceptions
47+ @handle_plugin_requests_exceptions
6548async def get_project_node_pricing_unit (request : web .Request ):
6649 db : ProjectDBAPI = ProjectDBAPI .get_from_app_context (request .app )
6750 req_ctx = RequestContext .model_validate (request )
@@ -108,7 +91,7 @@ class _ProjectNodePricingUnitPathParams(BaseModel):
10891)
10992@login_required
11093@permission_required ("project.wallet.*" )
111- @_handle_projects_nodes_pricing_unit_exceptions
94+ @handle_plugin_requests_exceptions
11295async def connect_pricing_unit_to_project_node (request : web .Request ):
11396 db : ProjectDBAPI = ProjectDBAPI .get_from_app_context (request .app )
11497 req_ctx = RequestContext .model_validate (request )
0 commit comments