From 5ba49e6ecd93c3402332895b55287d47d0663a66 Mon Sep 17 00:00:00 2001 From: Midgard Date: Mon, 23 Sep 2019 16:25:34 +0200 Subject: [PATCH] Make /resto deal with vegan and unrecognized kinds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Better to show a fallback category if a kind isn't recognized than nothing at all! The code is refactored to have a table definition in RESTO_TABLES, this allows to DRY when recognizing unrecognized meals (hah). The ** operator is used to copy dicts while being able to amend them: {**meal, "name": …} is a copy of meal but with a different name. --- app/app.py | 46 +++++++++++++++++++++++++++++++++++++--------- 1 file changed, 37 insertions(+), 9 deletions(-) diff --git a/app/app.py b/app/app.py index a6b4d87..c7d812b 100644 --- a/app/app.py +++ b/app/app.py @@ -246,12 +246,24 @@ RESTO_TEMPLATE = """ ## Vegetoarisch {vegi_table} - +{uncategorized} ## Groensels {vegetable_table} """ +UNCATEGORIZED_TEMPLATE = """ +## Nog etwad anders... +{} +""" + +RESTO_TABLES = { + "soup_table": {"soup"}, + "meat_table": {"meat"}, + "fish_table": {"fish"}, + "vegi_table": {"vegetarian", "vegan"}, +} + @app.route('/resto', methods=['GET']) def resto_menu(): today = datetime.today() @@ -262,11 +274,14 @@ def resto_menu(): if not resto["open"]: return 'De resto is vandaag gesloten.' else: - def table_for(kind): - items = [meal for meal in resto["meals"] if meal["kind"] == kind] - if len(items) == 0: + def table_for(kinds): + items = [meal for meal in resto["meals"] if meal["kind"] in kinds] + return format_items(items) + + def format_items(items): + if not items: return "None :(" - maxwidth = max(map(lambda item: len(item["name"]), items)) + maxwidth = max(len(item["name"]) for item in items) return "\n".join("{name: <{width}}{price}".format( name=item["name"], width=maxwidth + 2, @@ -274,11 +289,24 @@ def resto_menu(): for item in items ) + recognized_kinds = set.union(*RESTO_TABLES.values()) + uncategorized_meals = [ + meal for meal in resto["meals"] + if meal["kind"] not in recognized_kinds + ] + + uncategorized = "" if not uncategorized_meals else \ + UNCATEGORIZED_TEMPLATE.format( + format_items([ + # Small hack: change "name" into "name (kind)" + {**meal, "name": "{} ({})".format(meal["name"], meal["kind"])} + for meal in uncategorized_meals + ]) + ) + return RESTO_TEMPLATE.format( - soup_table=table_for("soup"), - meat_table=table_for("meat"), - fish_table=table_for("fish"), - vegi_table=table_for("vegetarian"), + **{k: table_for(v) for k,v in RESTO_TABLES.items()}, + uncategorized=uncategorized, vegetable_table="\n".join(resto["vegetables"]) )