Source code for galaxy.webapps.galaxy.api.group_users

"""
API operations on Group objects.
"""
import logging

from fastapi import Path

from galaxy.managers.context import ProvidesAppContext
from galaxy.managers.group_users import GroupUsersManager
from galaxy.schema.fields import DecodedDatabaseIdField
from galaxy.schema.schema import (
    GroupUserListResponse,
    GroupUserResponse,
)
from galaxy.webapps.galaxy.api import (
    depends,
    DependsOnTrans,
    Router,
)

log = logging.getLogger(__name__)

router = Router(tags=["group_users"])

GroupIDParam: DecodedDatabaseIdField = Path(..., title="GroupID", description="The ID of the group")

UserIDParam: DecodedDatabaseIdField = Path(..., title="UserID", description="The ID of the user")


[docs]def group_user_to_model(trans, group_id, user) -> GroupUserResponse: encoded_group_id = DecodedDatabaseIdField.encode(group_id) encoded_user_id = DecodedDatabaseIdField.encode(user.id) url = trans.url_builder("group_user", group_id=encoded_group_id, user_id=encoded_user_id) return GroupUserResponse(id=user.id, email=user.email, url=url)
[docs]@router.cbv class FastAPIGroupUsers: manager: GroupUsersManager = depends(GroupUsersManager)
[docs] @router.get( "/api/groups/{group_id}/users", require_admin=True, summary="Displays a collection (list) of groups.", name="group_users", ) def index( self, trans: ProvidesAppContext = DependsOnTrans, group_id: DecodedDatabaseIdField = GroupIDParam ) -> GroupUserListResponse: """ GET /api/groups/{encoded_group_id}/users Displays a collection (list) of groups. """ group_users = self.manager.index(trans, group_id) return GroupUserListResponse(__root__=[group_user_to_model(trans, group_id, gr) for gr in group_users])
[docs] @router.get( "/api/groups/{group_id}/user/{user_id}", alias="/api/groups/{group_id}/users/{user_id}", name="group_user", require_admin=True, summary="Displays information about a group user.", ) def show( self, trans: ProvidesAppContext = DependsOnTrans, group_id: DecodedDatabaseIdField = GroupIDParam, user_id: DecodedDatabaseIdField = UserIDParam, ) -> GroupUserResponse: """ Displays information about a group user. """ user = self.manager.show(trans, user_id, group_id) return group_user_to_model(trans, group_id, user)
[docs] @router.put( "/api/groups/{group_id}/users/{user_id}", alias="/api/groups/{group_id}/user/{user_id}", require_admin=True, summary="Adds a user to a group", ) def update( self, trans: ProvidesAppContext = DependsOnTrans, group_id: DecodedDatabaseIdField = GroupIDParam, user_id: DecodedDatabaseIdField = UserIDParam, ) -> GroupUserResponse: """ PUT /api/groups/{encoded_group_id}/users/{encoded_user_id} Adds a user to a group """ user = self.manager.update(trans, user_id, group_id) return group_user_to_model(trans, group_id, user)
[docs] @router.delete( "/api/groups/{group_id}/user/{user_id}", alias="/api/groups/{group_id}/users/{user_id}", require_admin=True, summary="Removes a user from a group", ) def delete( self, trans: ProvidesAppContext = DependsOnTrans, group_id: DecodedDatabaseIdField = GroupIDParam, user_id: DecodedDatabaseIdField = UserIDParam, ) -> GroupUserResponse: """ DELETE /api/groups/{encoded_group_id}/users/{encoded_user_id} Removes a user from a group """ user = self.manager.delete(trans, user_id, group_id) return group_user_to_model(trans, group_id, user)