#!/usr/bin/env python # -*- encoding: utf-8 -*- """Group management.""" import logging from flask import Blueprint from flask import request from flask import jsonify from sqlalchemy.exc import IntegrityError from luncho.helpers import ForceJSON from luncho.helpers import JSONError from luncho.helpers import user_or_error from luncho.server import User from luncho.server import Group from luncho.server import db groups = Blueprint('groups', __name__) LOG = logging.getLogger('luncho.blueprints.groups') @groups.route('/', methods=['GET']) def user_groups(token): """Return a list of the groups the user belongs or it's the owner.""" (user, error) = user_or_error(token) if error: return error groups = {} for group in user.groups: groups[group.id] = {'id': group.id, 'name': group.name, 'admin': group.owner.username == user.username} return jsonify(status='OK', groups=groups.values()) @groups.route('/', methods=['PUT']) @ForceJSON(required=['name']) def create_group(token): """Create a new group belonging to the user.""" (user, error) = user_or_error(token) if error: return error LOG.debug('User status: {verified}'.format(verified=user.verified)) if not user.verified: return JSONError(412, 'Account not verified') json = request.get_json(force=True) try: new_group = Group(name=json['name'], owner=user.username) user.groups.append(new_group) db.session.add(new_group) db.session.commit() except IntegrityError: return JSONError(500, 'Unknown error') return jsonify(status='OK', id=new_group.id)