66 lines
1.6 KiB
Python
66 lines
1.6 KiB
Python
"""
|
|
web.py — huizenbot web interface
|
|
Single route: query SQLite, SSR listings into index.html template.
|
|
"""
|
|
import json
|
|
import sqlite3
|
|
import os
|
|
from flask import Flask, render_template, g
|
|
|
|
DB_PATH = os.environ.get("DB_PATH", "/data/huizenbot.db")
|
|
APP_ENV = os.environ.get("APP_ENV", "dev")
|
|
|
|
app = Flask(__name__)
|
|
|
|
|
|
def get_db():
|
|
if "db" not in g:
|
|
conn = sqlite3.connect(DB_PATH)
|
|
conn.row_factory = sqlite3.Row
|
|
g.db = conn
|
|
return g.db
|
|
|
|
|
|
@app.teardown_appcontext
|
|
def close_db(e=None):
|
|
db = g.pop("db", None)
|
|
if db is not None:
|
|
db.close()
|
|
|
|
|
|
@app.route("/")
|
|
def index():
|
|
conn = get_db()
|
|
rows = conn.execute("""
|
|
SELECT
|
|
id, url, source_makelaar, first_seen, last_seen, datum_aanmelding,
|
|
status, adres, postcode, stad,
|
|
prijs, woningtype, woonoppervlak, perceeloppervlak,
|
|
kamers, slaapkamers, bouwjaar, energielabel,
|
|
hero_image_url,
|
|
fiets_mark, fiets_michelle, ov_mark, ov_michelle,
|
|
extra
|
|
FROM woningen
|
|
WHERE status = 'beschikbaar'
|
|
ORDER BY first_seen DESC
|
|
""").fetchall()
|
|
|
|
listings = []
|
|
for row in rows:
|
|
d = dict(row)
|
|
try:
|
|
d["extra"] = json.loads(d["extra"]) if d["extra"] else {}
|
|
except Exception:
|
|
d["extra"] = {}
|
|
listings.append(d)
|
|
|
|
return render_template("index.html", listings_json=json.dumps(listings, ensure_ascii=False))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
if APP_ENV == "dev":
|
|
app.run(debug=True, host="0.0.0.0", port=5005)
|
|
else:
|
|
from waitress import serve
|
|
serve(app, host="0.0.0.0", port=5005)
|