Skip to content

Commit 504d2c8

Browse files
webserver functionality
1 parent c4e56df commit 504d2c8

File tree

7 files changed

+142
-20
lines changed

7 files changed

+142
-20
lines changed

packages/models-library/src/models_library/api_schemas_resource_usage_tracker/licensed_items_usages.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,5 +48,5 @@ class LicensedItemsUsagesPage(NamedTuple):
4848
total: PositiveInt
4949

5050

51-
class LicenseItemCheckoutGet(BaseModel):
51+
class LicenseCheckoutGet(BaseModel):
5252
checkout_id: LicenseCheckoutID # This is a licensed_item_usage_id generated in the `resource_tracker_licensed_items_usages` table

packages/models-library/src/models_library/api_schemas_webserver/licensed_items_purchases.py

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,16 +2,14 @@
22
from decimal import Decimal
33
from typing import NamedTuple
44

5-
from models_library.licensed_items import LicensedItemID
6-
from models_library.products import ProductName
7-
from models_library.resource_tracker import PricingUnitCostId
8-
from models_library.resource_tracker_licensed_items_purchases import (
9-
LicensedItemPurchaseID,
10-
)
11-
from models_library.users import UserID
12-
from models_library.wallets import WalletID
135
from pydantic import PositiveInt
146

7+
from ..licensed_items import LicensedItemID
8+
from ..products import ProductName
9+
from ..resource_tracker import PricingUnitCostId
10+
from ..resource_tracker_licensed_items_purchases import LicensedItemPurchaseID
11+
from ..users import UserID
12+
from ..wallets import WalletID
1513
from ._base import OutputSchema
1614

1715

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
from datetime import datetime
2+
from typing import NamedTuple
3+
4+
from pydantic import BaseModel, PositiveInt
5+
6+
from ..api_schemas_resource_usage_tracker.licensed_items_usages import LicenseCheckoutID
7+
from ..licensed_items import LicensedItemID
8+
from ..products import ProductName
9+
from ..resource_tracker_licensed_items_usages import LicensedItemUsageID
10+
from ..users import UserID
11+
from ..wallets import WalletID
12+
from ._base import OutputSchema
13+
14+
15+
class LicensedItemUsageGet(OutputSchema):
16+
licensed_item_usage_id: LicensedItemUsageID
17+
licensed_item_id: LicensedItemID
18+
wallet_id: WalletID
19+
user_id: UserID
20+
product_name: ProductName
21+
started_at: datetime
22+
stopped_at: datetime | None
23+
num_of_seats: int
24+
25+
26+
class LicensedItemUsageGetPage(NamedTuple):
27+
items: list[LicensedItemUsageGet]
28+
total: PositiveInt
29+
30+
31+
class LicenseCheckoutGet(BaseModel):
32+
checkout_id: LicenseCheckoutID

packages/service-library/src/servicelib/rabbitmq/rpc_interfaces/resource_usage_tracker/licensed_items_usages.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
RESOURCE_USAGE_TRACKER_RPC_NAMESPACE,
66
)
77
from models_library.api_schemas_resource_usage_tracker.licensed_items_usages import (
8+
LicenseCheckoutGet,
89
LicenseCheckoutID,
910
LicensedItemUsageGet,
10-
LicenseItemCheckoutGet,
1111
)
1212
from models_library.licensed_items import LicensedItemID
1313
from models_library.products import ProductName
@@ -81,8 +81,8 @@ async def checkout_licensed_item(
8181
service_run_id: ServiceRunId,
8282
user_id: UserID,
8383
user_email: str,
84-
) -> LicenseItemCheckoutGet:
85-
result: LicenseItemCheckoutGet = await rabbitmq_rpc_client.request(
84+
) -> LicenseCheckoutGet:
85+
result: LicenseCheckoutGet = await rabbitmq_rpc_client.request(
8686
RESOURCE_USAGE_TRACKER_RPC_NAMESPACE,
8787
_RPC_METHOD_NAME_ADAPTER.validate_python("checkout_licensed_item"),
8888
licensed_item_id=licensed_item_id,
@@ -94,7 +94,7 @@ async def checkout_licensed_item(
9494
user_email=user_email,
9595
timeout_s=_DEFAULT_TIMEOUT_S,
9696
)
97-
assert isinstance(result, LicenseItemCheckoutGet) # nosec
97+
assert isinstance(result, LicenseCheckoutGet) # nosec
9898
return result
9999

100100

services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/api/rpc/_licensed_items_usages.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from fastapi import FastAPI
22
from models_library.api_schemas_resource_usage_tracker.licensed_items_usages import (
3+
LicenseCheckoutGet,
34
LicenseCheckoutID,
45
LicensedItemUsageGet,
5-
LicenseItemCheckoutGet,
66
)
77
from models_library.licensed_items import LicensedItemID
88
from models_library.products import ProductName
@@ -27,7 +27,7 @@ async def checkout_licensed_item(
2727
service_run_id: ServiceRunId,
2828
user_id: UserID,
2929
user_email: str,
30-
) -> LicenseItemCheckoutGet:
30+
) -> LicenseCheckoutGet:
3131
return await licensed_items_usages.checkout_licensed_item(
3232
db_engine=app.state.engine,
3333
licensed_item_id=licensed_item_id,

services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/services/licensed_items_usages.py

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33

44
from fastapi import Depends
55
from models_library.api_schemas_resource_usage_tracker.licensed_items_usages import (
6+
LicenseCheckoutGet,
67
LicenseCheckoutID,
78
LicensedItemsUsagesPage,
89
LicensedItemUsageGet,
9-
LicenseItemCheckoutGet,
1010
)
1111
from models_library.licensed_items import LicensedItemID
1212
from models_library.products import ProductName
@@ -100,7 +100,7 @@ async def checkout_licensed_item(
100100
service_run_id: ServiceRunId,
101101
user_id: UserID,
102102
user_email: str,
103-
) -> LicenseItemCheckoutGet:
103+
) -> LicenseCheckoutGet:
104104

