From b9bfb3e5836429de8093cb60f18bb5488754175e Mon Sep 17 00:00:00 2001 From: Bezleputh Date: Wed, 6 Nov 2013 13:24:42 +0100 Subject: [PATCH] [hybride] Update to match with ICapCalendar new features --- modules/hybride/backend.py | 19 ++++++++++++++----- modules/hybride/browser.py | 4 ++-- modules/hybride/calendar.py | 3 ++- modules/hybride/pages.py | 18 ++++++++++++++---- modules/hybride/test.py | 2 +- 5 files changed, 33 insertions(+), 13 deletions(-) diff --git a/modules/hybride/backend.py b/modules/hybride/backend.py index db7f5ae0..a33fa67d 100644 --- a/modules/hybride/backend.py +++ b/modules/hybride/backend.py @@ -19,7 +19,7 @@ from weboob.tools.backend import BaseBackend -from weboob.capabilities.calendar import ICapCalendarEvent +from weboob.capabilities.calendar import ICapCalendarEvent, CATEGORIES from .browser import HybrideBrowser from .calendar import HybrideCalendarEvent @@ -34,18 +34,27 @@ class HybrideBackend(BaseBackend, ICapCalendarEvent): EMAIL = 'carton_ben@yahoo.fr' LICENSE = 'AGPLv3+' VERSION = '0.h' - + ASSOCIATED_CATEGORIES = [CATEGORIES.CINE] BROWSER = HybrideBrowser + def search_events(self, query): + if self.has_matching_categories(query): + with self.browser: + return self.browser.list_events(query.start_date, + query.end_date, + query.city, + query.categories) + def list_events(self, date_from, date_to=None): with self.browser: return self.browser.list_events(date_from, date_to) - def get_event(self, _id, event=None): + def get_event(self, _id): with self.browser: - return self.browser.get_event(_id, event) + return self.browser.get_event(_id) def fill_obj(self, event, fields): - self.get_event(event.id, event) + with self.browser: + return self.browser.get_event(event.id, event) OBJECTS = {HybrideCalendarEvent: fill_obj} diff --git a/modules/hybride/browser.py b/modules/hybride/browser.py index ed79d615..1073bed1 100644 --- a/modules/hybride/browser.py +++ b/modules/hybride/browser.py @@ -36,10 +36,10 @@ class HybrideBrowser(BaseBrowser): '%s://%s/programme/item/(.*?)' % (PROTOCOL, DOMAIN): EventPage, } - def list_events(self, date_from, date_to=None): + def list_events(self, date_from, date_to=None, city=None, categories=None): self.location('%s://%s/programme.html' % (self.PROTOCOL, self.DOMAIN)) assert self.is_on_page(ProgramPage) - return self.page.list_events(date_from, date_to) + return self.page.list_events(date_from, date_to, city, categories) @id2url(HybrideCalendarEvent.id2url) def get_event(self, url, event=None): diff --git a/modules/hybride/calendar.py b/modules/hybride/calendar.py index c9b9c14c..d85694a0 100644 --- a/modules/hybride/calendar.py +++ b/modules/hybride/calendar.py @@ -22,7 +22,8 @@ from weboob.capabilities.calendar import BaseCalendarEvent, TRANSP, STATUS, CATE class HybrideCalendarEvent(BaseCalendarEvent): - location = '18 rue Gosselet 59014 LILLE CEDEX' + location = '18 rue Gosselet' + city = 'Lille' sequence = 1 transp = TRANSP.TRANSPARENT status = STATUS.CONFIRMED diff --git a/modules/hybride/pages.py b/modules/hybride/pages.py index eda452a2..f4a41000 100644 --- a/modules/hybride/pages.py +++ b/modules/hybride/pages.py @@ -33,15 +33,15 @@ def format_date(date): class ProgramPage(BasePage): - def list_events(self, date_from, date_to=None): + def list_events(self, date_from, date_to=None, city=None, categories=None): divs = self.document.getroot().xpath("//div[@class='catItemView groupLeading']") for div in divs: if(self.is_event_in_valid_period(div, date_from, date_to)): - event = self.create_event(div) + event = self.create_event(div, city, categories) if event: yield event - def create_event(self, div): + def create_event(self, div, city=None, categories=None): re_id = re.compile('/programme/item/(.*?).html', re.DOTALL) header = self.parser.select(div, "div[@class='catItemHeader']", 1, method='xpath') date = self.parser.select(header, "span[@class='catItemDateCreated']", 1, method='xpath') @@ -52,7 +52,17 @@ class ProgramPage(BasePage): event.start_date = format_date(date.text) event.end_date = datetime.combine(event.start_date, time.max) event.summary = u'%s' % a_id.text_content().strip() - return event + if self.is_valid_event(event, city, categories): + return event + + def is_valid_event(self, event, city, categories): + if city and city != '' and city.upper() != event.city.upper(): + return False + + if categories and len(categories) > 0 and event.category not in categories: + return False + + return True def is_event_in_valid_period(self, div, date_from, date_to=None): header = self.parser.select(div, "div[@class='catItemHeader']", 1, method='xpath') diff --git a/modules/hybride/test.py b/modules/hybride/test.py index 1e409079..5cbcbf42 100644 --- a/modules/hybride/test.py +++ b/modules/hybride/test.py @@ -28,5 +28,5 @@ class HybrideTest(BackendTest): def test_hybride_list(self): l = list(self.backend.list_events(datetime.now())) assert len(l) - event = self.backend.get_event(l[0].id, None) + event = self.backend.get_event(l[0].id) self.assertTrue(event.url, 'URL for event "%s" not found: %s' % (event.id, event.url))