aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGabriel Pérez-Cerezo <gabriel@gpcf.eu>2022-05-18 12:56:52 +0200
committerGabriel Pérez-Cerezo <gabriel@gpcf.eu>2022-05-18 12:56:52 +0200
commit9bccb42bba3e59edc3c66dfcd2ce80557e977ba1 (patch)
tree3e2c1b8a9e6bce1e2cc03e4d7a3936850abc1b38
parent971f633eaadec381bda398f024bab42fa1311bd0 (diff)
downloadmensa-9bccb42bba3e59edc3c66dfcd2ce80557e977ba1.tar.gz
mensa-9bccb42bba3e59edc3c66dfcd2ce80557e977ba1.tar.bz2
mensa-9bccb42bba3e59edc3c66dfcd2ce80557e977ba1.zip
Fix stw nonsense, add option to ignore boring stuff
bump version to 0.6
-rw-r--r--.gitignore8
-rwxr-xr-xbin/mensa4
-rw-r--r--mensa/backends/studentenwerk.py25
-rw-r--r--mensa/frontends/plain-text.py8
-rwxr-xr-xmensa/logic.py5
-rw-r--r--setup.py2
6 files changed, 40 insertions, 12 deletions
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."),