Skip to content

Commit b2394c5

Browse files
continue refactoring
1 parent 8814283 commit b2394c5

File tree

3 files changed

+38
-20
lines changed

3 files changed

+38
-20
lines changed

services/web/server/src/simcore_service_webserver/api_keys/_api.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
from typing import Final
55

66
from aiohttp import web
7-
from models_library.api_schemas_webserver.auth import ApiKeyGet
87
from models_library.products import ProductName
98
from models_library.users import UserID
109
from servicelib.utils_secrets import generate_token_secret_key
@@ -63,13 +62,17 @@ async def create_api_key(
6362

6463

6564
async def get_api_key(
66-
app: web.Application, *, api_key_id: int, user_id: UserID, product_name: ProductName
67-
) -> ApiKeyGet:
65+
app: web.Application,
66+
*,
67+
api_key_id: int,
68+
user_id: UserID,
69+
product_name: ProductName,
70+
) -> ApiKey:
6871
api_key = await _db.get(
6972
app, api_key_id=api_key_id, user_id=user_id, product_name=product_name
7073
)
7174
if api_key is not None:
72-
return ApiKeyGet.model_validate(api_key) if api_key else None
75+
return api_key
7376

7477
raise ApiKeyNotFoundError(api_key_id=api_key_id)
7578

@@ -81,11 +84,11 @@ async def get_or_create_api_key(
8184
user_id: UserID,
8285
product_name: ProductName,
8386
expiration: dt.timedelta | None = None,
84-
) -> ApiKeyGet:
87+
) -> ApiKey:
8588

8689
api_key, api_secret = _generate_api_key_and_secret(name)
8790

88-
row = await _db.get_or_create(
91+
return await _db.get_or_create(
8992
app,
9093
user_id=user_id,
9194
product_name=product_name,
@@ -94,9 +97,6 @@ async def get_or_create_api_key(
9497
api_key=api_key,
9598
api_secret=api_secret,
9699
)
97-
return ApiKeyGet.model_construct(
98-
display_name=row.display_name, api_key=row.api_key, api_secret=row.api_secret
99-
)
100100

101101

102102
async def delete_api_key(

services/web/server/src/simcore_service_webserver/api_keys/_db.py

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
import sqlalchemy as sa
55
from aiohttp import web
6-
from models_library.api_schemas_api_server.api_keys import ApiKeyInDB
76
from models_library.products import ProductName
87
from models_library.users import UserID
98
from simcore_postgres_database.models.api_keys import api_keys
@@ -78,7 +77,7 @@ async def get(
7877
api_key_id: int,
7978
user_id: UserID,
8079
product_name: ProductName,
81-
) -> ApiKeyInDB | None:
80+
) -> ApiKey | None:
8281
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
8382
stmt = sa.select(api_keys).where(
8483
(api_keys.c.user_id == user_id)
@@ -88,7 +87,18 @@ async def get(
8887

8988
result = await conn.stream(stmt)
9089
row = await result.first()
91-
return ApiKeyInDB.model_validate(row) if row else None
90+
91+
return (
92+
ApiKey(
93+
id=row.id,
94+
display_name=row.display_name,
95+
expiration=row.expires_at,
96+
api_key=row.api_key,
97+
api_secret=row.api_secret,
98+
)
99+
if row
100+
else None
101+
)
92102

93103

94104
async def get_or_create(
@@ -101,7 +111,7 @@ async def get_or_create(
101111
expiration: timedelta | None,
102112
api_key: str,
103113
api_secret: str,
104-
) -> ApiKeyInDB:
114+
) -> ApiKey:
105115
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
106116
# Implemented as "create or get"
107117
insert_stmt = (
@@ -127,21 +137,28 @@ async def get_or_create(
127137
result = await conn.stream(insert_stmt)
128138
row = await result.first()
129139
assert row # nosec
130-
return ApiKeyInDB.model_validate(row)
140+
141+
return ApiKey(
142+
id=row.id,
143+
display_name=row.display_name,
144+
expiration=row.expiration,
145+
api_key=row.api_key,
146+
api_secret=row.api_secret,
147+
)
131148

132149

133150
async def delete(
134151
app: web.Application,
135152
connection: AsyncConnection | None = None,
136153
*,
137-
api_key_id: int,
138154
user_id: UserID,
139155
product_name: ProductName,
156+
api_key_id: int,
140157
) -> None:
141158
async with transaction_context(get_asyncpg_engine(app), connection) as conn:
142159
stmt = api_keys.delete().where(
143-
(api_keys.c.user_id == user_id)
144-
& (api_keys.c.id == api_key_id)
160+
(api_keys.c.id == api_key_id)
161+
& (api_keys.c.user_id == user_id)
145162
& (api_keys.c.product_name == product_name)
146163
)
147164
await conn.execute(stmt)

services/web/server/src/simcore_service_webserver/api_keys/_rest.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
from simcore_service_webserver.api_keys._exceptions_handlers import (
1515
handle_plugin_requests_exceptions,
1616
)
17+
from simcore_service_webserver.api_keys._models import ApiKey
1718

1819
from .._meta import API_VTAG
1920
from ..login.decorators import login_required
@@ -53,13 +54,13 @@ async def list_api_keys(request: web.Request):
5354
async def api_key_get(request: web.Request):
5455
req_ctx = RequestContext.model_validate(request)
5556
path_params = parse_request_path_parameters_as(ApiKeysPathParams, request)
56-
key = await _api.get_api_key(
57+
api_key: ApiKey = await _api.get_api_key(
5758
request.app,
5859
api_key_id=path_params.api_key_id,
5960
user_id=req_ctx.user_id,
6061
product_name=req_ctx.product_name,
6162
)
62-
return envelope_json_response(key)
63+
return envelope_json_response(ApiKeyGet.model_validate(api_key))
6364

6465

6566
@routes.post(f"/{API_VTAG}/auth/api-keys", name="create_api_key")
@@ -70,7 +71,7 @@ async def create_api_key(request: web.Request):
7071
req_ctx = RequestContext.model_validate(request)
7172
new_api_key = await parse_request_body_as(ApiKeyCreate, request)
7273
try:
73-
created_api_key = await _api.create_api_key(
74+
created_api_key: ApiKey = await _api.create_api_key(
7475
request.app,
7576
display_name=new_api_key.display_name,
7677
expiration=new_api_key.expiration,

0 commit comments

Comments
 (0)