Anton Shestakov <engored@ya.ru>, Wed, 01 May 2013 23:17:37 +0900
Security and Privacy section in docs.
app.py
Permissions: -rwxr-xr-x
from flask import Flask, g, render_template from flask.ext.assets import Environment from flask.ext.restful import Api from CodernityDB.database_thread_safe import ThreadSafeDatabase from fruitbar.indexes import ProjectIndex, TaskIndex from fruitbar.crud import ResourceList, ResourceCombiner, CRUDResource app.config.from_object(__name__) assets = Environment(app) @app.before_first_request db_path = os.path.join(os.path.dirname(__file__), app.config['DATABASE']) cdb = ThreadSafeDatabase(db_path) cdb.add_index(ProjectIndex(cdb.path, 'project')) cdb.add_index(TaskIndex(cdb.path, 'task')) return render_template('index.html') class ProjectList(ResourceList): doc_stub = {'_t': 'project'} class Project(CRUDResource): safe_fields = ('name', 'color') def delete(self, workspace, resource_id): g.db.run('task', 'delete_for_project', workspace, resource_id) return super(Project, self).delete(workspace, resource_id) class TaskList(ResourceList): doc_stub = {'_t': 'task'} class Task(CRUDResource): safe_fields = ('name', 'note', 'done') class ProjectsAndTasks(ResourceCombiner): api.add_resource(ProjectList, '/<workspace>/projects/') api.add_resource(Project, '/<workspace>/projects/<resource_id>/') api.add_resource(TaskList, '/<workspace>/tasks/') api.add_resource(Task, '/<workspace>/tasks/<resource_id>/') api.add_resource(ProjectsAndTasks, '/<workspace>/all/') if __name__ == '__main__':