summaryrefslogtreecommitdiff
path: root/app.py
blob: 3eaafb23b26cc2a87ea44a8b2017ba55c58445f5 (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
#!/usr/bin/python3

import os
import psycopg2
import psycopg2.pool
import psycopg2.extras
from flask import Flask, g, render_template, send_from_directory
from werkzeug.contrib.cache import SimpleCache

app = Flask(__name__)
cache = SimpleCache()

db_config = {
    "host": os.environ.get("POSTGRESQL_DEST_HOST") or "localhost",
    "port": os.environ.get("POSTGRESQL_DEST_PORT") or 5432,
    "user": os.environ.get("POSTGRESQL_DEST_USER") or "vainweb",
    "password": os.environ.get("POSTGRESQL_DEST_PASSWORD") or "vainweb",
    "dbname": os.environ.get("POSTGRESQL_DEST_DB") or "vainsocial-web"
}

def dbpool():
    if not hasattr(g, "db_pool"):
        g.db_pool = psycopg2.pool.ThreadedConnectionPool(
            **db_config, minconn=1, maxconn=10)
    return g.db_pool

@app.teardown_appcontext
def db_disconnect(err):
    if hasattr(g, "db_pool"):
        g.db_pool.closeall()

@app.context_processor
def sql_processor():
    def sql_val(query):
        val = cache.get(query)
        if val is not None:
            return val.get(0)

        con = dbpool().getconn()
        c = con.cursor(cursor_factory=psycopg2.extras.DictCursor)

        c.execute(query)
        val = c.fetchone()
        cache.set(query, val, timeout=60*60)  # seconds

        c.close()
        dbpool().putconn(con)

        return val.get(0)

    return dict(sql_val=sql_val)

@app.route("/")
def index():
    return render_template("index.html")

@app.route("/assets/<path:path>")
def send_assets(path):
    return send_from_directory("templates/assets", path)

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