# http://flask.pocoo.org/ # FLASK_APP=wrfeed FLASK_DEBUG=1 WRFEED_SETTINGS=development.cfg python3 -m flask run -p 5002 # FLASK_APP=wrfeed WRFEED_SETTINGS=production.cfg python3 -m flask run from sqlalchemy.engine import create_engine from flask import Flask, send_from_directory, abort, g, jsonify from wrfeed.controllers.berichte import create_feed app = Flask(__name__) app.config.from_envvar('WRFEED_SETTINGS') def get_db(): """Opens a new database connection if there is none yet for the current application context. """ if not hasattr(g, 'db'): g.db_engine = create_engine(app.config['DATABASE_URI']) g.db = g.db_engine.connect() return g.db @app.teardown_appcontext def close_db(error): """Closes the database again at the end of the request.""" if hasattr(g, 'db'): g.db.close() @app.route("/") def hello(): return send_from_directory('templates', 'index.html') # actually, this is no template @app.route("/berichte/alle") def alle(): """Handles URLs like http://127.0.0.1:5000/berichte/alle http://www.winterrodeln.org/feed/berichte/alle """ return app.response_class(create_feed(get_db(), app.config['FEEDENTRYLIMIT']), mimetype='application/atom+xml') @app.route("/berichte/bahn/") def bahn(bahn): """Handles URLs like http://127.0.0.1:5000/berichte/bahn/kemater_alm http://www.winterrodeln.org/feed/berichte/bahn/kemater_alm """ return app.response_class(create_feed(get_db(), app.config['FEEDENTRYLIMIT'], page_title=bahn), mimetype='application/atom+xml') @app.route("/berichte/bahnen/") def bahnen(bahnen): """Handles URLs like http://127.0.0.1:5000/berichte/bahnen/5+280+251 http://www.winterrodeln.org/feed/berichte/bahnen/5+280+251 """ page_ids = bahnen.split('+') try: page_ids = [int(page_id) for page_id in page_ids] except ValueError: abort(400) # bad request return app.response_class(create_feed(get_db(), app.config['FEEDENTRYLIMIT'], page_ids=page_ids), mimetype='application/atom+xml') @app.route("/berichte/region/") def region(region): """Handles URLs like http://www.winterrodeln.org/feed/berichte/region/osttirol """ return app.response_class(create_feed(get_db(), app.config['FEEDENTRYLIMIT'], region_name=region), mimetype='application/atom+xml')