ability to set an arrival or a departure time
This commit is contained in:
parent
c719865e7a
commit
c284a24842
5 changed files with 37 additions and 7 deletions
|
|
@ -50,9 +50,9 @@ class TransilienBackend(BaseBackend, ICapTravel):
|
|||
departure.plateform = d['plateform']
|
||||
yield departure
|
||||
|
||||
def iter_roadmap(self, departure, arrival):
|
||||
def iter_roadmap(self, departure, arrival, filters):
|
||||
with self.browser:
|
||||
roadmap = self.browser.get_roadmap(departure, arrival)
|
||||
roadmap = self.browser.get_roadmap(departure, arrival, filters)
|
||||
|
||||
for s in roadmap['steps']:
|
||||
step = RoadStep(s['id'])
|
||||
|
|
|
|||
|
|
@ -54,11 +54,11 @@ class Transilien(BaseBrowser):
|
|||
|
||||
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')
|
||||
|
||||
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)
|
||||
self.page.confirm()
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ class DeparturesPage(BasePage):
|
|||
try :
|
||||
time = datetime.datetime.combine(datetime.date.today(), datetime.time(*[int(x) for x in time.split(':')]))
|
||||
except ValueError:
|
||||
self.logger.warning('Unable to parse datetime')
|
||||
self.logger.warning('Unable to parse datetime "%s"' % time)
|
||||
|
||||
yield {'type': to_unicode(code_mission),
|
||||
'time': time,
|
||||
|
|
|
|||
|
|
@ -21,18 +21,37 @@
|
|||
import re
|
||||
import datetime
|
||||
|
||||
from weboob.capabilities.travel import RoadmapError
|
||||
from weboob.tools.browser import BasePage
|
||||
from weboob.tools.misc import to_unicode
|
||||
from weboob.tools.mech import ClientForm
|
||||
|
||||
|
||||
__all__ = ['RoadmapPage']
|
||||
|
||||
|
||||
class RoadmapSearchPage(BasePage):
|
||||
def search(self, departure, arrival):
|
||||
def search(self, departure, arrival, departure_time, arrival_time):
|
||||
self.browser.select_form('formHiRecherche')
|
||||
self.browser['lieuDepart'] = departure.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()
|
||||
|
||||
class RoadmapConfirmPage(BasePage):
|
||||
|
|
|
|||
|
|
@ -61,6 +61,16 @@ class RoadStep(CapBaseObject):
|
|||
self.add_field('arrival', unicode)
|
||||
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):
|
||||
def iter_station_search(self, pattern):
|
||||
"""
|
||||
|
|
@ -81,12 +91,13 @@ class ICapTravel(IBaseCap):
|
|||
"""
|
||||
raise NotImplementedError()
|
||||
|
||||
def iter_roadmap(self, departure, arrival):
|
||||
def iter_roadmap(self, departure, arrival, filters):
|
||||
"""
|
||||
Get a roadmap.
|
||||
|
||||
@param departure [str] name of departure station
|
||||
@param arrival [str] name of arrival station
|
||||
@param filters [RoadmapFilters] filters on search
|
||||
@return [iter(RoadStep)] steps of roadmap
|
||||
"""
|
||||
raise NotImplementedError()
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue