Warning

This document is for an old release of Galaxy. You can alternatively view this page in the latest release if it exists or view the top of the latest release's documentation.

Source code for galaxy.webapps.galaxy.api.groups

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

from sqlalchemy import false

from galaxy import web
from galaxy.web.base.controller import BaseAPIController, url_for

log = logging.getLogger(__name__)


[docs]class GroupAPIController(BaseAPIController):
[docs] @web.expose_api @web.require_admin def index(self, trans, **kwd): """ GET /api/groups Displays a collection (list) of groups. """ rval = [] for group in trans.sa_session.query(trans.app.model.Group).filter(trans.app.model.Group.table.c.deleted == false()): if trans.user_is_admin(): item = group.to_dict(value_mapper={'id': trans.security.encode_id}) encoded_id = trans.security.encode_id(group.id) item['url'] = url_for('group', id=encoded_id) rval.append(item) return rval
[docs] @web.expose_api def create(self, trans, payload, **kwd): """ POST /api/groups Creates a new group. """ log.info("groups payload%s\n" % (payload)) if not trans.user_is_admin(): trans.response.status = 403 return "You are not authorized to create a new group." name = payload.get('name', None) if not name: trans.response.status = 400 return "Enter a valid name" if trans.sa_session.query(trans.app.model.Group).filter(trans.app.model.Group.table.c.name == name).first(): trans.response.status = 400 return "A group with that name already exists" group = trans.app.model.Group(name=name) trans.sa_session.add(group) user_ids = payload.get('user_ids', []) for i in user_ids: log.info("user_id: %s\n" % (i)) log.info("%s %s\n" % (i, trans.security.decode_id(i))) users = [trans.sa_session.query(trans.model.User).get(trans.security.decode_id(i)) for i in user_ids] role_ids = payload.get('role_ids', []) roles = [trans.sa_session.query(trans.model.Role).get(trans.security.decode_id(i)) for i in role_ids] trans.app.security_agent.set_entity_group_associations(groups=[group], roles=roles, users=users) """ # Create the UserGroupAssociations for user in users: trans.app.security_agent.associate_user_group( user, group ) # Create the GroupRoleAssociations for role in roles: trans.app.security_agent.associate_group_role( group, role ) """ trans.sa_session.flush() encoded_id = trans.security.encode_id(group.id) item = group.to_dict(view='element', value_mapper={'id': trans.security.encode_id}) item['url'] = url_for('group', id=encoded_id) return [item]
[docs] @web.expose_api @web.require_admin def show(self, trans, id, **kwd): """ GET /api/groups/{encoded_group_id} Displays information about a group. """ group_id = id try: decoded_group_id = trans.security.decode_id(group_id) except TypeError: trans.response.status = 400 return "Malformed group id ( %s ) specified, unable to decode." % str(group_id) try: group = trans.sa_session.query(trans.app.model.Group).get(decoded_group_id) except Exception: group = None if not group: trans.response.status = 400 return "Invalid group id ( %s ) specified." % str(group_id) item = group.to_dict(view='element', value_mapper={'id': trans.security.encode_id}) item['url'] = url_for('group', id=group_id) item['users_url'] = url_for('group_users', group_id=group_id) item['roles_url'] = url_for('group_roles', group_id=group_id) return item
[docs] @web.expose_api @web.require_admin def update(self, trans, id, payload, **kwd): """ PUT /api/groups/{encoded_group_id} Modifies a group. """ group_id = id try: decoded_group_id = trans.security.decode_id(group_id) except TypeError: trans.response.status = 400 return "Malformed group id ( %s ) specified, unable to decode." % str(group_id) try: group = trans.sa_session.query(trans.app.model.Group).get(decoded_group_id) except Exception: group = None if not group: trans.response.status = 400 return "Invalid group id ( %s ) specified." % str(group_id) name = payload.get('name', None) if name: group.name = name trans.sa_session.add(group) user_ids = payload.get('user_ids', []) users = [trans.sa_session.query(trans.model.User).get(trans.security.decode_id(i)) for i in user_ids] role_ids = payload.get('role_ids', []) roles = [trans.sa_session.query(trans.model.Role).get(trans.security.decode_id(i)) for i in role_ids] trans.app.security_agent.set_entity_group_associations(groups=[group], roles=roles, users=users, delete_existing_assocs=False) trans.sa_session.flush()