From 3393fb73e978e245b9acff4af4dd75e3f96c1704 Mon Sep 17 00:00:00 2001 From: Romain Bignon Date: Sun, 4 Apr 2010 18:17:01 +0200 Subject: [PATCH] abstraction on scheduler --- weboob/backend.py | 6 ++- weboob/backends/bnporc/pages/accounts_list.py | 1 - weboob/backends/dlfp/pages/news.py | 2 +- weboob/frontends/monboob/scripts/monboob | 2 +- weboob/ouiboube.py | 17 ++++--- weboob/scheduler.py | 46 +++++++++++++++++++ weboob/tools/parser.py | 4 +- 7 files changed, 64 insertions(+), 14 deletions(-) create mode 100644 weboob/scheduler.py diff --git a/weboob/backend.py b/weboob/backend.py index f9b6696594..f1b18532ba 100644 --- a/weboob/backend.py +++ b/weboob/backend.py @@ -57,9 +57,11 @@ def __init__(self, weboob, config): raise Backend.ConfigError("Value of '%s' does not match regexp '%s'" % (name, field.regexp)) if not field.default is None: - if isinstance(field.default, int): + if isinstance(field.default, bool): + value = value.lower() in ('1', 'true', 'on', 'yes') + elif isinstance(field.default, int): value = int(value) - if isinstance(field.default, float): + elif isinstance(field.default, float): value = float(value) self.config[name] = value diff --git a/weboob/backends/bnporc/pages/accounts_list.py b/weboob/backends/bnporc/pages/accounts_list.py index f8fb6af81e..da0cc5e3ba 100644 --- a/weboob/backends/bnporc/pages/accounts_list.py +++ b/weboob/backends/bnporc/pages/accounts_list.py @@ -22,7 +22,6 @@ from weboob.capabilities.bank import Account from weboob.tools.browser import BasePage -from weboob.tools.parser import tostring class AccountsList(BasePage): LINKID_REGEXP = re.compile(".*ch4=(\w+).*") diff --git a/weboob/backends/dlfp/pages/news.py b/weboob/backends/dlfp/pages/news.py index a749ca77bc..678d47fcb4 100644 --- a/weboob/backends/dlfp/pages/news.py +++ b/weboob/backends/dlfp/pages/news.py @@ -84,7 +84,7 @@ def __init__(self, _id, tree): date_s = unicode(subdivs[1].text) else: date_s = unicode(div.find('i').tail) - print date_s + #print date_s if div.attrib.get('class', '').startswith('bodydiv '): self.body = tostring(div) diff --git a/weboob/frontends/monboob/scripts/monboob b/weboob/frontends/monboob/scripts/monboob index 0499281975..08e58f6f75 100755 --- a/weboob/frontends/monboob/scripts/monboob +++ b/weboob/frontends/monboob/scripts/monboob @@ -48,7 +48,7 @@ class Monboob(BaseApplication): self.weboob.load_backends(ICapMessages) - self.weboob.schedule(self.config.get('interval'), self.process) + self.weboob.repeat(self.config.get('interval'), self.process) self.weboob.loop() def process(self): diff --git a/weboob/ouiboube.py b/weboob/ouiboube.py index fc01dd1491..952b314767 100644 --- a/weboob/ouiboube.py +++ b/weboob/ouiboube.py @@ -19,20 +19,22 @@ """ import os -import sched -import time from weboob.modules import ModulesLoader +from weboob.scheduler import Scheduler class Weboob: WORKDIR = os.path.join(os.path.expanduser('~'), '.weboob') BACKENDS_FILENAME = 'backends' - def __init__(self, app_name, workdir=WORKDIR): + def __init__(self, app_name, workdir=WORKDIR, scheduler=None): self.app_name = app_name self.workdir = workdir self.backends = {} - self.scheduler = sched.scheduler(time.time, time.sleep) + + if scheduler is None: + scheduler = Scheduler() + self.scheduler = scheduler self.modules_loader = ModulesLoader() self.modules_loader.load() @@ -54,7 +56,10 @@ def iter_backends(self, caps=None): yield (name, backend) def schedule(self, interval, function, *args): - self.scheduler.enter(interval, 1, function, args) + return self.scheduler.schedule(interval, function, *args) + + def repeat(self, interval, function, *args): + return self.scheduler.repeat(interval, function, *args) def loop(self): - self.scheduler.run() + return self.scheduler.run() diff --git a/weboob/scheduler.py b/weboob/scheduler.py new file mode 100644 index 0000000000..d84560e3b8 --- /dev/null +++ b/weboob/scheduler.py @@ -0,0 +1,46 @@ +# -*- coding: utf-8 -*- + +""" +Copyright(C) 2010 Romain Bignon + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, version 3 of the License. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +""" + +import sched +import time + +class Scheduler(object): + def __init__(self): + self.scheduler = sched.scheduler(time.time, time.sleep) + self.running = False + + def schedule(self, interval, function, *args): + return self.scheduler.enter(interval, 1, function, args) + + def repeat(self, interval, function, *args): + return self.scheduler.enter(interval, 1, self._repeated_cb, (interval, function, args)) + + def run(self): + self.running = True + while self.running: + self.scheduler.run() + return True + + def want_stop(self): + self.running = False + + def _repeated_cb(self, interval, func, args): + func(*args) + self.repeat(interval, func, *args) diff --git a/weboob/tools/parser.py b/weboob/tools/parser.py index 0221e014ef..e01edcbc04 100644 --- a/weboob/tools/parser.py +++ b/weboob/tools/parser.py @@ -33,9 +33,7 @@ class HTMLTreeBuilder(HTMLParser): def __init__(self, encoding=None): HTMLParser.__init__(self) - if target is None: - target = ElementTree.TreeBuilder() - self._target = target + self._target = ElementTree.TreeBuilder() def doctype(self, name, pubid, system): pass -- GitLab