From 9bccb42bba3e59edc3c66dfcd2ce80557e977ba1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20P=C3=A9rez-Cerezo?= Date: Wed, 18 May 2022 12:56:52 +0200 Subject: Fix stw nonsense, add option to ignore boring stuff bump version to 0.6 --- .gitignore | 8 ++++++++ bin/mensa | 4 ++-- mensa/backends/studentenwerk.py | 25 ++++++++++++++++++------- mensa/frontends/plain-text.py | 8 ++++++-- mensa/logic.py | 5 +++++ setup.py | 2 +- 6 files changed, 40 insertions(+), 12 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..88b880d --- /dev/null +++ b/.gitignore @@ -0,0 +1,8 @@ +*~ +deb_dist +*.egg_info +__pycache__ +build +*.pyc +*.tar.gz +dist diff --git a/bin/mensa b/bin/mensa index a6537e7..c304044 100755 --- a/bin/mensa +++ b/bin/mensa @@ -22,7 +22,7 @@ parser.add_argument('-G', '--vegan', dest='vegan', action='store_true', help='show only vegan meals') parser.add_argument('--studentenwerk-prices', dest='student', action='store_true', default=False, help='show only student prices') - +parser.add_argument('-b', '--no-boring', dest='no_boring', action="store_true", default=False, help="Do not show meals that are available every day.") parser.add_argument('--no-parallel', dest="no_parallel", action="store_true", default=False, help="Do not parallelize fetching, might help with rate-limited websites") @@ -76,5 +76,5 @@ restlist = None if args.rest : restlist = args.rest -foodl = logic.get_food(restlist, no_parallel=args.no_parallel, pos=args.pos, rad=args.rad, only_student_prices=args.student) +foodl = logic.get_food(restlist, no_parallel=args.no_parallel, pos=args.pos, rad=args.rad, only_student_prices=args.student, args=args) logic.render(foodl, form, only_veggie=veggie, only_student_prices=args.student, pos=args.pos, dist=args.dist, template=args.template) diff --git a/mensa/backends/studentenwerk.py b/mensa/backends/studentenwerk.py index b1f00fd..9c4cf02 100644 --- a/mensa/backends/studentenwerk.py +++ b/mensa/backends/studentenwerk.py @@ -11,8 +11,11 @@ import multiprocessing import datetime from collections import OrderedDict +boring = ["Desserts", "Salate"] # categories which are considered boring because they contain the same food every day. + from yapsy import NormalizePluginNameForModuleName as normalize mensenliste = {"TU Hardenbergstraße" : ["mensa-tu-hardenbergstra%C3%9Fe", (52.5097684, 13.3259478)], + "TU Veggie 2.0" : ["veggie2.0", (52.5097684, 13.3259478)], "TU Marchstraße": ["cafeteria-tu-marchstra%C3%9Fe", ( 52.5166071, 13.3234066)], "TU Skyline": ["cafeteria-tu-skyline", (52.5128648, 13.3200313)], "TU Architektur": ["cafeteria-tu-architektur", (52.5137508, 13.3234541)], @@ -43,16 +46,22 @@ class Studentenwerk(IPlugin) : for h,n in mensenliste.items() : r = Restaurant(normalize(h), h, self, "dummy", [n[0]], pos=n[1]) register_restaurant(r) - def get_food_items(self, mensa="mensa-tu-hardenbergstra%C3%9Fe", ignore_nudelauswahl=False, **options) : + def get_food_items(self, mensa="mensa-tu-hardenbergstra%C3%9Fe", **options) : document = self.fetch_page(mensa) groupsel = CSSSelector('.splGroupWrapper') groups = [e for e in groupsel(document)] fl = OrderedDict() + no_boring = False + if "args" in options : + no_boring = options["args"].no_boring for group in groups : try: category = CSSSelector('.splGroup')(group)[0].text except: - raise NoMenuError from None + continue + #raise NoMenuError from None + if no_boring and category in boring : + continue if not category in fl : fl[category] = [] sel = CSSSelector('.splMeal') @@ -60,15 +69,17 @@ class Studentenwerk(IPlugin) : for m in meals : namesel = CSSSelector('.bold') nm = namesel(m)[0].text - if ignore_nudelauswahl and "Nudelauswahl" in nm : + if no_boring and "Nudelauswahl" in nm : continue pricesel = CSSSelector('.col-md-3') veg = 0 if len(pricesel(m)[0]) >= 2 : - if "15" in pricesel(m)[0][1].attrib["src"] : - veg = 2 - elif "1.png" in pricesel(m)[0][1].attrib["src"] : - veg = 1 + for k in pricesel(m)[0]: + if "src" in k.attrib : + if "15" in k.attrib["src"] : + veg = 2 + elif "1.png" in k.attrib["src"] : + veg = 1 price = pricesel(m)[-1].text.strip() if "only_student_prices" in options and options["only_student_prices"] : price = only_student_prices(price) diff --git a/mensa/frontends/plain-text.py b/mensa/frontends/plain-text.py index cbd71e7..57e1648 100644 --- a/mensa/frontends/plain-text.py +++ b/mensa/frontends/plain-text.py @@ -1,5 +1,6 @@ from mensa import base from yapsy.IPlugin import IPlugin +import textwrap class TextRenderer(IPlugin) : def render_line(self, item) : vegkeys = [ "", "Vegetarian", "Vegan" ] @@ -7,8 +8,11 @@ class TextRenderer(IPlugin) : return "" desc = "" if item.desc : - desc = "\t "+item.desc+"\n" - return "\t" + item.name.ljust(80) + "\t"+ item.price.ljust(20) + vegkeys[item.veggie]+"\n"+desc + desc = " "+item.desc+"\n" + nameparts = textwrap.wrap(item.name, 60) + l = [ " " + nameparts[0].ljust(60) + " " + item.price.ljust(19) + vegkeys[item.veggie] ] + [ " "+ i.ljust(50) for i in nameparts[1:]] + # "\t" + item.name.ljust(80) + "\t"+ item.price.ljust(20) + vegkeys[item.veggie]+"\n"+desc + return "\n".join(l) + "\n" def render (self, foods, **options) : self.options = options diff --git a/mensa/logic.py b/mensa/logic.py index 3089e36..240d6ac 100755 --- a/mensa/logic.py +++ b/mensa/logic.py @@ -10,6 +10,11 @@ try: parallel=True except: parallel = False + + +import importlib + + def init_foodsources(): backends = PluginManager() diff --git a/setup.py b/setup.py index e337b60..8a0e624 100644 --- a/setup.py +++ b/setup.py @@ -10,7 +10,7 @@ def read(fname): setup( name = "mensa", - version = "0.4.1", + version = "0.6.0", author = "Gabriel Pérez-Cerezo", author_email = "gabriel@gpcf.eu", description = ("A program that fetches menus from various restaurants. Pre-installed by default are various cafeterias around TU Berlin."), -- cgit v1.2.3