Unverified Commit 3e403e0e authored by Marius van den Beek's avatar Marius van den Beek Committed by GitHub
Browse files

Merge pull request #18374 from davelopez/24.0_fix_update_group_api_endpoint

[24.0] Fix update group API payload model
parents d0ebd5a4 84d6971d
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
@@ -5483,6 +5483,15 @@ export interface components {
             */
            url: string;
        };
        /** GroupUpdatePayload */
        GroupUpdatePayload: {
            /** name of the group */
            name?: string | null;
            /** role IDs */
            role_ids?: string[] | null;
            /** user IDs */
            user_ids?: string[] | null;
        };
        /** GroupUserListResponse */
        GroupUserListResponse: components["schemas"]["GroupUserResponse"][];
        /** GroupUserResponse */
@@ -15135,7 +15144,7 @@ export interface operations {
        };
        requestBody: {
            content: {
                "application/json": components["schemas"]["GroupCreatePayload"];
                "application/json": components["schemas"]["GroupUpdatePayload"];
            };
        };
        responses: {
+15 −6
Original line number Diff line number Diff line
@@ -18,7 +18,10 @@ from galaxy.model import Group
from galaxy.model.base import transaction
from galaxy.model.scoped_session import galaxy_scoped_session
from galaxy.schema.fields import Security
from galaxy.schema.groups import GroupCreatePayload
from galaxy.schema.groups import (
    GroupCreatePayload,
    GroupUpdatePayload,
)
from galaxy.structured_app import MinimalManagerApp


@@ -77,7 +80,7 @@ class GroupsManager:
        item["roles_url"] = self._url_for(trans, "group_roles", group_id=encoded_id)
        return item

    def update(self, trans: ProvidesAppContext, group_id: int, payload: GroupCreatePayload):
    def update(self, trans: ProvidesAppContext, group_id: int, payload: GroupUpdatePayload):
        """
        Modifies a group.
        """
@@ -87,13 +90,19 @@ class GroupsManager:
            self._check_duplicated_group_name(sa_session, name)
            group.name = name
            sa_session.add(group)
        user_ids = payload.user_ids
        users = get_users_by_ids(sa_session, user_ids)
        role_ids = payload.role_ids
        roles = get_roles_by_ids(sa_session, role_ids)

        users = None
        if payload.user_ids is not None:
            users = get_users_by_ids(sa_session, payload.user_ids)

        roles = None
        if payload.role_ids is not None:
            roles = get_roles_by_ids(sa_session, payload.role_ids)

        self._app.security_agent.set_entity_group_associations(
            groups=[group], roles=roles, users=users, delete_existing_assocs=False
        )

        with transaction(sa_session):
            sa_session.commit()

+1 −1
Original line number Diff line number Diff line
@@ -162,6 +162,6 @@ class RoleManager(base.ModelManager[model.Role]):
        return role


def get_roles_by_ids(session: Session, role_ids):
def get_roles_by_ids(session: Session, role_ids: List[int]) -> List[Role]:
    stmt = select(Role).where(Role.id.in_(role_ids))
    return session.scalars(stmt).all()
+1 −1
Original line number Diff line number Diff line
@@ -876,7 +876,7 @@ class AdminUserFilterParser(base.ModelFilterParser, deletable.PurgableFiltersMix
        self.fn_filter_parsers.update({})


def get_users_by_ids(session: Session, user_ids):
def get_users_by_ids(session: Session, user_ids: List[int]) -> List[User]:
    stmt = select(User).where(User.id.in_(user_ids))
    return session.scalars(stmt).all()

+6 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@ from pydantic import (
)
from typing_extensions import Literal

from galaxy.schema import partial_model
from galaxy.schema.fields import (
    DecodedDatabaseIdField,
    EncodedDatabaseIdField,
@@ -69,3 +70,8 @@ class GroupCreatePayload(Model):
        [],
        title="role IDs",
    )


@partial_model()
class GroupUpdatePayload(GroupCreatePayload):
    pass
Loading