Skip to content

Commit 72954f4

Browse files
committed
common
1 parent 1834e83 commit 72954f4

File tree

4 files changed

+30
-34
lines changed

4 files changed

+30
-34
lines changed

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

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import sqlalchemy as sa
1111
from aiopg.sa.connection import SAConnection
1212
from aiopg.sa.result import RowProxy
13+
from sqlalchemy import Column
1314

1415
from .errors import UniqueViolation
1516
from .models.users import UserRole, UserStatus, users
@@ -214,7 +215,17 @@ async def is_email_used(conn: SAConnection, email: str) -> bool:
214215
users_pre_registration_details.c.pre_email == email
215216
)
216217
)
217-
if pre_registered:
218-
return True
218+
return bool(pre_registered)
219+
220+
221+
#
222+
# Privacy settings
223+
#
224+
225+
226+
def is_private(hide_attribute: Column, caller_id: int):
227+
return hide_attribute.is_(True) & (users.c.id != caller_id)
228+
219229

220-
return False
230+
def is_public(hide_attribute: Column, caller_id: int):
231+
return hide_attribute.is_(False) | (users.c.id == caller_id)

services/web/server/src/simcore_service_webserver/groups/_groups_repository.py

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
pass_or_acquire_connection,
2626
transaction_context,
2727
)
28+
from simcore_postgres_database.utils_users import is_private, is_public
2829
from sqlalchemy import and_
2930
from sqlalchemy.dialects.postgresql import insert
3031
from sqlalchemy.engine.row import Row
@@ -417,10 +418,7 @@ async def get_user_from_email(
417418
result = await conn.stream(
418419
sa.select(users.c.id).where(
419420
(users.c.email == email)
420-
& (
421-
users.c.privacy_hide_email.is_(False)
422-
| (users.c.id == caller_user_id)
423-
)
421+
& is_public(users.c.privacy_hide_email, caller_id=caller_user_id)
424422
)
425423
)
426424
user = await result.fetchone()
@@ -434,30 +432,28 @@ async def get_user_from_email(
434432
#
435433

436434

437-
def _group_user_cols(caller_user_id: int):
435+
def _group_user_cols(caller_id: UserID):
438436
return (
439437
users.c.id,
440438
users.c.name,
441439
# privacy settings
442440
sa.case(
443441
(
444-
users.c.privacy_hide_email.is_(True) & (users.c.id != caller_user_id),
442+
is_private(users.c.privacy_hide_email, caller_id),
445443
None,
446444
),
447445
else_=users.c.email,
448446
).label("email"),
449447
sa.case(
450448
(
451-
users.c.privacy_hide_fullname.is_(True)
452-
& (users.c.id != caller_user_id),
449+
is_private(users.c.privacy_hide_fullname, caller_id),
453450
None,
454451
),
455452
else_=users.c.first_name,
456453
).label("first_name"),
457454
sa.case(
458455
(
459-
users.c.privacy_hide_fullname.is_(True)
460-
& (users.c.id != caller_user_id),
456+
is_private(users.c.privacy_hide_fullname, caller_id),
461457
None,
462458
),
463459
else_=users.c.last_name,

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

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,10 @@
3030
from simcore_postgres_database.utils_users import (
3131
UsersRepo,
3232
generate_alternative_username,
33+
is_private,
34+
is_public,
3335
)
34-
from sqlalchemy import Column, delete
36+
from sqlalchemy import delete
3537
from sqlalchemy.engine.row import Row
3638
from sqlalchemy.exc import IntegrityError
3739
from sqlalchemy.ext.asyncio import AsyncConnection, AsyncEngine
@@ -52,42 +54,29 @@ def _parse_as_user(user_id: Any) -> UserID:
5254
raise UserNotFoundError(uid=user_id, user_id=user_id) from err
5355

5456

55-
#
56-
# Privacy settings
57-
#
58-
59-
60-
def _is_private(hide_attribute: Column, caller_id: UserID):
61-
return hide_attribute.is_(True) & (users.c.id != caller_id)
62-
63-
64-
def _is_public(hide_attribute: Column, caller_id: UserID):
65-
return hide_attribute.is_(False) | (users.c.id == caller_id)
66-
67-
68-
def _public_user_cols(caller_id: UserID):
57+
def _public_user_cols(caller_id: int):
6958
return (
7059
# Fits PublicUser model
7160
users.c.id.label("user_id"),
7261
users.c.name.label("user_name"),
7362
# privacy settings
7463
sa.case(
7564
(
76-
_is_private(users.c.privacy_hide_email, caller_id),
65+
is_private(users.c.privacy_hide_email, caller_id),
7766
None,
7867
),
7968
else_=users.c.email,
8069
).label("email"),
8170
sa.case(
8271
(
83-
_is_private(users.c.privacy_hide_fullname, caller_id),
72+
is_private(users.c.privacy_hide_fullname, caller_id),
8473
None,
8574
),
8675
else_=users.c.first_name,
8776
).label("first_name"),
8877
sa.case(
8978
(
90-
_is_private(users.c.privacy_hide_fullname, caller_id),
79+
is_private(users.c.privacy_hide_fullname, caller_id),
9180
None,
9281
),
9382
else_=users.c.last_name,
@@ -136,11 +125,11 @@ async def search_public_user(
136125
.where(
137126
users.c.name.ilike(_pattern)
138127
| (
139-
_is_public(users.c.privacy_hide_email, caller_id)
128+
is_public(users.c.privacy_hide_email, caller_id)
140129
& users.c.email.ilike(_pattern)
141130
)
142131
| (
143-
_is_public(users.c.privacy_hide_fullname, caller_id)
132+
is_public(users.c.privacy_hide_fullname, caller_id)
144133
& (
145134
users.c.first_name.ilike(_pattern)
146135
| users.c.last_name.ilike(_pattern)

services/web/server/tests/unit/with_dbs/03/test_users.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,7 +143,7 @@ async def test_search_users(
143143
assert len(found) == 1
144144
assert semi_private_user["name"] == found[0].user_name
145145
assert found[0].first_name == semi_private_user.get("first_name")
146-
assert found[0].last_name == semi_private_user.get("first_name")
146+
assert found[0].last_name == semi_private_user.get("last_name")
147147
assert found[0].email is None
148148

149149
# SEARCH by partial email

0 commit comments

Comments
 (0)