Skip to content

Commit 0c0312a

Browse files
committed
add endpoint for releasing a checked out item
1 parent 97f8d7d commit 0c0312a

File tree

4 files changed

+39
-6
lines changed

4 files changed

+39
-6
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from typing import Annotated, cast
2+
3+
from fastapi import Depends, FastAPI
4+
from servicelib.fastapi.dependencies import get_app
5+
6+
from ...services_rpc.resource_usage_tracker import ResourceUsageTrackerClient
7+
8+
9+
async def get_resource_usage_tracker_client(
10+
app: Annotated[FastAPI, Depends(get_app)]
11+
) -> ResourceUsageTrackerClient:
12+
assert app.state.resource_usage_tracker_rpc_client # nosec
13+
return cast(ResourceUsageTrackerClient, app.state.resource_usage_tracker_rpc_client)

services/api-server/src/simcore_service_api_server/api/routes/licensed_items.py

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,21 @@
11
from typing import Annotated, Any
22

3-
from fastapi import APIRouter, Depends, status
3+
from fastapi import APIRouter, Depends, HTTPException, status
44
from models_library.licensed_items import LicensedItemID
5+
from models_library.resource_tracker_licensed_items_checkouts import (
6+
LicensedItemCheckoutID,
7+
)
58
from pydantic import PositiveInt
9+
from simcore_service_api_server.api.dependencies.resource_usage_tracker_rpc import (
10+
get_resource_usage_tracker_client,
11+
)
612

713
from ...api.dependencies.authentication import get_current_user_id, get_product_name
814
from ...api.dependencies.webserver_rpc import get_wb_api_rpc_client
915
from ...exceptions.service_errors_utils import DEFAULT_BACKEND_SERVICE_STATUS_CODES
1016
from ...models.pagination import Page, PaginationParams
1117
from ...models.schemas.model_adapter import LicensedItemCheckoutGet, LicensedItemGet
18+
from ...services_rpc.resource_usage_tracker import ResourceUsageTrackerClient
1219
from ...services_rpc.wb_api_server import WbApiRpcClient
1320

1421
router = APIRouter()
@@ -37,7 +44,7 @@ async def get_licensed_items(
3744

3845

3946
@router.post(
40-
"{licensed_item_id}/release",
47+
"{licensed_item_id}/checked_out_items/{licensed_item_checkout_id}/release",
4148
response_model=LicensedItemCheckoutGet,
4249
status_code=status.HTTP_200_OK,
4350
responses=_LICENSE_ITEMS_STATUS_CODES,
@@ -46,12 +53,24 @@ async def get_licensed_items(
4653
)
4754
async def release_licensed_item(
4855
web_api_rpc: Annotated[WbApiRpcClient, Depends(get_wb_api_rpc_client)],
56+
rut_rpc: Annotated[
57+
ResourceUsageTrackerClient, Depends(get_resource_usage_tracker_client)
58+
],
4959
product_name: Annotated[str, Depends(get_product_name)],
5060
user_id: Annotated[PositiveInt, Depends(get_current_user_id)],
5161
licensed_item_id: LicensedItemID,
62+
licensed_item_checkout_id: LicensedItemCheckoutID,
5263
):
64+
_licensed_item_checkout = await rut_rpc.get_licensed_item_checkout(
65+
product_name=product_name, licensed_item_checkout_id=licensed_item_checkout_id
66+
)
67+
if _licensed_item_checkout.licensed_item_id != licensed_item_id:
68+
raise HTTPException(
69+
status_code=status.HTTP_422_UNPROCESSABLE_ENTITY,
70+
detail=f"{licensed_item_id} is not the license_item_id associated with the checked out item {licensed_item_checkout_id}",
71+
)
5372
return await web_api_rpc.release_licensed_item_for_wallet(
5473
product_name=product_name,
5574
user_id=user_id,
56-
licensed_item_checkout_id=licensed_item_id,
75+
licensed_item_checkout_id=licensed_item_checkout_id,
5776
)

services/api-server/src/simcore_service_api_server/services_http/rabbitmq.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
from servicelib.rabbitmq import RabbitMQClient, wait_till_rabbitmq_responsive
55
from servicelib.rabbitmq._client_rpc import RabbitMQRPCClient
66
from settings_library.rabbit import RabbitSettings
7-
from simcore_service_api_server.api.dependencies.rabbitmq import get_rabbitmq_rpc_client
8-
from simcore_service_api_server.services_rpc import wb_api_server
97

8+
from ..api.dependencies.rabbitmq import get_rabbitmq_rpc_client
109
from ..core.health_checker import ApiServerHealthChecker
1110
from ..services_http.log_streaming import LogDistributor
11+
from ..services_rpc import resource_usage_tracker, wb_api_server
1212

1313
_logger = logging.getLogger(__name__)
1414

@@ -39,6 +39,7 @@ async def _on_startup() -> None:
3939
app.state.settings.API_SERVER_HEALTH_CHECK_TASK_PERIOD_SECONDS
4040
)
4141
wb_api_server.setup(app, get_rabbitmq_rpc_client(app))
42+
resource_usage_tracker.setup(app, get_rabbitmq_rpc_client(app))
4243

4344
async def _on_shutdown() -> None:
4445
if app.state.health_checker:
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,6 @@ async def get_licensed_item_checkout(
4444

4545

4646
def setup(app: FastAPI, rabbitmq_rmp_client: RabbitMQRPCClient):
47-
app.state.wb_api_rpc_client = ResourceUsageTrackerClient(
47+
app.state.resource_usage_tracker_rpc_client = ResourceUsageTrackerClient(
4848
_client=rabbitmq_rmp_client
4949
)

0 commit comments

Comments
 (0)