enhance ICapWaterLevel capability

This commit is contained in:
Romain Bignon 2012-02-14 18:19:03 +01:00
commit 8c7232f737
3 changed files with 42 additions and 42 deletions

View file

@ -34,17 +34,14 @@ class SachsenLevelBackend(BaseBackend, ICapWaterLevel):
DESCRIPTION = u"Level of Sachsen river" DESCRIPTION = u"Level of Sachsen river"
BROWSER = SachsenBrowser BROWSER = SachsenBrowser
def create_default_browser(self): def iter_gauge_history(self, id):
return self.create_browser()
def get_list(self):
return self.browser.get_rivers_list()
def get_history(self, id):
return self.browser.get_history(id) return self.browser.get_history(id)
def last(self, id): def get_last_measure(self, id):
return self.browser.last_seen(id) return self.browser.last_seen(id)
def search(self, pattern): def iter_gauges(self, pattern=None):
return self.browser.search(pattern) if pattern is None:
return self.browser.get_rivers_list()
else:
return self.browser.search(pattern)

View file

@ -20,14 +20,13 @@
from datetime import datetime, date, time from datetime import datetime, date, time
from weboob.tools.browser import BasePage from weboob.tools.browser import BasePage
from weboob.capabilities.gauge import Gauge, GaugeHistory from weboob.capabilities.gauge import Gauge, GaugeMeasure
from weboob.capabilities.base import NotAvailable from weboob.capabilities.base import NotAvailable
__all__ = ['ListPage', 'HistoryPage'] __all__ = ['ListPage', 'HistoryPage']
class ListPage(BasePage): class ListPage(BasePage):
def get_rivers_list(self): def get_rivers_list(self):
l = []
for pegel in self.document.getroot().xpath(".//a[@onmouseout='pegelaus()']"): for pegel in self.document.getroot().xpath(".//a[@onmouseout='pegelaus()']"):
data = pegel.attrib['onmouseover'].strip('pegelein(').strip(')').replace(",'", ",").split("',") data = pegel.attrib['onmouseover'].strip('pegelein(').strip(')').replace(",'", ",").split("',")
gauge = Gauge(int(data[7])) gauge = Gauge(int(data[7]))
@ -55,20 +54,17 @@ class ListPage(BasePage):
else: else:
gauge.forecast = NotAvailable gauge.forecast = NotAvailable
l.append(gauge) yield gauge
return l
class HistoryPage(BasePage): class HistoryPage(BasePage):
def get_history(self): def get_history(self):
l = []
table = self.document.getroot().cssselect('table[width="215"]') table = self.document.getroot().cssselect('table[width="215"]')
first = True first = True
for line in table[0].cssselect("tr"): for line in table[0].cssselect("tr"):
if first: if first:
first = False first = False
continue continue
history = GaugeHistory() history = GaugeMeasure()
leveldate = date(*reversed([int(x) for x in line[0].text_content().split(' ')[0].split(".")])) leveldate = date(*reversed([int(x) for x in line[0].text_content().split(' ')[0].split(".")]))
leveltime = time(*[int(x) for x in line[0].text_content().split(' ')[1].split(":")]) leveltime = time(*[int(x) for x in line[0].text_content().split(' ')[1].split(":")])
history.date = datetime.combine(leveldate, leveltime) history.date = datetime.combine(leveldate, leveltime)
@ -81,9 +77,8 @@ class HistoryPage(BasePage):
history.flow = float(line[2].text_content()) history.flow = float(line[2].text_content())
except: except:
history.flow = NotAvailable history.flow = NotAvailable
l.append(history)
return l yield history
def first_value(self, table, index): def first_value(self, table, index):
first = NotAvailable first = NotAvailable
@ -99,7 +94,7 @@ class HistoryPage(BasePage):
def last_seen(self): def last_seen(self):
tables = self.document.getroot().cssselect('table[width="215"]') tables = self.document.getroot().cssselect('table[width="215"]')
gauge = GaugeHistory() gauge = GaugeMeasure()
gauge.level = self.first_value(tables, 1) gauge.level = self.first_value(tables, 1)
gauge.flow = self.first_value(tables, 2) gauge.flow = self.first_value(tables, 2)

View file

@ -28,13 +28,13 @@ class Gauge(CapBaseObject):
CapBaseObject.__init__(self, id) CapBaseObject.__init__(self, id)
self.add_field('name', basestring) self.add_field('name', basestring)
self.add_field('river', basestring) self.add_field('river', basestring)
self.add_field('level', float) self.add_field('level', float)
self.add_field('flow', float) self.add_field('flow', float)
self.add_field('lastdate', datetime) self.add_field('lastdate', datetime)
self.add_field('forecast', basestring) self.add_field('forecast', basestring)
class GaugeHistory(CapBaseObject): class GaugeMeasure(CapBaseObject):
def __init__(self): def __init__(self):
CapBaseObject.__init__(self, None) CapBaseObject.__init__(self, None)
@ -42,22 +42,30 @@ class GaugeHistory(CapBaseObject):
self.add_field('flow', float) self.add_field('flow', float)
self.add_field('date', datetime) self.add_field('date', datetime)
class ICapWaterLevel(IBaseCap): class ICapWaterLevel(IBaseCap):
def get_lastlevel(self): def iter_gauge_history(self, id):
"""
Get history of a gauge.
@param id [str] ID of the river
@return [iter(GaugeMeasure)]
"""
raise NotImplementedError() raise NotImplementedError()
def get_list(self): def get_last_measure(self, id):
"""
Get last measure of the gauge.
@param id [str] ID of the gauge.
@return [GaugeMeasure]
"""
raise NotImplementedError() raise NotImplementedError()
def get_history(self, id): def iter_gauges(self, pattern=None):
"""
Iter gauges.
@param pattern [str] if specified, used to search gauges
@return [iter(Gauge)]
"""
raise NotImplementedError() raise NotImplementedError()
def last(self, id):
raise NotImplementedError()
def search(self, pattern):
raise NotImplementedError()