diff options
| -rw-r--r-- | famille.py | 48 |
1 files changed, 24 insertions, 24 deletions
@@ -13,8 +13,14 @@ from email import utils from bs4 import BeautifulSoup from flask_mail import Mail, Message import locale -locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8') +from sqlalchemy import create_engine, MetaData, Table +from sqlalchemy.orm import scoped_session, sessionmaker +locale.setlocale(locale.LC_ALL, 'fr_FR.UTF-8') +engine = create_engine('sqlite:///famille.db', convert_unicode=True) +db_session = scoped_session(sessionmaker(autocommit=False, + autoflush=False, + bind=engine)) def rstify(string): w = Writer() result = core.publish_parts(string, writer=w)['fragment'] @@ -74,22 +80,12 @@ def query_db(db, query, args=(), one=False): cur.close() return rv -def connect_db(): - conn = sqlite3.connect(app.config['DATABASE'], - detect_types=sqlite3.PARSE_DECLTYPES) - conn.row_factory = sqlite3.Row - 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(error): - """Closes the database again at the end of the request.""" - if hasattr(g, 'sqlite_db'): - g.sqlite_db.close() +def shutdown_session(exception=None): + db_session.remove() + +def get_metadata(): + return MetaData(bind=engine) def login_required(f): @wraps(f) @@ -103,7 +99,10 @@ def login_required(f): @app.route('/news/') @login_required def list_news(): - db = get_db() + metadata = get_metadata() + users = Table('users', metadata, autoload=True) + news = Table('news', metadata, autoload=True) + comments = Table('comments', metadata, autoload=True) 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 " @@ -240,19 +239,20 @@ def login(): error = None if request.method == 'POST': - db = get_db() + metadata = get_metadata() + users = Table('users', metadata, autoload=True) username = request.form['username'] - password = hashlib.md5(request.form['password']).hexdigest(); - user = query_db(db, 'select * from users where user_name = ?', - (username,), True) + password = hashlib.md5(request.form['password']).hexdigest() + user = users.select(users.c.user_name == username).execute().first() + if user: if user['password'] == password: session['user_name'] = user['user_name'] session['user_id'] = user['id'] session['timezone'] = user['timezone'] or "UTC" - db.execute("UPDATE users SET last_seen=? WHERE id=?", - (datetime.utcnow(),session['user_id'])) - db.commit() + stmt = users.update().where(users.c.id == user['id']).\ + values(last_seen=datetime.utcnow()) + db_session.execute(stmt) return redirect(url_for('list_news')) else: error = u'Mot de passe incorrect' |
