def create(context, request): try: name = request.params['name'] parent = request.params.get('parent') g = Group(name=name) request.db_session.add(g) request.db_session.flush() if parent: try: g.parent = Group.get(request.db_session, parent) except NoResultFound: raise ParamsError('Invalid parent: %s', parent) except KeyError as e: raise ParamsError('Missing parameter: {}'.format(e)) except IntegrityError as e: error = 'Group {} already exists'.format(name) raise HTTPConflict(headers={'X-Request-Error': error}) else: request.db_session.commit() raise HTTPCreated()