Esempio n. 1
0
def snippets(pid=None, sid=None):
    user = g.user

    assert pid, 'pid required'
    # TODO: Optimize SQL to remove extra extra query.
    project = Project.get_by_id_and_owner(pid, user)
    assert project, 'project required'

    if request.method == 'GET': # Fetch
        if sid:
            obj = Snippet.get_by_id_and_project(sid, project)
            if obj:
                return obj.to_dict()
            else:
                logger.debug('No snippet for id %s and user %s', sid, user)
                abort(404)
        else:
            return [o.to_dict() for o in project.snippets]

    elif request.method == 'POST': # Create
        data = MultiDict(request.json)
        assert not sid, 'No snippet id allowed'
        form = SnippetForm(data)
        if form.validate():
            obj = Snippet(project_id=pid)
            form.populate_obj(obj)
            obj.rank = Snippet.get_next_rank(pid)
            obj.put()
            return obj.to_dict()
        else:
            logger.warn('Snippet create errors: %s', form.errors)
            abort(400)

    elif request.method == 'PUT': # Update
        data = MultiDict(request.json)
        obj = Snippet.get_by_id_and_project(sid, project)
        if not obj: abort(404)
        form = SnippetForm(data, obj)
        if form.validate():
            form.populate_obj(obj)
            obj.save()
            return obj.to_dict()
        else:
            logger.warn('Snippet update errors: %s', form.errors)
            abort(400)

    elif request.method == 'DELETE': # Delete
        obj = Snippet.get_by_id_and_project(sid, project)
        if not obj: abort(404)
        obj.delete()
        return {'success': True}
Esempio n. 2
0
def reorder_snippets(pid=None):
    user = g.user
    assert pid, 'pid required'
    project = Project.get_by_id_and_owner(pid, user)
    assert project, 'project required'

    snippets = dict((s.id, s) for s in project.snippets)

    assert isinstance(request.json, list), 'data must be a list'
    for spec in request.json:
        try:
            snippet = snippets.get(int(spec.get('id')))
            snippet.rank = int(spec.get('rank'))
        except ValueError:
            raise AssertionError('id and rank must be ints')

    commit()
    return {'success': True}
Esempio n. 3
0
def projects(id=None):
    user = g.user

    if request.method == 'GET': # Fetch
        if id:
            obj = Project.get_by_id_and_owner(id, user)
            if obj:
                return obj.to_dict()
            else:
                logger.debug('No project for key %s and user %s', id, user)
                abort(404)
        else:
            return [o.to_dict() for o in user.projects]

    elif request.method == 'POST': # Create
        data = MultiDict(request.json)
        assert not id, 'No id allowed'
        form = ProjectForm(data)
        if form.validate():
            obj = Project(owner=user,
                          title=form.title.data)
            obj.put()
            return obj.to_dict()
        else:
            logger.warn('Project create errors: %s', form.errors)
            abort(400)

    elif request.method == 'PUT': # Update
        data = MultiDict(request.json)
        obj = Project.get_by_id_and_owner(id, user)
        if not obj: abort(404)
        form = ProjectForm(data, obj)
        if form.validate():
            form.populate_obj(obj)
            obj.save()
            return obj.to_dict()
        else:
            logger.warn('Project update errors: %s', form.errors)
            abort(400)

    elif request.method == 'DELETE': # Delete
        obj = Project.get_by_id_and_owner(id, user)
        if not obj: abort(404)
        obj.delete()
        return {'success': True}