Skip to content

Commit 77be4fc

Browse files
committed
test create
1 parent d976a9d commit 77be4fc

File tree

3 files changed

+78
-27
lines changed

3 files changed

+78
-27
lines changed

services/web/server/src/simcore_service_webserver/licenses/_licensed_items_repository.py

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,25 +44,26 @@ async def create(
4444
licensed_resource_name: str,
4545
licensed_resource_type: LicensedResourceType,
4646
licensed_resource_data: dict[str, Any] | None = None,
47-
licensed_key: str | None = None,
47+
license_key: str | None = None,
4848
product_name: ProductName | None = None,
4949
pricing_plan_id: PricingPlanId | None = None,
5050
) -> LicensedItemDB:
51-
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
52-
result = await conn.execute(
53-
licensed_items.insert()
54-
.values(
55-
licensed_resource_name=licensed_resource_name,
56-
licensed_resource_type=licensed_resource_type,
57-
licensed_resource_data=licensed_resource_data,
58-
licensed_key=licensed_key,
59-
pricing_plan_id=pricing_plan_id,
60-
product_name=product_name,
61-
created=func.now(),
62-
modified=func.now(),
63-
)
64-
.returning(*_SELECTION_ARGS)
51+
query = (
52+
licensed_items.insert()
53+
.values(
54+
licensed_resource_name=licensed_resource_name,
55+
licensed_resource_type=licensed_resource_type,
56+
licensed_resource_data=licensed_resource_data,
57+
license_key=license_key,
58+
pricing_plan_id=pricing_plan_id,
59+
product_name=product_name,
60+
created=func.now(),
61+
modified=func.now(),
6562
)
63+
.returning(*_SELECTION_ARGS)
64+
)
65+
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
66+
result = await conn.execute(query)
6667
row = result.one()
6768
return LicensedItemDB.model_validate(row)
6869

services/web/server/src/simcore_service_webserver/licenses/_licensed_items_service.py

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,19 @@
88
LicensedItemGet,
99
LicensedItemGetPage,
1010
)
11-
from models_library.licensed_items import LicensedItemID
11+
from models_library.licensed_items import (
12+
LicensedItemDB,
13+
LicensedItemID,
14+
LicensedItemUpdateDB,
15+
LicensedResourceType,
16+
)
1217
from models_library.products import ProductName
1318
from models_library.resource_tracker_licensed_items_purchases import (
1419
LicensedItemsPurchasesCreate,
1520
)
1621
from models_library.rest_ordering import OrderBy
1722
from models_library.users import UserID
18-
from pydantic import NonNegativeInt
23+
from pydantic import BaseModel, NonNegativeInt
1924
from servicelib.rabbitmq.rpc_interfaces.resource_usage_tracker import (
2025
licensed_items_purchases,
2126
)
@@ -32,6 +37,27 @@
3237
_logger = logging.getLogger(__name__)
3338

3439

40+
async def create_licensed_item_from_resource(
41+
app: web.Application,
42+
*,
43+
licensed_resource_name: str,
44+
licensed_resource_type: LicensedResourceType,
45+
licensed_resource_data: BaseModel,
46+
license_key: str | None,
47+
) -> LicensedItemDB:
48+
return await _licensed_items_repository.create(
49+
app,
50+
licensed_resource_name=licensed_resource_name,
51+
licensed_resource_type=licensed_resource_type,
52+
licensed_resource_data=licensed_resource_data.model_dump(
53+
mode="json", exclude_unset=True
54+
),
55+
license_key=license_key,
56+
product_name=None,
57+
pricing_plan_id=None,
58+
)
59+
60+
3561
async def get_licensed_item(
3662
app: web.Application,
3763
*,
@@ -71,6 +97,34 @@ async def list_licensed_items(
7197
)
7298

7399

100+
async def trash_licensed_item(
101+
app: web.Application,
102+
*,
103+
product_name: ProductName,
104+
licensed_item_id: LicensedItemID,
105+
):
106+
await _licensed_items_repository.update(
107+
app,
108+
product_name=product_name,
109+
licensed_item_id=licensed_item_id,
110+
updates=LicensedItemUpdateDB(trash=True),
111+
)
112+
113+
114+
async def untrash_licensed_item(
115+
app: web.Application,
116+
*,
117+
product_name: ProductName,
118+
licensed_item_id: LicensedItemID,
119+
):
120+
await _licensed_items_repository.update(
121+
app,
122+
product_name=product_name,
123+
licensed_item_id=licensed_item_id,
124+
updates=LicensedItemUpdateDB(trash=True),
125+
)
126+
127+
74128
async def purchase_licensed_item(
75129
app: web.Application,
76130
*,

services/web/server/tests/unit/with_dbs/04/licenses/test_itis_vip_service.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from servicelib.aiohttp import status
1919
from simcore_service_webserver.licenses import (
2020
_itis_vip_service,
21-
_licensed_items_repository,
21+
_licensed_items_service,
2222
)
2323
from simcore_service_webserver.licenses._itis_vip_models import (
2424
AvailableDownload,
@@ -147,16 +147,12 @@ async def test_sync_itis_vip_as_licensed_items(
147147
)
148148
assert items[0].features["functionality"] == "Posable"
149149

150-
for item in items:
150+
for vip_item in items:
151151
# TODO: how to update to minimize collisions? one by one?
152-
await _licensed_items_repository.create(
152+
await _licensed_items_service.create_licensed_item_from_resource(
153153
client.app,
154-
licensed_resource_name=f"{category}/{item.id}",
154+
licensed_resource_name=f"{category}/{vip_item.id}",
155155
licensed_resource_type=LicensedResourceType.VIP_MODEL,
156-
licensed_resource_data=item.model_dump(
157-
mode="json", exclude_unset=True
158-
),
159-
licensed_key=item.license_key,
160-
product_name=None,
161-
pricing_plan_id=None,
156+
licensed_resource_data=vip_item,
157+
license_key=vip_item.license_key,
162158
)

0 commit comments

Comments
 (0)