headline/view/app.py

85 lines
No EOL
1.8 KiB
Python

#!/usr/bin/python3
import sqlite3
from flask import Flask, request, render_template, g, send_from_directory
from flask_paginate import Pagination, get_page_parameter
import confuse
DATABASE = "../data/diffs.db"
CONFIG_FILE = "../data/config.yaml"
config = confuse.Configuration('headline', __name__)
config.set_file(CONFIG_FILE)
app = Flask(__name__)
def get_db():
db = getattr(g, '_database', None)
if db is None:
db = g._database = sqlite3.connect(DATABASE)
db.row_factory = sqlite3.Row
return db
@app.teardown_appcontext
def close_connection(exception):
db = getattr(g, '_database', None)
if db is not None:
db.close()
@app.route('/')
def index():
db = get_db().cursor()
db.execute('SELECT count(diff_id) FROM diffs')
diff_count = db.fetchall()[0][0]
#flask-paginate
page = request.args.get(get_page_parameter(), type=int, default=1)
pagination = Pagination(page=page, total=diff_count, record_name='diffs', css_framework='bootstrap5')
page_skip = pagination.skip
per_page = pagination.per_page
db.execute("SELECT * FROM diffs ORDER BY diff_id DESC LIMIT ? OFFSET ?", (per_page,page_skip))
diffs = db.fetchall()
return render_template('./index.html',
diffs=diffs,
pagination=pagination,
diff_count = diff_count
)
@app.route('/about')
def about():
return render_template('about.html')
@app.route('/feeds')
def feed_list():
feeds = []
for conf in config['feeds']:
feed = {
'rss_source' : str(conf['rss_source']),
'unique_tag' : str(conf['unique_tag']),
'feed_name' : str(conf['name'])
}
feeds.append(feed)
return render_template('feeds.html', feeds=feeds)
@app.route('/robots.txt')
def static_from_root():
return send_from_directory(app.static_folder, request.path[1:])
if __name__ == "__main__":
app.run(host="0.0.0.0")