Anton Shestakov <engored@ya.ru>, Wed, 26 Dec 2012 22:00:13 +0900
Better writing.
app.py
Permissions: -rwxr-xr-x
from flask import Flask, g, request, render_template from flask.ext.restful import Resource, Api from CodernityDB.database import RecordNotFound from CodernityDB.database_thread_safe import ThreadSafeDatabase from fruitbar.indexes import ProjectIndex, TaskIndex db_path = os.path.join(os.path.dirname(__file__), 'db') cdb = ThreadSafeDatabase(db_path) cdb.add_index(ProjectIndex(cdb.path, 'project')) cdb.add_index(TaskIndex(cdb.path, 'task')) cdb.insert({'_id': '29c21f00190f475ba2d855f810c1085e', '_t': 'project', 'name': 'Test Project', 'color': 'success'}) cdb.insert({'_t': 'task', 'project': '29c21f00190f475ba2d855f810c1085e', 'name': 'Test Task', 'note': 'Task Note', 'done': True}) class ResourceList(Resource): return [project['doc'] for project in g.db.all(self.db_index, with_doc=True)] doc = self.doc_stub.copy() response = g.db.insert(doc) return g.db.get('id', response['_id'], with_doc=True) class CRUDResource(Resource): def get(self, resource_id): doc = g.db.get('id', resource_id, with_doc=True) def put(self, resource_id): doc = g.db.get('id', resource_id, with_doc=True) userdata = dict((k, v) for (k, v) in request.json.items() if k in self.safe_fields) response = g.db.update(doc) return self.get(response['_id']) def delete(self, resource_id): doc = g.db.get('id', resource_id, with_doc=True) class ProjectList(ResourceList): doc_stub = {'_t': 'project'} class Project(CRUDResource): safe_fields = ('name', 'color') def delete(self, resource_id): g.db.run('task', 'delete_for_project', resource_id) return super(Project, self).delete(resource_id) class TaskList(ResourceList): doc_stub = {'_t': 'task'} class Task(CRUDResource): safe_fields = ('name', 'note', 'done') api.add_resource(ProjectList, '/projects/') api.add_resource(Project, '/projects/<resource_id>/') api.add_resource(TaskList, '/tasks/') api.add_resource(Task, '/tasks/<resource_id>/') 'projects': [project['doc'] for project in g.db.all('project', with_doc=True)], 'tasks': [task['doc'] for task in g.db.all('task', with_doc=True)] return render_template('index.html', data=data) if __name__ == '__main__':