Loading client/src/api/schema/schema.ts +10 −1 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -15135,7 +15144,7 @@ export interface operations { }; requestBody: { content: { "application/json": components["schemas"]["GroupCreatePayload"]; "application/json": components["schemas"]["GroupUpdatePayload"]; }; }; responses: { lib/galaxy/managers/groups.py +15 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. """ Loading @@ -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() Loading lib/galaxy/managers/roles.py +1 −1 Original line number Diff line number Diff line Loading @@ -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() lib/galaxy/managers/users.py +1 −1 Original line number Diff line number Diff line Loading @@ -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() Loading lib/galaxy/schema/groups.py +6 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -69,3 +70,8 @@ class GroupCreatePayload(Model): [], title="role IDs", ) @partial_model() class GroupUpdatePayload(GroupCreatePayload): pass Loading
client/src/api/schema/schema.ts +10 −1 Original line number Diff line number Diff line Loading @@ -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 */ Loading Loading @@ -15135,7 +15144,7 @@ export interface operations { }; requestBody: { content: { "application/json": components["schemas"]["GroupCreatePayload"]; "application/json": components["schemas"]["GroupUpdatePayload"]; }; }; responses: {
lib/galaxy/managers/groups.py +15 −6 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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. """ Loading @@ -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() Loading
lib/galaxy/managers/roles.py +1 −1 Original line number Diff line number Diff line Loading @@ -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()
lib/galaxy/managers/users.py +1 −1 Original line number Diff line number Diff line Loading @@ -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() Loading
lib/galaxy/schema/groups.py +6 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -69,3 +70,8 @@ class GroupCreatePayload(Model): [], title="role IDs", ) @partial_model() class GroupUpdatePayload(GroupCreatePayload): pass