Skip to content

Commit 1243701

Browse files
committed
alternative user name
1 parent a25f05b commit 1243701

File tree

3 files changed

+16
-3
lines changed

3 files changed

+16
-3
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,10 @@ def _generate_random_chars(length=5) -> str:
3636
return "".join(secrets.choice(string.digits) for _ in range(length - 1))
3737

3838

39+
def generate_alternative_username(username) -> str:
40+
return f"{username}_{_generate_random_chars()}"
41+
42+
3943
class UsersRepo:
4044
@staticmethod
4145
async def new_user(
@@ -61,7 +65,7 @@ async def new_user(
6165
users.insert().values(**data).returning(users.c.id)
6266
)
6367
except UniqueViolation: # noqa: PERF203
64-
data["name"] = f'{data["name"]}_{_generate_random_chars()}'
68+
data["name"] = generate_alternative_username(data["name"])
6569

6670
result = await conn.execute(
6771
sa.select(

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
from simcore_postgres_database.utils_groups_extra_properties import (
2929
GroupExtraPropertiesNotFoundError,
3030
)
31+
from simcore_postgres_database.utils_users import generate_alternative_username
3132

3233
from ..db.plugin import get_database_engine
3334
from ..groups.models import convert_groups_db_to_schema
@@ -180,8 +181,13 @@ async def update_user_profile(
180181
assert resp.rowcount == 1 # nosec
181182

182183
except db_errors.UniqueViolation as err:
184+
user_name = updated_values.get("name")
185+
183186
raise UserNameDuplicateError(
184-
user_name=updated_values.get("name")
187+
user_name=user_name,
188+
alternative_user_name=generate_alternative_username(user_name),
189+
user_id=user_id,
190+
updated_values=updated_values,
185191
) from err
186192

187193

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,10 @@ def __init__(self, *, uid: int | None = None, email: str | None = None, **ctx: A
2222

2323

2424
class UserNameDuplicateError(UsersBaseError):
25-
msg_template = "Username {user_name} is already in use. Violates unique constraint"
25+
msg_template = (
26+
"The username '{user_name}' is already taken. "
27+
"Consider using '{alternative_user_name}' instead."
28+
)
2629

2730

2831
class TokenNotFoundError(UsersBaseError):

0 commit comments

Comments
 (0)