Skip to content

Commit a9ac3a4

Browse files
fix
1 parent a4f45c6 commit a9ac3a4

File tree

9 files changed

+24
-64
lines changed

9 files changed

+24
-64
lines changed

api/specs/web-server/_licensed_items.py

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -48,16 +48,6 @@ async def list_licensed_items(
4848
...
4949

5050

51-
# @router.get(
52-
# "/catalog/licensed-items/{licensed_item_id}",
53-
# response_model=Envelope[LicensedItemRestGet],
54-
# )
55-
# async def get_licensed_item(
56-
# _path: Annotated[LicensedItemsPathParams, Depends()],
57-
# ):
58-
# ...
59-
60-
6151
@router.post(
6252
"/catalog/licensed-items/{licensed_item_id}:purchase",
6353
response_model=LicensedItemPurchaseGet,

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class LicensedItemPurchaseGet(BaseModel):
3838
"licensed_item_purchase_id": "beb16d18-d57d-44aa-a638-9727fa4a72ef",
3939
"product_name": "osparc",
4040
"licensed_item_id": "303942ef-6d31-4ba8-afbe-dbb1fce2a953",
41+
"key": "Duke",
42+
"version": "1.0.0",
4143
"wallet_id": 1,
4244
"wallet_name": "My Wallet",
4345
"pricing_unit_cost_id": 1,

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

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,7 @@ class _ItisVipRestData(OutputSchema):
6666

6767

6868
class _ItisVipResourceRestData(OutputSchema):
69-
# category_id: IDStr
70-
# category_display: str
71-
# category_icon: HttpUrl | None = None # NOTE: Placeholder until provide @odeimaiz
7269
source: _ItisVipRestData
73-
# terms_of_use_url: HttpUrl | None = None # NOTE: Placeholder until provided @mguidon
7470

7571

7672
class LicensedItemRestGet(OutputSchema):
@@ -141,7 +137,14 @@ def from_domain_model(cls, item: LicensedItem) -> Self:
141137
exclude_unset=True,
142138
),
143139
"licensed_resources": [
144-
_ItisVipResourceRestData(**x) for x in item.licensed_resources
140+
_ItisVipResourceRestData(**x)
141+
for x in sorted(
142+
item.licensed_resources,
143+
key=lambda x: datetime.strptime(
144+
x["source"]["features"]["date"], "%Y-%m-%d"
145+
),
146+
reverse=True,
147+
)
145148
],
146149
"category_id": item.licensed_resources[0]["category_id"],
147150
"category_display": item.licensed_resources[0]["category_display"],

services/api-server/src/simcore_service_api_server/services_rpc/wb_api_server.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ async def get_available_licensed_items_for_wallet(
120120
NotEnoughAvailableSeatsError: InsufficientNumberOfSeatsError,
121121
CanNotCheckoutNotEnoughAvailableSeatsError: InsufficientNumberOfSeatsError,
122122
_CanNotCheckoutServiceIsNotRunningError: CanNotCheckoutServiceIsNotRunningError,
123+
# NOTE: missing WalletAccessForbiddenError
123124
}
124125
)
125126
async def checkout_licensed_item_for_wallet(

services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/services/modules/db/licensed_items_checkouts_db.py

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@
2121
pass_or_acquire_connection,
2222
transaction_context,
2323
)
24-
from sqlalchemy.dialects.postgresql import ARRAY, INTEGER
2524
from sqlalchemy.ext.asyncio import AsyncConnection, AsyncEngine
2625

2726
from ....models.licensed_items_checkouts import (
2827
CreateLicensedItemCheckoutDB,
2928
LicensedItemCheckoutDB,
3029
)
30+
from . import utils as db_utils
3131

3232
_logger = logging.getLogger(__name__)
3333

@@ -202,15 +202,11 @@ async def get_currently_used_seats_for_key_version_wallet(
202202
engine: AsyncEngine,
203203
connection: AsyncConnection | None = None,
204204
*,
205-
# licensed_item_id: LicensedItemID,
206205
key: str,
207206
version: str,
208207
wallet_id: WalletID,
209208
product_name: ProductName,
210209
) -> int:
211-
def _version(column_or_value):
212-
# converts version value string to array[integer] that can be compared
213-
return sa.func.string_to_array(column_or_value, ".").cast(ARRAY(INTEGER))
214210

