Skip to content

Commit 7857796

Browse files
refactor rpc
1 parent f6fee9a commit 7857796

File tree

4 files changed

+86
-24
lines changed
  • packages
    • models-library/src/models_library/rpc/webserver/auth
    • service-library/src/servicelib/rabbitmq/rpc_interfaces/webserver/auth
  • services/web/server

4 files changed

+86
-24
lines changed
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import logging
2+
3+
from models_library.api_schemas_webserver import WEBSERVER_RPC_NAMESPACE
4+
from models_library.basic_types import IDStr
5+
from models_library.rabbitmq_basic_types import RPCMethodName
6+
from models_library.rpc.webserver.auth.api_keys import ApiKeyCreate, ApiKeyGet
7+
from pydantic import TypeAdapter
8+
from servicelib.logging_utils import log_decorator
9+
from servicelib.rabbitmq import RabbitMQRPCClient
10+
11+
_logger = logging.getLogger(__name__)
12+
13+
14+
@log_decorator(_logger, level=logging.DEBUG)
15+
async def create_api_key(
16+
rabbitmq_rpc_client: RabbitMQRPCClient,
17+
*,
18+
user_id: str,
19+
product_name: str,
20+
api_key: ApiKeyCreate,
21+
) -> ApiKeyGet:
22+
result: ApiKeyGet = await rabbitmq_rpc_client.request(
23+
WEBSERVER_RPC_NAMESPACE,
24+
TypeAdapter(RPCMethodName).validate_python("create_api_key"),
25+
user_id=user_id,
26+
product_name=product_name,
27+
api_key=api_key,
28+
)
29+
assert isinstance(result, ApiKeyGet)
30+
return result
31+
32+
33+
@log_decorator(_logger, level=logging.DEBUG)
34+
async def get_api_key(
35+
rabbitmq_rpc_client: RabbitMQRPCClient,
36+
*,
37+
user_id: str,
38+
product_name: str,
39+
api_key_id: IDStr,
40+
) -> ApiKeyGet:
41+
result: ApiKeyGet = await rabbitmq_rpc_client.request(
42+
WEBSERVER_RPC_NAMESPACE,
43+
TypeAdapter(RPCMethodName).validate_python("get_api_key"),
44+
user_id=user_id,
45+
product_name=product_name,
46+
api_key_id=api_key_id,
47+
)
48+
assert isinstance(result, ApiKeyGet)
49+
return result
50+
51+
52+
async def delete_api_key(
53+
rabbitmq_rpc_client: RabbitMQRPCClient,
54+
*,
55+
user_id: str,
56+
product_name: str,
57+
api_key_id: IDStr,
58+
) -> None:
59+
result = await rabbitmq_rpc_client.request(
60+
WEBSERVER_RPC_NAMESPACE,
61+
TypeAdapter(RPCMethodName).validate_python("delete_api_key"),
62+
user_id=user_id,
63+
product_name=product_name,
64+
api_key_id=api_key_id,
65+
)
66+
assert result is None

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
from models_library.api_schemas_webserver import WEBSERVER_RPC_NAMESPACE
55
from models_library.api_schemas_webserver.auth import ApiKeyCreateRequest
66
from models_library.products import ProductName
7-
from models_library.rpc_auth_api_keys import ApiKeyGet
7+
from models_library.rpc.webserver.auth.api_keys import ApiKeyGet
88
from models_library.users import UserID
99
from servicelib.rabbitmq import RPCRouter
1010

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

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -8,16 +8,18 @@
88
import pytest
99
from aiohttp.test_utils import TestServer
1010
from faker import Faker
11-
from models_library.api_schemas_webserver import WEBSERVER_RPC_NAMESPACE
1211
from models_library.products import ProductName
13-
from models_library.rabbitmq_basic_types import RPCMethodName
14-
from models_library.rpc_auth_api_keys import ApiKeyCreate
15-
from pydantic import TypeAdapter
12+
from models_library.rpc.webserver.auth.api_keys import ApiKeyCreate
1613
from pytest_mock import MockerFixture
1714
from pytest_simcore.helpers.monkeypatch_envs import setenvs_from_dict
1815
from pytest_simcore.helpers.typing_env import EnvVarsDict
1916
from pytest_simcore.helpers.webserver_login import UserInfoDict
2017
from servicelib.rabbitmq import RabbitMQRPCClient
18+
from servicelib.rabbitmq.rpc_interfaces.webserver.auth.api_keys import (
19+
create_api_key,
20+
delete_api_key,
21+
get_api_key,
22+
)
2123
from settings_library.rabbit import RabbitSettings
2224
from simcore_postgres_database.models.users import UserRole
2325
from simcore_service_webserver.api_keys import _repository as repo
@@ -108,11 +110,10 @@ async def test_get_api_key(
108110
logged_user: UserInfoDict,
109111
):
110112
for api_key in fake_user_api_keys:
111-
result = await rpc_client.request(
112-
WEBSERVER_RPC_NAMESPACE,
113-
TypeAdapter(RPCMethodName).validate_python("get_api_key"),
114-
product_name=osparc_product_name,
113+
result = await get_api_key(
114+
rpc_client,
115115
user_id=logged_user["id"],
116+
product_name=osparc_product_name,
116117
api_key_id=api_key.id,
117118
)
118119
assert result.id == api_key.id
@@ -128,19 +129,17 @@ async def test_api_keys_workflow(
128129
key_name = faker.pystr()
129130

130131
# creating a key
131-
created_api_key = await rpc_client.request(
132-
WEBSERVER_RPC_NAMESPACE,
133-
TypeAdapter(RPCMethodName).validate_python("create_api_key"),
134-
product_name=osparc_product_name,
132+
created_api_key = await create_api_key(
133+
rpc_client,
135134
user_id=logged_user["id"],
135+
product_name=osparc_product_name,
136136
api_key=ApiKeyCreate(display_name=key_name, expiration=None),
137137
)
138138
assert created_api_key.display_name == key_name
139139

140140
# query the key is still present
141-
queried_api_key = await rpc_client.request(
142-
WEBSERVER_RPC_NAMESPACE,
143-
TypeAdapter(RPCMethodName).validate_python("get_api_key"),
141+
queried_api_key = await get_api_key(
142+
rpc_client,
144143
product_name=osparc_product_name,
145144
user_id=logged_user["id"],
146145
api_key_id=created_api_key.id,
@@ -151,20 +150,17 @@ async def test_api_keys_workflow(
151150
assert created_api_key.display_name == queried_api_key.display_name
152151

153152
# remove the key
154-
delete_key_result = await rpc_client.request(
155-
WEBSERVER_RPC_NAMESPACE,
156-
TypeAdapter(RPCMethodName).validate_python("delete_api_key"),
157-
product_name=osparc_product_name,
153+
await delete_api_key(
154+
rpc_client,
158155
user_id=logged_user["id"],
156+
product_name=osparc_product_name,
159157
api_key_id=created_api_key.id,
160158
)
161-
assert delete_key_result is None
162159

163160
with pytest.raises(ApiKeyNotFoundError):
164161
# key no longer present
165-
await rpc_client.request(
166-
WEBSERVER_RPC_NAMESPACE,
167-
TypeAdapter(RPCMethodName).validate_python("get_api_key"),
162+
await get_api_key(
163+
rpc_client,
168164
product_name=osparc_product_name,
169165
user_id=logged_user["id"],
170166
api_key_id=created_api_key.id,

0 commit comments

Comments
 (0)