diff --git a/modules/sueurdemetal/backend.py b/modules/sueurdemetal/backend.py index f62aeeca..01ffdfc3 100644 --- a/modules/sueurdemetal/backend.py +++ b/modules/sueurdemetal/backend.py @@ -55,9 +55,17 @@ class SueurDeMetalBackend(BaseBackend, ICapCalendarEvent): yield self._make_event(d) def search_events(self, query): - city_id = self.find_city_id(query.city) - for d in self.browser.get_concerts_city(city_id): - yield self._make_event(d) + if not self.has_matching_categories(query): + raise StopIteration() + + if query.city: + city_id = self.find_city_id(query.city) + for d in self.browser.get_concerts_city(city_id): + if self._date_matches(d['date'], query): + yield self._make_event(d) + else: + for e in self.list_events(query.start_date, query.end_date): + yield e def get_event(self, _id): d = self.browser.get_concert(_id) @@ -110,6 +118,10 @@ class SueurDeMetalBackend(BaseBackend, ICapCalendarEvent): if c['id'] == _id: return c['name'] + def _date_matches(self, date, query): + return ((not query.start_date or query.start_date <= date) and + (not query.end_date or date <= query.end_date)) + def fill_concert(self, obj, fields): if set(fields) & set(('price', 'location', 'description')): return self.get_event(obj.id) diff --git a/modules/sueurdemetal/test.py b/modules/sueurdemetal/test.py index d2f1ce4b..e25a42fb 100644 --- a/modules/sueurdemetal/test.py +++ b/modules/sueurdemetal/test.py @@ -19,15 +19,29 @@ from weboob.tools.test import BackendTest -from weboob.capabilities.calendar import Query +from weboob.capabilities.calendar import Query, CATEGORIES +from datetime import datetime, timedelta class SueurDeMetalTest(BackendTest): BACKEND = 'sueurdemetal' def test_sueurdemetal_searchcity(self): q = Query() - q.city = 'paris' + q.city = u'paris' self.assertTrue(len(list(self.backend.search_events(q))) > 0) ev = self.backend.search_events(q).next() self.assertTrue(self.backend.get_event(ev.id)) + + def test_sueurdemetal_datefrom(self): + q = Query() + later = (datetime.now() + timedelta(days=31)) + q.start_date = later + + ev = self.backend.search_events(q).next() + self.assertTrue(later.date() <= ev.start_date.date()) + + def test_sueurdemetal_nocategory(self): + q = Query() + q.categories = [CATEGORIES.CINE] + self.assertTrue(len(list(self.backend.search_events(q))) == 0)