215211
sum_stmt = sa.select(
216212
sa.func.sum(resource_tracker_licensed_items_checkouts.c.num_of_seats)
@@ -219,8 +215,8 @@ def _version(column_or_value):
219215
& (resource_tracker_licensed_items_checkouts.c.key == key)
220216
# If purchased version >= requested version, it covers that version
221217
& (
222-
_version(resource_tracker_licensed_items_checkouts.c.version)
223-
>= _version(version)
218+
db_utils.version(resource_tracker_licensed_items_checkouts.c.version)
219+
>= db_utils.version(version)
224220
)
225221
& (resource_tracker_licensed_items_checkouts.c.product_name == product_name)
226222
& (resource_tracker_licensed_items_checkouts.c.stopped_at.is_(None))

services/resource-usage-tracker/src/simcore_service_resource_usage_tracker/services/modules/db/licensed_items_purchases_db.py

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,14 @@
1616
pass_or_acquire_connection,
1717
transaction_context,
1818
)
19-
from sqlalchemy.dialects.postgresql import ARRAY, INTEGER
2019
from sqlalchemy.ext.asyncio import AsyncConnection, AsyncEngine
2120

2221
from ....exceptions.errors import LicensedItemPurchaseNotFoundError
2322
from ....models.licensed_items_purchases import (
2423
CreateLicensedItemsPurchasesDB,
2524
LicensedItemsPurchasesDB,
2625
)
26+
from . import utils as db_utils
2727

2828
_SELECTION_ARGS = (
2929
resource_tracker_licensed_items_purchases.c.licensed_item_purchase_id,
@@ -177,23 +177,15 @@ async def get_active_purchased_seats_for_key_version_wallet(
177177
"""
178178
_current_time = datetime.now(tz=UTC)
179179

180-
def _version(column_or_value):
181-
# converts version value string to array[integer] that can be compared
182-
return sa.func.string_to_array(column_or_value, ".").cast(ARRAY(INTEGER))
183-
184180
sum_stmt = sa.select(
185181
sa.func.sum(resource_tracker_licensed_items_purchases.c.num_of_seats)
186182
).where(
187183
(resource_tracker_licensed_items_purchases.c.wallet_id == wallet_id)
188-
# & (
189-
# resource_tracker_licensed_items_purchases.c.licensed_item_id
190-
# == licensed_item_id
191-
# )
192184
& (resource_tracker_licensed_items_purchases.c.key == key)
193185
# If purchased version >= requested version, it covers that version
194186
& (
195-
_version(resource_tracker_licensed_items_purchases.c.version)
196-
>= _version(version)
187+
db_utils.version(resource_tracker_licensed_items_purchases.c.version)
188+
>= db_utils.version(version)
197189
)
198190
& (resource_tracker_licensed_items_purchases.c.product_name == product_name)
199191
& (resource_tracker_licensed_items_purchases.c.start_at <= _current_time)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import sqlalchemy as sa
2+
from sqlalchemy.dialects.postgresql import ARRAY, INTEGER
3+
4+
5+
def version(column_or_value):
6+
# converts version value string to array[integer] that can be compared
7+
return sa.func.string_to_array(column_or_value, ".").cast(ARRAY(INTEGER))

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

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -207,19 +207,6 @@ async def delete(
207207
### LICENSED ITEMS DOMAIN
208208

209209

210-
# _SELECTION_LICENSED_ITEM_ARGS = (
211-
# licensed_items.c.licensed_item_id,
212-
# licensed_items.c.key,
213-
# licensed_items.c.version,
214-
# licensed_items.c.display_name,
215-
# licensed_items.c.licensed_resource_type,
216-
# licensed_resources.c.licensed_resource_data,
217-
# licensed_items.c.pricing_plan_id,
218-
# licensed_items.c.created,
219-
# licensed_items.c.modified,
220-
# )
221-
222-
223210
_licensed_resource_subquery = (
224211
select(
225212
licensed_item_to_resource.c.licensed_item_id,

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

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -74,24 +74,6 @@ async def list_licensed_items(request: web.Request):
7474
)
7575

7676

77-
# @routes.get(
78-
# f"/{VTAG}/catalog/licensed-items/{{licensed_item_id}}", name="get_licensed_item"
79-
# )
80-
# @login_required
81-
# @permission_required("catalog/licensed-items.*")
82-
# @handle_plugin_requests_exceptions
83-
# async def get_licensed_item(request: web.Request):
84-
# req_ctx = LicensedItemsRequestContext.model_validate(request)
85-
# path_params = parse_request_path_parameters_as(LicensedItemsPathParams, request)
86-
87-
# licensed_item: LicensedItem = await _licensed_items_service.get_licensed_item(
88-
# app=request.app,
89-
# licensed_item_id=path_params.licensed_item_id,
90-
# product_name=req_ctx.product_name,
91-
# )
92-
# return envelope_json_response(LicensedItemRestGet.from_domain_model(licensed_item))
93-
94-
9577
@routes.post(
9678
f"/{VTAG}/catalog/licensed-items/{{licensed_item_id}}:purchase",
9779
name="purchase_licensed_item",

0 commit comments

Comments
 (0)