]> ToastFreeware Gitweb - philipp/winterrodeln/wrfeed.git/blob - wrfeed/wrfeed.py
Remove unused import.
[philipp/winterrodeln/wrfeed.git] / wrfeed / wrfeed.py
1 # http://flask.pocoo.org/
2 # FLASK_APP=wrfeed FLASK_DEBUG=1 WRFEED_SETTINGS=development.cfg python3 -m flask run -p 5002
3 # FLASK_APP=wrfeed WRFEED_SETTINGS=production.cfg python3 -m flask run
4 from flask import Flask, send_from_directory, abort, g
5 from sqlalchemy.engine import create_engine
6 from wrfeed.berichte import create_feed
7
8 app = Flask(__name__)
9 app.config.from_envvar('WRFEED_SETTINGS')
10
11
12 def get_db():
13     """Opens a new database connection if there is none yet for the
14     current application context.
15     """
16     if not hasattr(g, 'db'):
17         g.db_engine = create_engine(app.config['DATABASE_URI'])
18         g.db = g.db_engine.connect()
19     return g.db
20
21
22 @app.teardown_appcontext
23 def close_db(error):
24     """Closes the database again at the end of the request."""
25     if hasattr(g, 'db'):
26         g.db.close()
27
28
29 @app.route("/")
30 def hello():
31     return send_from_directory('templates', 'index.html')  # actually, this is no template
32
33
34 @app.route("/berichte/alle")
35 def alle():
36     """Handles URLs like
37     http://127.0.0.1:5000/berichte/alle
38     http://www.winterrodeln.org/feed/berichte/alle
39     """
40     return app.response_class(create_feed(get_db(), app.config['FEEDENTRYLIMIT']), mimetype='application/atom+xml')
41
42
43 @app.route("/berichte/bahn/<bahn>")
44 def bahn(bahn):
45     """Handles URLs like
46     http://127.0.0.1:5000/berichte/bahn/kemater_alm
47     http://www.winterrodeln.org/feed/berichte/bahn/kemater_alm
48     """
49     return app.response_class(create_feed(get_db(), app.config['FEEDENTRYLIMIT'], page_title=bahn),
50                               mimetype='application/atom+xml')
51
52
53 @app.route("/berichte/bahnen/<bahnen>")
54 def bahnen(bahnen):
55     """Handles URLs like
56     http://127.0.0.1:5000/berichte/bahnen/5+280+251
57     http://www.winterrodeln.org/feed/berichte/bahnen/5+280+251
58     """
59     page_ids = bahnen.split('+')
60     try:
61         page_ids = [int(page_id) for page_id in page_ids]
62     except ValueError:
63         abort(400) # bad request
64     return app.response_class(create_feed(get_db(), app.config['FEEDENTRYLIMIT'], page_ids=page_ids),
65                               mimetype='application/atom+xml')
66
67
68 @app.route("/berichte/region/<region>")
69 def region(region):
70     """Handles URLs like
71     http://www.winterrodeln.org/feed/berichte/region/osttirol
72     """
73     return app.response_class(create_feed(get_db(), app.config['FEEDENTRYLIMIT'], region_name=region),
74                               mimetype='application/atom+xml')