ability to set an arrival or a departure time

This commit is contained in:
Romain Bignon 2011-07-13 15:12:17 +02:00
commit c284a24842
5 changed files with 37 additions and 7 deletions

View file

@ -50,9 +50,9 @@ class TransilienBackend(BaseBackend, ICapTravel):
departure.plateform = d['plateform'] departure.plateform = d['plateform']
yield departure yield departure
def iter_roadmap(self, departure, arrival): def iter_roadmap(self, departure, arrival, filters):
with self.browser: with self.browser:
roadmap = self.browser.get_roadmap(departure, arrival) roadmap = self.browser.get_roadmap(departure, arrival, filters)
for s in roadmap['steps']: for s in roadmap['steps']:
step = RoadStep(s['id']) step = RoadStep(s['id'])

View file

@ -54,11 +54,11 @@ class Transilien(BaseBrowser):
return self.page.iter_routes() return self.page.iter_routes()
def get_roadmap(self, departure, arrival): def get_roadmap(self, departure, arrival, filters):
self.location('/web/site/accueil/etat-trafic/chercher-itineraire/lang/en') self.location('/web/site/accueil/etat-trafic/chercher-itineraire/lang/en')
assert self.is_on_page(RoadmapSearchPage) assert self.is_on_page(RoadmapSearchPage)
self.page.search(departure, arrival) self.page.search(departure, arrival, filters.departure_time, filters.arrival_time)
assert self.is_on_page(RoadmapConfirmPage) assert self.is_on_page(RoadmapConfirmPage)
self.page.confirm() self.page.confirm()

View file

@ -49,7 +49,7 @@ class DeparturesPage(BasePage):
try : try :
time = datetime.datetime.combine(datetime.date.today(), datetime.time(*[int(x) for x in time.split(':')])) time = datetime.datetime.combine(datetime.date.today(), datetime.time(*[int(x) for x in time.split(':')]))
except ValueError: except ValueError:
self.logger.warning('Unable to parse datetime') self.logger.warning('Unable to parse datetime "%s"' % time)
yield {'type': to_unicode(code_mission), yield {'type': to_unicode(code_mission),
'time': time, 'time': time,

View file

@ -21,18 +21,37 @@
import re import re
import datetime import datetime
from weboob.capabilities.travel import RoadmapError
from weboob.tools.browser import BasePage from weboob.tools.browser import BasePage
from weboob.tools.misc import to_unicode from weboob.tools.misc import to_unicode
from weboob.tools.mech import ClientForm
__all__ = ['RoadmapPage'] __all__ = ['RoadmapPage']
class RoadmapSearchPage(BasePage): class RoadmapSearchPage(BasePage):
def search(self, departure, arrival): def search(self, departure, arrival, departure_time, arrival_time):
self.browser.select_form('formHiRecherche') self.browser.select_form('formHiRecherche')
self.browser['lieuDepart'] = departure.encode('utf-8') self.browser['lieuDepart'] = departure.encode('utf-8')
self.browser['lieuArrivee'] = arrival.encode('utf-8') self.browser['lieuArrivee'] = arrival.encode('utf-8')
time = None
if departure_time:
self.browser['typeHeure'] = ['1']
time = departure_time
elif arrival_time:
self.browser['typeHeure'] = ['-1']
time = arrival_time
if time:
try:
self.browser['jour'] = ['%d' % time.day]
self.browser['mois'] = ['%02d/%d' % (time.month, time.year)]
self.browser['heure'] = ['%02d' % time.hour]
self.browser['minutes'] = ['%02d' % (time.minute - (time.minute%5))]
except ClientForm.ItemNotFoundError:
raise RoadmapError('Unable to establish a roadmap with %s time at "%s"' % ('departure' if departure_time else 'arrival', time))
self.browser.submit() self.browser.submit()
class RoadmapConfirmPage(BasePage): class RoadmapConfirmPage(BasePage):

View file

@ -61,6 +61,16 @@ class RoadStep(CapBaseObject):
self.add_field('arrival', unicode) self.add_field('arrival', unicode)
self.add_field('duration', timedelta) self.add_field('duration', timedelta)
class RoadmapError(Exception):
pass
class RoadmapFilters(CapBaseObject):
def __init__(self):
CapBaseObject.__init__(self, '')
self.add_field('departure_time', datetime)
self.add_field('arrival_time', datetime)
class ICapTravel(IBaseCap): class ICapTravel(IBaseCap):
def iter_station_search(self, pattern): def iter_station_search(self, pattern):
""" """
@ -81,12 +91,13 @@ class ICapTravel(IBaseCap):
""" """
raise NotImplementedError() raise NotImplementedError()
def iter_roadmap(self, departure, arrival): def iter_roadmap(self, departure, arrival, filters):
""" """
Get a roadmap. Get a roadmap.
@param departure [str] name of departure station @param departure [str] name of departure station
@param arrival [str] name of arrival station @param arrival [str] name of arrival station
@param filters [RoadmapFilters] filters on search
@return [iter(RoadStep)] steps of roadmap @return [iter(RoadStep)] steps of roadmap
""" """
raise NotImplementedError() raise NotImplementedError()