40:7a8fbcc20aba
Anton Shestakov <engored@ya.ru>, Fri, 08 Nov 2013 14:42:45 +0900
Update Flask, Flask-RESTful, jsmin.

next change 45:8e83e81fdad9
previous change 36:99923b9b338a

app.py

Permissions: -rwxr-xr-x

Other formats: Feeds:
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import os
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
DEBUG = True
ASSETS_DEBUG = DEBUG
DATABASE = 'db'
app = Flask(__name__)
app.config.from_object(__name__)
assets = Environment(app)
cdb = None
@app.before_first_request
def init_db():
global cdb
db_path = os.path.join(os.path.dirname(__file__), app.config['DATABASE'])
cdb = ThreadSafeDatabase(db_path)
if cdb.exists():
cdb.open()
cdb.reindex()
else:
cdb.create()
cdb.add_index(ProjectIndex(cdb.path, 'project'))
cdb.add_index(TaskIndex(cdb.path, 'task'))
@app.before_request
def before_request():
g.db = cdb
@app.route('/')
def index():
return render_template('index.html')
class ProjectList(ResourceList):
doc_stub = {'_t': 'project'}
db_index = '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'}
db_index = 'task'
class Task(CRUDResource):
safe_fields = ('name', 'note', 'done')
class ProjectsAndTasks(ResourceCombiner):
combine = {
'projects': ProjectList,
'tasks': TaskList
}
api = Api(app)
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__':
app.run()