From 8c7232f7372140be47672095447c5ccddf6b70a9 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Tue, 14 Feb 2012 18:19:03 +0100 Subject: [PATCH] enhance ICapWaterLevel capability --- modules/sachsen/backend.py | 19 ++++++++---------- modules/sachsen/pages.py | 31 ++++++++++++----------------- weboob/capabilities/gauge.py | 38 ++++++++++++++++++++++-------------- 3 files changed, 44 insertions(+), 44 deletions(-) diff --git a/modules/sachsen/backend.py b/modules/sachsen/backend.py index 9c99cd5a..6d8c0c07 100644 --- a/modules/sachsen/backend.py +++ b/modules/sachsen/backend.py @@ -34,17 +34,14 @@ class SachsenLevelBackend(BaseBackend, ICapWaterLevel): DESCRIPTION = u"Level of Sachsen river" BROWSER = SachsenBrowser - def create_default_browser(self): - return self.create_browser() - - def get_list(self): - return self.browser.get_rivers_list() - - def get_history(self, id): + def iter_gauge_history(self, id): return self.browser.get_history(id) - def last(self, id): + def get_last_measure(self, id): return self.browser.last_seen(id) - - def search(self, pattern): - return self.browser.search(pattern) + + def iter_gauges(self, pattern=None): + if pattern is None: + return self.browser.get_rivers_list() + else: + return self.browser.search(pattern) diff --git a/modules/sachsen/pages.py b/modules/sachsen/pages.py index 9b784237..92b8ad00 100644 --- a/modules/sachsen/pages.py +++ b/modules/sachsen/pages.py @@ -17,17 +17,16 @@ # You should have received a copy of the GNU Affero General Public License # along with weboob. If not, see . -from datetime import datetime, date, time +from datetime import datetime, date, time 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 __all__ = ['ListPage', 'HistoryPage'] class ListPage(BasePage): - def get_rivers_list(self): - l = [] + def get_rivers_list(self): for pegel in self.document.getroot().xpath(".//a[@onmouseout='pegelaus()']"): data = pegel.attrib['onmouseover'].strip('pegelein(').strip(')').replace(",'", ",").split("',") gauge = Gauge(int(data[7])) @@ -44,31 +43,28 @@ class ListPage(BasePage): except: gauge.level = NotAvailable try: - gauge.flow = float(data[4]) + gauge.flow = float(data[4]) except: gauge.flow = NotAvailable bildforecast = data[5] - if bildforecast.__eq__("pf_gerade.png"): + if bildforecast.__eq__("pf_gerade.png"): gauge.forecast = "stable" elif bildforecast.__eq__("pf_unten.png"): gauge.forecast = "Go down" - else: + else: gauge.forecast = NotAvailable - - l.append(gauge) - return l + yield gauge class HistoryPage(BasePage): def get_history(self): - l = [] - table = self.document.getroot().cssselect('table[width="215"]') + table = self.document.getroot().cssselect('table[width="215"]') first = True for line in table[0].cssselect("tr"): if first: first = False continue - history = GaugeHistory() + history = GaugeMeasure() 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(":")]) history.date = datetime.combine(leveldate, leveltime) @@ -81,9 +77,8 @@ class HistoryPage(BasePage): history.flow = float(line[2].text_content()) except: history.flow = NotAvailable - l.append(history) - - return l + + yield history def first_value(self, table, index): first = NotAvailable @@ -99,8 +94,8 @@ class HistoryPage(BasePage): def last_seen(self): tables = self.document.getroot().cssselect('table[width="215"]') - gauge = GaugeHistory() + gauge = GaugeMeasure() gauge.level = self.first_value(tables, 1) gauge.flow = self.first_value(tables, 2) - return gauge + return gauge diff --git a/weboob/capabilities/gauge.py b/weboob/capabilities/gauge.py index bb2f078d..886de90b 100644 --- a/weboob/capabilities/gauge.py +++ b/weboob/capabilities/gauge.py @@ -28,13 +28,13 @@ class Gauge(CapBaseObject): CapBaseObject.__init__(self, id) self.add_field('name', basestring) - self.add_field('river', basestring) + self.add_field('river', basestring) self.add_field('level', float) self.add_field('flow', float) self.add_field('lastdate', datetime) self.add_field('forecast', basestring) -class GaugeHistory(CapBaseObject): +class GaugeMeasure(CapBaseObject): def __init__(self): CapBaseObject.__init__(self, None) @@ -42,22 +42,30 @@ class GaugeHistory(CapBaseObject): self.add_field('flow', float) self.add_field('date', datetime) - 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() - 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() - 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() - - def last(self, id): - raise NotImplementedError() - - def search(self, pattern): - raise NotImplementedError() - - -