Skip to content

Commit 832db9e

Browse files
committed
utils mixin
1 parent 43c4250 commit 832db9e

File tree

5 files changed

+27
-11
lines changed

5 files changed

+27
-11
lines changed

packages/postgres-database/src/simcore_postgres_database/utils_groups_extra_properties.py

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,10 @@ class GroupExtraProperties(FromRowMixin):
3535
enable_efs: bool
3636

3737

38-
async def _list_table_entries_ordered_by_group_type(
39-
connection: SAConnection, user_id: int, product_name: str
40-
) -> list[RowProxy]:
41-
list_stmt = (
38+
async def _list_table_entries_ordered_by_group_type_query(
39+
user_id: int, product_name: str
40+
):
41+
return (
4242
sa.select(
4343
groups_extra_properties,
4444
groups.c.type,
@@ -68,6 +68,14 @@ async def _list_table_entries_ordered_by_group_type(
6868
.alias()
6969
)
7070

71+
72+
async def _list_table_entries_ordered_by_group_type(
73+
connection: SAConnection, user_id: int, product_name: str
74+
) -> list[RowProxy]:
75+
list_stmt = _list_table_entries_ordered_by_group_type_query(
76+
user_id=user_id, product_name=product_name
77+
)
78+
7179
result = await connection.execute(
7280
sa.select(list_stmt).order_by(list_stmt.c.type_order)
7381
)
@@ -106,7 +114,7 @@ async def get(
106114
result = await connection.execute(get_stmt)
107115
assert result # nosec
108116
if row := await result.first():
109-
return GroupExtraProperties.from_row(row)
117+
return GroupExtraProperties.from_row_proxy(row)
110118
msg = f"Properties for group {gid} not found"
111119
raise GroupExtraPropertiesNotFoundError(msg)
112120

@@ -122,7 +130,7 @@ async def get_aggregated_properties_for_user(
122130
)
123131
merged_standard_extra_properties = None
124132
for row in rows:
125-
group_extra_properties = GroupExtraProperties.from_row(row)
133+
group_extra_properties = GroupExtraProperties.from_row_proxy(row)
126134
match row.type:
127135
case GroupType.PRIMARY:
128136
# this always has highest priority

packages/postgres-database/src/simcore_postgres_database/utils_models.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from typing import TypeVar
33

44
from aiopg.sa.result import RowProxy
5+
from sqlalchemy.engine.row import Row
56

67
ModelType = TypeVar("ModelType")
78

@@ -10,7 +11,13 @@ class FromRowMixin:
1011
"""Mixin to allow instance construction from aiopg.sa.result.RowProxy"""
1112

1213
@classmethod
13-
def from_row(cls: type[ModelType], row: RowProxy) -> ModelType:
14+
def from_row_proxy(cls: type[ModelType], row: RowProxy) -> ModelType:
1415
assert is_dataclass(cls) # nosec
1516
field_names = [f.name for f in fields(cls)]
1617
return cls(**{k: v for k, v in row.items() if k in field_names}) # type: ignore[return-value]
18+
19+
@classmethod
20+
def from_row(cls: type[ModelType], row: Row) -> ModelType:
21+
assert is_dataclass(cls) # nosec
22+
field_names = [f.name for f in fields(cls)]
23+
return cls(**{k: v for k, v in row._asdict().items() if k in field_names}) # type: ignore[return-value]

packages/postgres-database/tests/test_utils_groups_extra_properties.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ async def _creator(
6464
assert result
6565
row = await result.first()
6666
assert row
67-
properties = GroupExtraProperties.from_row(row)
67+
properties = GroupExtraProperties.from_row_proxy(row)
6868
created_properties.append((properties.group_id, properties.product_name))
6969
return properties
7070

services/web/server/src/simcore_service_webserver/users/_users_repository.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@
22

33
import sqlalchemy as sa
44
from aiohttp import web
5-
from models_library.api_schemas_webserver.users import UserPermission
6-
from models_library.users import GroupID, UserBillingDetails, UserID
5+
from models_library.users import GroupID, UserBillingDetails, UserID, UserPermission
76
from simcore_postgres_database.models.groups import groups, user_to_groups
87
from simcore_postgres_database.models.products import products
98
from simcore_postgres_database.models.users import UserStatus, users

services/web/server/tests/unit/isolated/test_garbage_collector_core.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,9 @@ async def test_remove_orphaned_services_inexisting_user_does_not_save_state(
240240
mock.ANY, fake_running_service.node_uuid
241241
)
242242
mock_list_node_ids_in_project.assert_called_once_with(mock.ANY, project_id)
243-
mock_get_user_role.assert_called_once_with(mock_app, fake_running_service.user_id)
243+
mock_get_user_role.assert_called_once_with(
244+
mock_app, user_id=fake_running_service.user_id
245+
)
244246
mock_has_write_permission.assert_not_called()
245247
mock_stop_dynamic_service.assert_called_once_with(
246248
mock_app,

0 commit comments

Comments
 (0)