aboutsummaryrefslogtreecommitdiffstats
path: root/wedding.py
blob: 3e883e1b49180854d00f8a33944ad99693ab6798 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# -*- coding: utf-8 -*-
import sqlite3
#all the imports
from flask import Flask, request, session, g, redirect, url_for, render_template
from flask import flash
from functools import wraps
from collections import defaultdict
from flask.ext.babel import Babel, gettext, refresh

app = Flask(__name__)
app.config.from_envvar('CONF')
babel = Babel(app)

@babel.localeselector
def get_locale():
    locale = session.get('lang', None)
    if locale is not None:
        return locale
    return request.accept_languages.best_match(['en', 'fr', 'sr'])

def query_db(query, args=(), one=False):
    cur = get_db().execute(query, args)
    rv = cur.fetchone() if one else cur.fetchall()
    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():
    db = getattr(g, 'sqlite_db', None)
    if db is None:
        db = g.sqlite_db = connect_db()
    return db

@app.teardown_appcontext
def close_db(error):
    """Closes the database again at the end of the request."""
    db = getattr(g, 'sqlite_db', None)
    if db:
        db.close()

def login_required(f):
    @wraps(f)
    def decorated_function(*args, **kwargs):
        if 'user_name' not in session:
            return redirect(url_for('login', next=request.url))
        return f(*args, **kwargs)
    return decorated_function

@app.route('/getting/')
@login_required
def getting_there():
    return render_template("getting.html")

@app.route('/gifts/')
@login_required
def gifts():
    return render_template("gifts.html")

@app.route('/lodging/')
@login_required
def lodging():
    return render_template("lodging.html")

@app.route('/rsvp/', methods=['GET', 'POST'])
@login_required
def rsvp():
    if request.method == 'GET':
        r = query_db("SELECT * from guests where user_name=?",
                     (session["user_name"],), one=True)
        return render_template("rsvp.html",
                               form=r)
    if request.method == 'POST':
        db = get_db()
        update_string = []
        args = []
        for k, v in request.form.items():
            update_string.append("{0}=?".format(k))
            if k in ["rsvp", "plusone", "kids"]:
                ## convert to integer
                args.append(int(v))
            else:
                args.append(v)
        update_string = ",".join(update_string)
        query = "UPDATE guests set {0} , lastupdate=current_timestamp " \
                "WHERE user_name=?".format(update_string)
        with db:
            db.execute(query, tuple(args+[session['user_name']]))
        flash(gettext("We have updated your information!"))
        return redirect(url_for('rsvp'))


@app.route('/')
@app.route('/home/')
@login_required
def main_page():
    return render_template("main.html")

@app.route('/logout')
def logout():
    session.clear()
    return redirect(url_for('login'))

@app.route('/login/', methods=['GET', 'POST'])
def login():
    if 'user_name' in session:
        return redirect(url_for('main_page'))

    error = None
    if request.method == 'POST':
        session['lang'] = request.form['language']
        refresh()
        db = get_db()
        with db:
            c = db.execute("SELECT * from guests where user_name=?",
                           (request.form['username'],))
            if not c.fetchone():
                flash(gettext("Wrong name"))
                return redirect(url_for('login'))
        if request.form['password'] != app.config['PASSWORD']:
            flash(gettext("Wrong password"))
            return redirect(url_for('login'))
        session['user_name'] = request.form['username']
        return redirect(url_for('main_page'))

    return render_template('login.html')

if __name__=="__main__":
    app.run()