105105
_active_purchased_seats: int = await licensed_items_purchases_db.get_active_purchased_seats_for_item_and_wallet(
106106
db_engine,
@@ -150,9 +150,7 @@ async def checkout_licensed_item(
150150
)
151151

152152
# Return checkout ID
153-
return LicenseItemCheckoutGet(
154-
checkout_id=license_item_usage_db.licensed_item_usage_id
155-
)
153+
return LicenseCheckoutGet(checkout_id=license_item_usage_db.licensed_item_usage_id)
156154

157155

158156
async def release_licensed_item(
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
from aiohttp import web
2+
from models_library.api_schemas_resource_usage_tracker import (
3+
licensed_items_usages as rut_licensed_items_usages,
4+
)
5+
from models_library.api_schemas_webserver import (
6+
licensed_items_usages as webserver_licensed_items_usages,
7+
)
8+
from models_library.licensed_items import LicensedItemID
9+
from models_library.products import ProductName
10+
from models_library.resource_tracker import ServiceRunId
11+
from models_library.users import UserID
12+
from models_library.wallets import WalletID
13+
from servicelib.rabbitmq.rpc_interfaces.resource_usage_tracker import (
14+
licensed_items_usages,
15+
)
16+
17+
from ..rabbitmq import get_rabbitmq_rpc_client
18+
from ..wallets.api import get_wallet_by_user
19+
20+
21+
async def checkout_licensed_item_for_wallet(
22+
app: web.Application,
23+
licensed_item_id: LicensedItemID,
24+
wallet_id: WalletID,
25+
product_name: ProductName,
26+
num_of_seats: int,
27+
service_run_id: ServiceRunId,
28+
user_id: UserID,
29+
user_email: str,
30+
) -> webserver_licensed_items_usages.LicenseCheckoutGet:
31+
# Check whether user has access to the wallet
32+
await get_wallet_by_user(
33+
app,
34+
user_id=user_id,
35+
wallet_id=wallet_id,
36+
product_name=product_name,
37+
)
38+
39+
rpc_client = get_rabbitmq_rpc_client(app)
40+
license_checkout_get: rut_licensed_items_usages.LicenseCheckoutGet = (
41+
await licensed_items_usages.checkout_licensed_item(
42+
rpc_client,
43+
licensed_item_id=licensed_item_id,
44+
wallet_id=wallet_id,
45+
product_name=product_name,
46+
num_of_seats=num_of_seats,
47+
service_run_id=service_run_id,
48+
user_id=user_id,
49+
user_email=user_email,
50+
)
51+
)
52+
53+
return webserver_licensed_items_usages.LicenseCheckoutGet(
54+
checkout_id=license_checkout_get.checkout_id
55+
)
56+
57+
58+
async def release_licensed_item_for_wallet(
59+
app: web.Application,
60+
product_name: ProductName,
61+
user_id: UserID,
62+
checkout_id: rut_licensed_items_usages.LicenseCheckoutID,
63+
) -> webserver_licensed_items_usages.LicensedItemUsageGet:
64+
rpc_client = get_rabbitmq_rpc_client(app)
65+
licensed_item_get: rut_licensed_items_usages.LicensedItemUsageGet = (
66+
await licensed_items_usages.release_licensed_item(
67+
rpc_client,
68+
product_name=product_name,
69+
checkout_id=checkout_id,
70+
)
71+
)
72+
73+
# Check whether user has access to the wallet
74+
await get_wallet_by_user(
75+
app,
76+
user_id=user_id,
77+
wallet_id=licensed_item_get.wallet_id,
78+
product_name=product_name,
79+
)
80+
81+
return webserver_licensed_items_usages.LicensedItemUsageGet(
82+
licensed_item_purchase_id=licensed_item_get.licensed_item_purchase_id,
83+
product_name=licensed_item_get.product_name,
84+
licensed_item_id=licensed_item_get.licensed_item_id,
85+
wallet_id=licensed_item_get.wallet_id,
86+
pricing_unit_cost_id=licensed_item_get.pricing_unit_cost_id,
87+
pricing_unit_cost=licensed_item_get.pricing_unit_cost,
88+
start_at=licensed_item_get.start_at,
89+
expire_at=licensed_item_get.expire_at,
90+
num_of_seats=licensed_item_get.num_of_seats,
91+
purchased_by_user=licensed_item_get.purchased_by_user,
92+
purchased_at=licensed_item_get.purchased_at,
93+
modified_at=licensed_item_get.modified,
94+
)

0 commit comments

Comments
 (0)