Skip to content

_aux_auth

_get_single_user_with_groups(user, db) async

Enrich a user object by filling its group_ids_names attribute.

Parameters:

Name Type Description Default
user UserOAuth

The current UserOAuth object

required
db AsyncSession

Async db session

required

Returns:

Type Description
UserRead

A UserRead object with group_ids_names dict

Source code in fractal_server/app/routes/auth/_aux_auth.py
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
async def _get_single_user_with_groups(
    user: UserOAuth,
    db: AsyncSession,
) -> UserRead:
    """
    Enrich a user object by filling its `group_ids_names` attribute.

    Arguments:
        user: The current `UserOAuth` object
        db: Async db session

    Returns:
        A `UserRead` object with `group_ids_names` dict
    """
    stm_groups = (
        select(UserGroup)
        .join(LinkUserGroup)
        .where(LinkUserGroup.user_id == user.id)
        .order_by(asc(LinkUserGroup.timestamp_created))
    )
    res = await db.execute(stm_groups)
    groups = res.scalars().unique().all()
    group_ids_names = [(group.id, group.name) for group in groups]

    # Check that Fractal Default Group is the first of the list. If not, fix.
    index = next(
        (
            i
            for i, group_tuple in enumerate(group_ids_names)
            if group_tuple[1] == FRACTAL_DEFAULT_GROUP_NAME
        ),
        None,
    )
    if index is None:
        logger.warning(
            f"User {user.id} not in "
            f"default UserGroup '{FRACTAL_DEFAULT_GROUP_NAME}'"
        )
    elif index != 0:
        default_group = group_ids_names.pop(index)
        group_ids_names.insert(0, default_group)
    else:
        pass

    return UserRead(
        **user.model_dump(),
        group_ids_names=group_ids_names,
        oauth_accounts=user.oauth_accounts,
    )

_get_single_usergroup_with_user_ids(group_id, db) async

Get a group, and construct its user_ids list.

Parameters:

Name Type Description Default
group_id int
required
db AsyncSession
required

Returns:

Type Description
UserGroupRead

UserGroupRead object, with user_ids attribute populated

UserGroupRead

from database.

Source code in fractal_server/app/routes/auth/_aux_auth.py
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
async def _get_single_usergroup_with_user_ids(
    group_id: int, db: AsyncSession
) -> UserGroupRead:
    """
    Get a group, and construct its `user_ids` list.

    Arguments:
        group_id:
        db:

    Returns:
        `UserGroupRead` object, with `user_ids` attribute populated
        from database.
    """
    group = await _usergroup_or_404(group_id, db)

    # Get all user/group links
    stm_links = select(LinkUserGroup).where(LinkUserGroup.group_id == group_id)
    res = await db.execute(stm_links)
    links = res.scalars().all()
    user_ids = [link.user_id for link in links]

    return UserGroupRead(**group.model_dump(), user_ids=user_ids)

_user_or_404(user_id, db) async

Get a user from db, or raise a 404 HTTP exception if missing.

Parameters:

Name Type Description Default
user_id int

ID of the user

required
db AsyncSession

Async db session

required
Source code in fractal_server/app/routes/auth/_aux_auth.py
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
async def _user_or_404(user_id: int, db: AsyncSession) -> UserOAuth:
    """
    Get a user from db, or raise a 404 HTTP exception if missing.

    Arguments:
        user_id: ID of the user
        db: Async db session
    """
    user = await db.get(UserOAuth, user_id, populate_existing=True)
    if user is None:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail=f"User {user_id} not found.",
        )
    return user