builder added, removed old files

This commit is contained in:
Hadrian Burkhardt
2023-11-30 02:32:40 +01:00
committed by f4lco
parent f714fc4c79
commit 58a53e608f
10 changed files with 447 additions and 306 deletions
+29 -62
View File
@@ -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)