Lunching for groups.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
2.5 KiB

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""Group management."""
11 years ago
import logging
from flask import Blueprint
11 years ago
from flask import request
from flask import jsonify
11 years ago
from sqlalchemy.exc import IntegrityError
from luncho.helpers import ForceJSON
from luncho.helpers import JSONError
11 years ago
from luncho.helpers import user_or_error
from luncho.server import User
11 years ago
from luncho.server import Group
from luncho.server import db
groups = Blueprint('groups', __name__)
11 years ago
LOG = logging.getLogger('luncho.blueprints.groups')
@groups.route('<token>/', methods=['GET'])
def user_groups(token):
"""Return a list of the groups the user belongs or it's the owner."""
11 years ago
(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 == user.username}
return jsonify(status='OK',
groups=groups.values())
11 years ago
11 years ago
@groups.route('<token>/', 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)
LOG.debug('Current user groups: {groups}'.format(groups=user.groups))
11 years ago
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)
11 years ago
@groups.route('<token>/<groupId>/', methods=['POST'])
@ForceJSON()
def update_group(token, groupId):
"""Update group information."""
(user, error) = user_or_error(token)
if error:
return error
group = Group.query.get(groupId)
if not group:
return JSONError(404, 'Group not found')
json = request.get_json(force=True)
if 'name' in json:
group.name = json['name']
if 'maintainer' in json:
new_maintainer = User.query.get(json['maintainer'])
if not new_maintainer:
return JSONError(401, 'New maintainer not found')
group.owner = new_maintainer.username
db.session.commit()
return jsonify(status='OK')