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}
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}
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}