Skip to content

Commit 1e1b80c

Browse files
continue refactoring
1 parent cde1e0e commit 1e1b80c

File tree

6 files changed

+70
-55
lines changed

6 files changed

+70
-55
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ class ApiKeyCreate(BaseModel):
7878

7979

8080
class ApiKeyGet(BaseModel):
81-
id_: Annotated[int, Field(alias="id")]
81+
id: int
8282
display_name: Annotated[str, Field(..., min_length=3)]
8383
api_base_url: HttpUrl | None = None
8484
api_key: str

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

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,10 @@ def _generate_api_key_and_secret(name: str):
4242
async def create_api_key(
4343
app: web.Application,
4444
*,
45-
display_name=str,
46-
expiration=dt.timedelta,
4745
user_id: UserID,
4846
product_name: ProductName,
47+
display_name=str,
48+
expiration=dt.timedelta,
4949
) -> ApiKey:
5050
# generate key and secret
5151
api_key, api_secret = _generate_api_key_and_secret(display_name)
@@ -80,19 +80,19 @@ async def get_api_key(
8080
async def get_or_create_api_key(
8181
app: web.Application,
8282
*,
83-
name: str,
8483
user_id: UserID,
8584
product_name: ProductName,
85+
display_name: str,
8686
expiration: dt.timedelta | None = None,
8787
) -> ApiKey:
8888

89-
api_key, api_secret = _generate_api_key_and_secret(name)
89+
api_key, api_secret = _generate_api_key_and_secret(display_name)
9090

9191
return await _db.get_or_create(
9292
app,
9393
user_id=user_id,
9494
product_name=product_name,
95-
display_name=name,
95+
display_name=display_name,
9696
expiration=expiration,
9797
api_key=api_key,
9898
api_secret=api_secret,
@@ -107,7 +107,10 @@ async def delete_api_key(
107107
product_name: ProductName,
108108
) -> None:
109109
await _db.delete(
110-
app, api_key_id=api_key_id, user_id=user_id, product_name=product_name
110+
app,
111+
api_key_id=api_key_id,
112+
user_id=user_id,
113+
product_name=product_name,
111114
)
112115

113116

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,11 +47,11 @@ async def list_api_keys(request: web.Request):
4747
return envelope_json_response(api_keys_names)
4848

4949

50-
@routes.get(f"/{API_VTAG}/auth/api-keys/{{api_key_id}}", name="api_key_get")
50+
@routes.get(f"/{API_VTAG}/auth/api-keys/{{api_key_id}}", name="get_api_key")
5151
@login_required
5252
@permission_required("user.apikey.*")
5353
@handle_plugin_requests_exceptions
54-
async def api_key_get(request: web.Request):
54+
async def get_api_key(request: web.Request):
5555
req_ctx = RequestContext.model_validate(request)
5656
path_params = parse_request_path_parameters_as(ApiKeysPathParams, request)
5757
api_key: ApiKey = await _api.get_api_key(

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

Lines changed: 34 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -15,62 +15,72 @@
1515

1616

1717
@router.expose()
18-
async def create_api_keys(
18+
async def create_api_key(
1919
app: web.Application,
2020
*,
21-
product_name: ProductName,
2221
user_id: UserID,
23-
new: ApiKeyCreate,
22+
product_name: ProductName,
23+
api_key: ApiKeyCreate,
2424
) -> ApiKeyGet:
2525
return await _api.create_api_key(
26-
app, new=new, user_id=user_id, product_name=product_name
27-
)
28-
29-
30-
@router.expose()
31-
async def delete_api_keys(
32-
app: web.Application,
33-
*,
34-
product_name: ProductName,
35-
user_id: UserID,
36-
api_key_id: int,
37-
) -> None:
38-
await _api.delete_api_key(
39-
app, api_key_id=api_key_id, user_id=user_id, product_name=product_name
26+
app,
27+
user_id=user_id,
28+
product_name=product_name,
29+
display_name=api_key.display_name,
30+
expiration=api_key.expiration,
4031
)
4132

4233

4334
@router.expose(reraise_if_error_type=(ApiKeyNotFoundError,))
44-
async def api_key_get(
35+
async def get_api_key(
4536
app: web.Application,
4637
*,
47-
product_name: ProductName,
4838
user_id: UserID,
39+
product_name: ProductName,
4940
api_key_id: int,
5041
) -> ApiKeyGet | None:
5142
return await _api.get_api_key(
52-
app, api_key_id=api_key_id, user_id=user_id, product_name=product_name
43+
app,
44+
user_id=user_id,
45+
product_name=product_name,
46+
api_key_id=api_key_id,
5347
)
5448

5549

5650
@router.expose()
57-
async def get_or_create_api_keys(
51+
async def get_or_create_api_key(
5852
app: web.Application,
5953
*,
60-
product_name: ProductName,
6154
user_id: UserID,
62-
name: str,
55+
product_name: ProductName,
56+
display_name: str,
6357
expiration: timedelta | None = None,
6458
) -> ApiKeyGet:
6559
return await _api.get_or_create_api_key(
6660
app,
67-
name=name,
6861
user_id=user_id,
6962
product_name=product_name,
63+
display_name=display_name,
7064
expiration=expiration,
7165
)
7266

7367

68+
@router.expose()
69+
async def delete_api_key(
70+
app: web.Application,
71+
*,
72+
user_id: UserID,
73+
product_name: ProductName,
74+
api_key_id: int,
75+
) -> None:
76+
await _api.delete_api_key(
77+
app,
78+
user_id=user_id,
79+
product_name=product_name,
80+
api_key_id=api_key_id,
81+
)
82+
83+
7484
async def register_rpc_routes_on_startup(app: web.Application):
7585
rpc_server = get_rabbitmq_rpc_server(app)
7686
await rpc_server.register_router(router, WEBSERVER_RPC_NAMESPACE, app)

services/web/server/tests/unit/with_dbs/01/test_api_keys.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,7 +91,7 @@ async def test_list_api_keys(
9191
"user_role,expected",
9292
_get_user_access_parametrizations(status.HTTP_200_OK),
9393
)
94-
async def test_create_api_keys(
94+
async def test_create_api_key(
9595
client: TestClient,
9696
logged_user: UserInfoDict,
9797
user_role: UserRole,
@@ -184,9 +184,9 @@ async def test_get_or_create_api_key(
184184
assert client.app
185185

186186
options = {
187-
"name": "foo",
188187
"user_id": user["id"],
189188
"product_name": "osparc",
189+
"display_name": "foo",
190190
}
191191

192192
# create once

services/web/server/tests/unit/with_dbs/01/test_api_keys_rpc.py

Lines changed: 22 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
from servicelib.rabbitmq import RabbitMQRPCClient
2222
from settings_library.rabbit import RabbitSettings
2323
from simcore_postgres_database.models.users import UserRole
24+
from simcore_service_webserver.api_keys._models import ApiKey
2425
from simcore_service_webserver.api_keys.errors import ApiKeyNotFoundError
2526
from simcore_service_webserver.application_settings import ApplicationSettings
2627

@@ -59,15 +60,16 @@ def user_role() -> UserRole:
5960

6061

6162
@pytest.fixture
62-
async def fake_user_api_ids(
63+
async def fake_user_api_keys(
6364
user_role: UserRole,
6465
web_server: TestServer,
6566
logged_user: UserInfoDict,
6667
osparc_product_name: ProductName,
6768
faker: Faker,
68-
) -> AsyncIterable[list[int]]:
69+
) -> AsyncIterable[list[ApiKey]]:
6970
assert web_server.app
70-
api_key_ids: list[int] = [
71+
72+
api_keys: list[ApiKey] = [
7173
await db.create(
7274
web_server.app,
7375
user_id=logged_user["id"],
@@ -80,12 +82,12 @@ async def fake_user_api_ids(
8082
for _ in range(5)
8183
]
8284

83-
yield api_key_ids
85+
yield api_keys
8486

85-
for api_key_id in api_key_ids:
87+
for api_key in api_keys:
8688
await db.delete(
8789
web_server.app,
88-
api_key_id=api_key_id,
90+
api_key_id=api_key.id,
8991
user_id=logged_user["id"],
9092
product_name=osparc_product_name,
9193
)
@@ -99,21 +101,21 @@ async def rpc_client(
99101
return await rabbitmq_rpc_client("client")
100102

101103

102-
async def test_api_key_get(
103-
fake_user_api_ids: list[int],
104+
async def test_get_api_key(
105+
fake_user_api_keys: list[ApiKey],
104106
rpc_client: RabbitMQRPCClient,
105107
osparc_product_name: ProductName,
106108
logged_user: UserInfoDict,
107109
):
108-
for api_key_id in fake_user_api_ids:
110+
for api_key in fake_user_api_keys:
109111
result = await rpc_client.request(
110112
WEBSERVER_RPC_NAMESPACE,
111-
TypeAdapter(RPCMethodName).validate_python("api_key_get"),
113+
TypeAdapter(RPCMethodName).validate_python("get_api_key"),
112114
product_name=osparc_product_name,
113115
user_id=logged_user["id"],
114-
api_key_id=api_key_id,
116+
api_key_id=api_key.id,
115117
)
116-
assert result.id_ == api_key_id
118+
assert result.id == api_key.id
117119

118120

119121
async def test_api_keys_workflow(
@@ -128,20 +130,20 @@ async def test_api_keys_workflow(
128130
# creating a key
129131
created_api_key = await rpc_client.request(
130132
WEBSERVER_RPC_NAMESPACE,
131-
TypeAdapter(RPCMethodName).validate_python("create_api_keys"),
133+
TypeAdapter(RPCMethodName).validate_python("create_api_key"),
132134
product_name=osparc_product_name,
133135
user_id=logged_user["id"],
134-
new=ApiKeyCreate(display_name=key_name, expiration=None),
136+
api_key=ApiKeyCreate(display_name=key_name, expiration=None),
135137
)
136138
assert created_api_key.display_name == key_name
137139

138140
# query the key is still present
139141
queried_api_key = await rpc_client.request(
140142
WEBSERVER_RPC_NAMESPACE,
141-
TypeAdapter(RPCMethodName).validate_python("api_key_get"),
143+
TypeAdapter(RPCMethodName).validate_python("get_api_key"),
142144
product_name=osparc_product_name,
143145
user_id=logged_user["id"],
144-
api_key_id=created_api_key.id_,
146+
api_key_id=created_api_key.id,
145147
)
146148
assert queried_api_key.display_name == key_name
147149

@@ -150,19 +152,19 @@ async def test_api_keys_workflow(
150152
# remove the key
151153
delete_key_result = await rpc_client.request(
152154
WEBSERVER_RPC_NAMESPACE,
153-
TypeAdapter(RPCMethodName).validate_python("delete_api_keys"),
155+
TypeAdapter(RPCMethodName).validate_python("delete_api_key"),
154156
product_name=osparc_product_name,
155157
user_id=logged_user["id"],
156-
api_key_id=created_api_key.id_,
158+
api_key_id=created_api_key.id,
157159
)
158160
assert delete_key_result is None
159161

160162
with pytest.raises(ApiKeyNotFoundError):
161163
# key no longer present
162164
await rpc_client.request(
163165
WEBSERVER_RPC_NAMESPACE,
164-
TypeAdapter(RPCMethodName).validate_python("api_key_get"),
166+
TypeAdapter(RPCMethodName).validate_python("get_api_key"),
165167
product_name=osparc_product_name,
166168
user_id=logged_user["id"],
167-
api_key_id=created_api_key.id_,
169+
api_key_id=created_api_key.id,
168170
)

0 commit comments

Comments
 (0)