builder added, removed old files
This commit is contained in:
+29
-62
@@ -8,9 +8,7 @@ import cachetools as ct
|
||||
from flask import Flask, jsonify, make_response, url_for
|
||||
from flask.logging import create_logger
|
||||
|
||||
from stw_potsdam import feed
|
||||
from stw_potsdam.config import read_canteen_config
|
||||
from stw_potsdam.canteen_api import MenuParams, download_menu
|
||||
from stw_potsdam.swp_webspeiseplan_api import SWP_Webspeiseplan_API
|
||||
from stw_potsdam.swp_webspeiseplan_parser import SWP_Webspeiseplan_Parser
|
||||
|
||||
@@ -23,94 +21,63 @@ app.url_map.strict_slashes = False
|
||||
|
||||
log = create_logger(app)
|
||||
|
||||
if 'BASE_URL' in os.environ: # pragma: no cover
|
||||
base_url = urllib.parse.urlparse(os.environ.get('BASE_URL'))
|
||||
if "BASE_URL" in os.environ: # pragma: no cover
|
||||
base_url = urllib.parse.urlparse(os.environ.get("BASE_URL"))
|
||||
if base_url.scheme:
|
||||
app.config['PREFERRED_URL_SCHEME'] = base_url.scheme
|
||||
app.config["PREFERRED_URL_SCHEME"] = base_url.scheme
|
||||
if base_url.netloc:
|
||||
app.config['SERVER_NAME'] = base_url.netloc
|
||||
app.config["SERVER_NAME"] = base_url.netloc
|
||||
if base_url.path:
|
||||
app.config['APPLICATION_ROOT'] = base_url.path
|
||||
app.config["APPLICATION_ROOT"] = base_url.path
|
||||
|
||||
cache = ct.TTLCache(maxsize=30, ttl=CACHE_TIMEOUT)
|
||||
|
||||
swp_api = SWP_Webspeiseplan_API()
|
||||
|
||||
def canteen_not_found(config, canteen_name):
|
||||
log.warning('Canteen %s not found', canteen_name)
|
||||
configured = ', '.join(f"'{c}'" for c in config.keys())
|
||||
log.warning("Canteen %s not found", canteen_name)
|
||||
configured = ", ".join(f"'{c}'" for c in config.keys())
|
||||
message = f"Canteen '{canteen_name}' not found, available: {configured}"
|
||||
return make_response(message, 404)
|
||||
|
||||
|
||||
def _menu_params(canteen):
|
||||
return MenuParams(canteen_id=canteen.id, chash=canteen.chash)
|
||||
@ct.cached(cache=cache)
|
||||
def get_menu():
|
||||
log.debug("Downloading menu for SWP")
|
||||
return SWP_Webspeiseplan_API()
|
||||
|
||||
|
||||
@ct.cached(cache=cache, key=_menu_params)
|
||||
def get_menu(canteen):
|
||||
log.info('Downloading menu for %s', canteen)
|
||||
params = _menu_params(canteen)
|
||||
return download_menu(params)
|
||||
|
||||
|
||||
def _canteen_feed_xml(xml):
|
||||
response = make_response(xml)
|
||||
response.mimetype = 'text/xml'
|
||||
return response
|
||||
|
||||
|
||||
def canteen_menu_feed_xml(menu):
|
||||
xml = feed.render_menu(menu)
|
||||
return _canteen_feed_xml(xml)
|
||||
|
||||
|
||||
def canteen_meta_feed_xml(canteen):
|
||||
menu_feed_url = url_for('canteen_menu_feed',
|
||||
canteen_name=canteen.key,
|
||||
_external=True)
|
||||
xml = feed.render_meta(canteen, menu_feed_url)
|
||||
return _canteen_feed_xml(xml)
|
||||
|
||||
|
||||
@app.route('/canteens/<canteen_name>')
|
||||
@app.route('/canteens/<canteen_name>/meta')
|
||||
def canteen_meta_feed(canteen_name):
|
||||
config = read_canteen_config()
|
||||
|
||||
if canteen_name not in config:
|
||||
return canteen_not_found(config, canteen_name)
|
||||
|
||||
canteen = config[canteen_name]
|
||||
return canteen_meta_feed_xml(canteen)
|
||||
|
||||
|
||||
@app.route('/canteens/<canteen_name>/menu')
|
||||
def canteen_menu_feed(canteen_name):
|
||||
@app.route("/canteens/<canteen_name>")
|
||||
@app.route("/canteens/<canteen_name>/xml")
|
||||
def canteen_xml_feed(canteen_name):
|
||||
config = read_canteen_config()
|
||||
|
||||
if canteen_name not in config:
|
||||
return canteen_not_found(config, canteen_name)
|
||||
|
||||
canteen = config[canteen_name]
|
||||
swp_api = get_menu()
|
||||
swp_parser = SWP_Webspeiseplan_Parser(
|
||||
swp_api.menus[canteen.name],
|
||||
swp_api.meal_categories[canteen.name],
|
||||
swp_api.outlets[canteen.name],
|
||||
url_for("canteen_xml_feed", canteen_name=canteen.key, _external=True),
|
||||
)
|
||||
return _canteen_feed_xml(swp_parser.xml_feed)
|
||||
xml = swp_parser.xml_feed.decode()
|
||||
response = make_response(xml)
|
||||
response.mimetype = 'text/xml'
|
||||
return response
|
||||
|
||||
|
||||
@app.route('/')
|
||||
@app.route('/canteens')
|
||||
@app.route("/")
|
||||
@app.route("/canteens")
|
||||
def canteen_index():
|
||||
config = read_canteen_config()
|
||||
return jsonify({
|
||||
key: url_for('canteen_meta_feed', canteen_name=key, _external=True)
|
||||
for key in config
|
||||
})
|
||||
return jsonify(
|
||||
{
|
||||
key: url_for("canteen_xml_feed", canteen_name=key, _external=True)
|
||||
for key in config
|
||||
}
|
||||
)
|
||||
|
||||
|
||||
@app.route('/health_check')
|
||||
@app.route("/health_check")
|
||||
def health_check():
|
||||
return make_response("OK", 200)
|
||||
|
||||
Reference in New Issue
Block a user