[hybride] Update to match with ICapCalendar new features

This commit is contained in:
Bezleputh 2013-11-06 13:24:42 +01:00 committed by Florent
commit b9bfb3e583
5 changed files with 33 additions and 13 deletions

View file

@ -19,7 +19,7 @@
from weboob.tools.backend import BaseBackend from weboob.tools.backend import BaseBackend
from weboob.capabilities.calendar import ICapCalendarEvent from weboob.capabilities.calendar import ICapCalendarEvent, CATEGORIES
from .browser import HybrideBrowser from .browser import HybrideBrowser
from .calendar import HybrideCalendarEvent from .calendar import HybrideCalendarEvent
@ -34,18 +34,27 @@ class HybrideBackend(BaseBackend, ICapCalendarEvent):
EMAIL = 'carton_ben@yahoo.fr' EMAIL = 'carton_ben@yahoo.fr'
LICENSE = 'AGPLv3+' LICENSE = 'AGPLv3+'
VERSION = '0.h' VERSION = '0.h'
ASSOCIATED_CATEGORIES = [CATEGORIES.CINE]
BROWSER = HybrideBrowser 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): def list_events(self, date_from, date_to=None):
with self.browser: with self.browser:
return self.browser.list_events(date_from, date_to) return self.browser.list_events(date_from, date_to)
def get_event(self, _id, event=None): def get_event(self, _id):
with self.browser: with self.browser:
return self.browser.get_event(_id, event) return self.browser.get_event(_id)
def fill_obj(self, event, fields): 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} OBJECTS = {HybrideCalendarEvent: fill_obj}

View file

@ -36,10 +36,10 @@ class HybrideBrowser(BaseBrowser):
'%s://%s/programme/item/(.*?)' % (PROTOCOL, DOMAIN): EventPage, '%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)) self.location('%s://%s/programme.html' % (self.PROTOCOL, self.DOMAIN))
assert self.is_on_page(ProgramPage) 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) @id2url(HybrideCalendarEvent.id2url)
def get_event(self, url, event=None): def get_event(self, url, event=None):

View file

@ -22,7 +22,8 @@ from weboob.capabilities.calendar import BaseCalendarEvent, TRANSP, STATUS, CATE
class HybrideCalendarEvent(BaseCalendarEvent): class HybrideCalendarEvent(BaseCalendarEvent):
location = '18 rue Gosselet 59014 LILLE CEDEX' location = '18 rue Gosselet'
city = 'Lille'
sequence = 1 sequence = 1
transp = TRANSP.TRANSPARENT transp = TRANSP.TRANSPARENT
status = STATUS.CONFIRMED status = STATUS.CONFIRMED

View file

@ -33,15 +33,15 @@ def format_date(date):
class ProgramPage(BasePage): 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']") divs = self.document.getroot().xpath("//div[@class='catItemView groupLeading']")
for div in divs: for div in divs:
if(self.is_event_in_valid_period(div, date_from, date_to)): 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: if event:
yield 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) re_id = re.compile('/programme/item/(.*?).html', re.DOTALL)
header = self.parser.select(div, "div[@class='catItemHeader']", 1, method='xpath') header = self.parser.select(div, "div[@class='catItemHeader']", 1, method='xpath')
date = self.parser.select(header, "span[@class='catItemDateCreated']", 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.start_date = format_date(date.text)
event.end_date = datetime.combine(event.start_date, time.max) event.end_date = datetime.combine(event.start_date, time.max)
event.summary = u'%s' % a_id.text_content().strip() 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): def is_event_in_valid_period(self, div, date_from, date_to=None):
header = self.parser.select(div, "div[@class='catItemHeader']", 1, method='xpath') header = self.parser.select(div, "div[@class='catItemHeader']", 1, method='xpath')

View file

@ -28,5 +28,5 @@ class HybrideTest(BackendTest):
def test_hybride_list(self): def test_hybride_list(self):
l = list(self.backend.list_events(datetime.now())) l = list(self.backend.list_events(datetime.now()))
assert len(l) 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)) self.assertTrue(event.url, 'URL for event "%s" not found: %s' % (event.id, event.url))