aboutsummaryrefslogtreecommitdiffstats
path: root/famille.py
diff options
context:
space:
mode:
Diffstat (limited to 'famille.py')
-rw-r--r--famille.py83
1 files changed, 47 insertions, 36 deletions
diff --git a/famille.py b/famille.py
index 32528bf..0fa2f62 100644
--- a/famille.py
+++ b/famille.py
@@ -1,12 +1,10 @@
# -*- coding: utf-8 -*-
import sqlite3
#all the imports
-from flask import Flask, request, session, g, redirect, url_for, \
- abort, render_template, flash, _app_ctx_stack
+from flask import Flask, request, session, g, redirect, url_for, render_template
from functools import wraps
import hashlib
from pytz import timezone
-import pytz
from docutils import core
from docutils.writers.html4css1 import Writer
from datetime import datetime
@@ -70,24 +68,28 @@ def pluralize(word, count, plural=None):
else:
return "{0} {1}s".format(count, word)
-def query_db(query, args=(), one=False):
- cur = g.db.execute(query, args)
+def query_db(db, query, args=(), one=False):
+ cur = db.execute(query, args)
rv = cur.fetchone() if one else cur.fetchall()
cur.close()
return rv
-@app.before_request
-def before_request():
+def connect_db():
conn = sqlite3.connect(app.config['DATABASE'],
detect_types=sqlite3.PARSE_DECLTYPES)
conn.row_factory = sqlite3.Row
- g.db = conn
- g.timezone = pytz.common_timezones
+ return conn
+
+def get_db():
+ if not hasattr(g, 'sqlite_db'):
+ g.sqlite_db = connect_db()
+ return g.sqlite_db
@app.teardown_appcontext
-def close_db_connection(exception):
+def close_db(error):
"""Closes the database again at the end of the request."""
- g.db.close()
+ if hasattr(g, 'sqlite_db'):
+ g.sqlite_db.close()
def login_required(f):
@wraps(f)
@@ -101,13 +103,14 @@ def login_required(f):
@app.route('/news/')
@login_required
def list_news():
- news = query_db("SELECT news.*, users.user_name, count(comments.id) as ncomments FROM news "
+ db = get_db()
+ news = query_db(db, "SELECT news.*, users.user_name, count(comments.id) as ncomments FROM news "
"LEFT JOIN users ON news.user_id = users.id "
"LEFT JOIN comments ON news.id=comments.news_id GROUP BY news.id "
"ORDER BY news.date DESC")
- comments = query_db("SELECT * from comments LEFT JOIN users "
+ comments = query_db(db, "SELECT * from comments LEFT JOIN users "
"ON comments.user_id = users.id ORDER BY date DESC LIMIT 5")
- users = query_db("SELECT * from users ORDER BY last_seen DESC")
+ users = query_db(db, "SELECT * from users ORDER BY last_seen DESC")
return render_template("news/list.html", news=news, comments=comments,
users=users)
@@ -118,16 +121,16 @@ def add_news():
content = request.form['content']
content_cache = rstify(content)
if 'Add' in request.form:
- cur = g.db.execute("INSERT INTO news "
+ cur = db.execute("INSERT INTO news "
"('title', 'content', 'user_id', 'content_cache') "
"VALUES (?, ?, ?, ?)",
(request.form['title'], content,
session['user_id'], content_cache))
news_id = cur.lastrowid
- g.db.commit()
+ db.commit()
# send email
- emails = query_db("SELECT email from users where notify=1")
+ emails = query_db(db, "SELECT email from users where notify=1")
emails = [email["email"] for email in emails]
if emails:
message = Message(request.form['title'],
@@ -151,11 +154,12 @@ def add_news():
@app.route('/news/<int:news_id>/', methods=['GET', 'POST'])
@login_required
def show_news(news_id):
- news = query_db("SELECT * FROM news LEFT JOIN users "
+ db = get_db()
+ news = query_db(db, "SELECT * FROM news LEFT JOIN users "
"ON news.user_id = users.id "
"WHERE news.id = ?", (news_id,), True)
if request.method == 'GET':
- comments = query_db("SELECT * FROM comments LEFT JOIN users "
+ comments = query_db(db, "SELECT * FROM comments LEFT JOIN users "
"ON comments.user_id = users.id "
"WHERE comments.news_id = ? "
"ORDER BY date", (news_id,))
@@ -164,42 +168,46 @@ def show_news(news_id):
user_id = session['user_id']
content = request.form['content']
content_cache = rstify(content)
- g.db.execute("INSERT INTO comments "
- "('user_id', 'content', 'news_id', 'content_cache') "
- "VALUES (?, ?, ?, ?)",
- (user_id, content, news_id, content_cache))
- g.db.commit()
+ db.execute("INSERT INTO comments "
+ "('user_id', 'content', 'news_id', 'content_cache') "
+ "VALUES (?, ?, ?, ?)",
+ (user_id, content, news_id, content_cache))
+ db.commit()
return redirect(url_for('show_news', news_id=news_id))
@app.route('/news/<int:news_id>/edit', methods=['GET', 'POST'])
@login_required
def edit_news(news_id):
+ db = get_db()
if request.method == 'GET':
- news = query_db("SELECT * from news WHERE news.id = ?", (news_id,), True)
+ news = query_db(db, "SELECT * from news WHERE news.id = ?",
+ (news_id,), True)
if news["user_id"] == session['user_id']:
return render_template('news/add.html', news=news)
elif request.method == 'POST':
title = request.form['title']
content = request.form['content']
content_cache = rstify(content)
- g.db.execute("UPDATE news SET 'title'=?, 'content'=?, 'content_cache'=? "
+ db.execute("UPDATE news SET 'title'=?, 'content'=?, 'content_cache'=? "
"WHERE news.id =?",
(title, content, content_cache, news_id))
- g.db.commit()
+ db.commit()
return redirect(url_for('show_news', news_id=news_id))
@app.route('/user/<int:user_id>/')
@login_required
def view_user(user_id):
- user = query_db('SELECT * FROM users WHERE id= ?', (user_id,), True)
+ db = get_db()
+ user = query_db(db, 'SELECT * FROM users WHERE id= ?', (user_id,), True)
return render_template("user/show.html", user=user)
@app.route('/user/edit/', methods=['GET', 'POST'])
@login_required
def edit_user():
+ db = get_db()
if request.method == 'GET':
- user = query_db('SELECT * FROM users WHERE id= ?', (session['user_id'],),
- True)
+ user = query_db(db, 'SELECT * FROM users WHERE id= ?',
+ (session['user_id'],), True)
user = {k: user[k] for k in user.keys() if user[k]}
return render_template("user/edit.html", user=user)
elif request.method == 'POST':
@@ -220,8 +228,8 @@ def edit_user():
sqlstr = "UPDATE users SET email= ?, phone=?, birthday=?, nameday=?," \
"address_line1=?, address_line2=?, address_city_line=?, timezone=?, notify=? " \
"where id=?"
- g.db.execute(sqlstr, args)
- g.db.commit()
+ db.execute(sqlstr, args)
+ db.commit()
session["timezone"] = request.form["timezone"]
return redirect(url_for('view_user', user_id=session['user_id']))
@@ -232,17 +240,19 @@ def login():
error = None
if request.method == 'POST':
+ db = get_db()
username = request.form['username']
password = hashlib.md5(request.form['password']).hexdigest();
- user = query_db('select * from users where user_name = ?', (username,), True)
+ user = query_db(db, 'select * from users where user_name = ?',
+ (username,), True)
if user:
if user['password'] == password:
session['user_name'] = user['user_name']
session['user_id'] = user['id']
session['timezone'] = user['timezone'] or "UTC"
- g.db.execute("UPDATE users SET last_seen=? WHERE id=?",
+ db.execute("UPDATE users SET last_seen=? WHERE id=?",
(datetime.utcnow(),session['user_id']))
- g.db.commit()
+ db.commit()
return redirect(url_for('list_news'))
else:
error = u'Mot de passe incorrect'
@@ -259,7 +269,8 @@ def logout():
@app.route('/rss.xml')
def rss():
- news = query_db("SELECT * FROM news LEFT JOIN users ON "
+ db = get_db()
+ news = query_db(db, "SELECT * FROM news LEFT JOIN users ON "
"news.user_id=users.id ORDER BY news.date desc")
return render_template('rss.xml', news=news)