main.py 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from flask import Flask, request, session, g, redirect, url_for, abort, \
  4. render_template, flash, jsonify
  5. import sqlite3
  6. from datetime import date, time, timedelta, datetime
  7. import locale
  8. locale.setlocale(locale.LC_ALL, '')
  9. import string
  10. from settings import *
  11. app = Flask(__name__)
  12. app.config.from_object(__name__)
  13. def connect_db():
  14. return sqlite3.connect(app.config['DATABASE'])
  15. @app.before_request
  16. def before_request():
  17. g.db = connect_db()
  18. #g.db.execute("PRAGMA foreign_keys = ON")
  19. @app.teardown_request
  20. def teardown_request(exception):
  21. g.db.close()
  22. @app.route('/')
  23. def home():
  24. return render_template('index.html', active_button="home")
  25. def query_db(query, args=(), one=False):
  26. cur = g.db.execute(query, args)
  27. rv = [dict((cur.description[idx][0], value)
  28. for idx, value in enumerate(row)) for row in cur.fetchall()]
  29. return (rv[0] if rv else None) if one else rv
  30. def init_db():
  31. with closing(connect_db()) as db:
  32. with app.open_resource('schema.sql') as f:
  33. db.cursor().executescript(f.read())
  34. db.commit()
  35. @app.route('/members')
  36. def members():
  37. members = query_db('select * from fai where is_member = 1')
  38. return render_template('members.html', members=members)
  39. @app.route('/projects')
  40. def projects():
  41. projects = list()
  42. for project in query_db('select * from fai order by is_member,step,name'):
  43. project['stepname'] = STEPS[project['step']]
  44. projects.append(project)
  45. return render_template('projects.html', projects=projects)
  46. @app.route('/fai/<projectid>')
  47. def project(projectid):
  48. project = query_db('select * from fai where id = ?', (projectid), one=True)
  49. if project is None:
  50. abort(404)
  51. project['stepname'] = STEPS[project['step']]
  52. return render_template('project.html', project=project)
  53. @app.route('/edit/<projectid>', methods=['GET', 'POST'])
  54. def edit_project(projectid):
  55. project = query_db('select * from fai where id = ?', (projectid), one=True)
  56. if project is None:
  57. abort(404)
  58. project['stepname'] = STEPS[project['step']]
  59. if request.method == 'POST':
  60. d.db.execute('update fai set name = ?, description = ? where id = ?', [request.form['name'], request.form['description'], projectid])
  61. g.db.commit()
  62. return render_template('edit_project.html', project=project)
  63. @app.route('/create/<projectid>')
  64. def create_project(projectid):
  65. abort(404) # TODO
  66. @app.route('/api/<projects>.json')
  67. def projects_json(projects):
  68. if projects == 'projects':
  69. query = 'select * from fai'
  70. elif projects == 'members':
  71. query = 'select * from fai where is_member = 1'
  72. else:
  73. abort(404)
  74. fais = dict()
  75. for fai in query_db(query):
  76. fais[fai['name']] = fai
  77. return jsonify(fais)
  78. #------
  79. # Main
  80. if __name__ == '__main__':
  81. app.run()