diff --git a/weboob/backends/bnporc/pages/account_coming.py b/weboob/backends/bnporc/pages/account_coming.py index b064f911..fc3ef1f8 100644 --- a/weboob/backends/bnporc/pages/account_coming.py +++ b/weboob/backends/bnporc/pages/account_coming.py @@ -1,26 +1,28 @@ # -*- coding: utf-8 -*- -""" -Copyright(C) 2009-2010 Romain Bignon +# Copyright(C) 2009-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. -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. - -""" from weboob.tools.browser import BasePage from weboob.capabilities.bank import Operation + +__all__ = ['AccountComing'] + + class AccountComing(BasePage): def on_loaded(self): @@ -39,12 +41,12 @@ class AccountComing(BasePage): if child.tail: label += child.tail if tds[1].tail: label += tds[1].tail label = label.strip() - amount = tds[2].text.replace('.','').replace(',','.') + amount = tds[2].text.replace('.', '').replace(',', '.') operation = Operation() - operation.setDate(date) - operation.setLabel(label) - operation.setAmount(float(amount)) + operation.date = date + operation.label = label + operation.amount = float(amount) self.operations.append(operation) def get_operations(self): diff --git a/weboob/backends/bnporc/pages/accounts_list.py b/weboob/backends/bnporc/pages/accounts_list.py index c5d6ea31..9ef64e2b 100644 --- a/weboob/backends/bnporc/pages/accounts_list.py +++ b/weboob/backends/bnporc/pages/accounts_list.py @@ -37,11 +37,11 @@ class AccountsList(BasePage): for td in tr.getiterator('td'): if td.attrib.get('headers', '').startswith('Numero_'): id = td.text - account.setID(long(''.join(id.split(' ')))) + account.id = ''.join(id.split(' ')) elif td.attrib.get('headers', '').startswith('Libelle_'): a = td.findall('a') label = unicode(a[0].text) - account.setLabel(label) + account.label = label m = self.LINKID_REGEXP.match(a[0].attrib.get('href', '')) if m: account.setLinkID(m.group(1)) @@ -49,7 +49,7 @@ class AccountsList(BasePage): a = td.findall('a') balance = a[0].text balance = balance.replace('.','').replace(',','.') - account.setBalance(float(balance)) + account.balance = float(balance) elif td.attrib.get('headers', '').startswith('Avenir'): a = td.findall('a') coming = a[0].text diff --git a/weboob/backends/cragr/pages/accounts_list.py b/weboob/backends/cragr/pages/accounts_list.py index cf9f00a0..3249e9ca 100644 --- a/weboob/backends/cragr/pages/accounts_list.py +++ b/weboob/backends/cragr/pages/accounts_list.py @@ -30,8 +30,8 @@ class AccountsList(CragrBasePage): for div in self.document.getiterator('div'): if div.attrib.get('class', '') == 'dv' and div.getchildren()[0].tag == 'br': account = Account() - account.setLabel(div.find('a').text.strip()) - account.setID(long(div.findall('br')[1].tail.strip())) + account.label = div.find('a').text.strip() + account.id = div.findall('br')[1].tail.strip() s = div.find('div').find('span').find('b').text balance = u'' for c in s: @@ -39,6 +39,6 @@ class AccountsList(CragrBasePage): balance += c if c == ',': balance += '.' - account.setBalance(float(balance)) + account.balance = float(balance) l.append(account) return l diff --git a/weboob/capabilities/bank.py b/weboob/capabilities/bank.py index 2d9326b1..74a37941 100644 --- a/weboob/capabilities/bank.py +++ b/weboob/capabilities/bank.py @@ -1,51 +1,49 @@ # -*- coding: utf-8 -*- -""" -Copyright(C) 2010 Romain Bignon +# 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. -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. - -""" from .cap import ICap -class AccountNotFound(Exception): pass +class AccountNotFound(Exception): + pass class Account(object): def __init__(self): self.id = 0 self.label = '' - self.balance = 0.0 - self.coming = 0.0 + self._balance = 0.0 + self._coming = 0.0 self.link_id = '' - def setID(self, id): - assert isinstance(id, (int,long)) - self.id = id + @property + def balance(self): + return self._balance - def setLabel(self, label): self.label = label + @balance.setter + def balance(self, value): + self._balance = float(value) - def setBalance(self, balance): - assert isinstance(balance, float) - self.balance = balance + @property + def coming(self): + return self._coming - def setComing(self, coming): - assert isinstance(coming, float) - self.coming = coming - - def setLinkID(self, link): - self.link_id = link + @coming.setter + def coming(self, value): + self._coming = float(value) def __repr__(self): return u"" % (self.id, self.label) @@ -54,22 +52,27 @@ class Account(object): class Operation(object): def __init__(self): self.date = None - self.label = u'' - self.amount = 0.0 + self._label = u'' + self._amount = 0.0 def __repr__(self): return "" % (self.date, self.label, self.amount) - def setDate(self, date): - #assert isinstance(date, datetime.datetime) - self.date = date + @property + def label(self): + return self._label - def setLabel(self, label): - self.label = str(label) + @label.setter + def label(self, value): + self._label = str(value) - def setAmount(self, amount): - assert isinstance(amount, float) - self.amount = amount + @property + def amount(self): + return self._amount + + @amount.setter + def amount(self, value): + self._amount = float(value) class ICapBank(ICap): diff --git a/weboob/ouiboube.py b/weboob/ouiboube.py index 8b012fe1..8739512d 100644 --- a/weboob/ouiboube.py +++ b/weboob/ouiboube.py @@ -1,32 +1,34 @@ # -*- coding: utf-8 -*- -""" -Copyright(C) 2010 Romain Bignon +# 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. -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. - -""" from __future__ import with_statement -import os from logging import warning +import os +import sys from weboob.bcall import BackendsCall, CallErrors from weboob.modules import ModulesLoader, BackendsConfig from weboob.scheduler import Scheduler +if sys.version_info[:2] <= (2, 5): + import weboob.tools.property + __all__ = ['Weboob', 'CallErrors'] diff --git a/weboob/tools/property.py b/weboob/tools/property.py new file mode 100644 index 00000000..6310009c --- /dev/null +++ b/weboob/tools/property.py @@ -0,0 +1,50 @@ +# -*- coding: utf-8 -*- + +# For Python 2.5-, this will enable the simliar property mechanism as in +# Python 2.6+/3.0+. The code is based on +# http://bruynooghe.blogspot.com/2008/04/xsetter-syntax-in-python-25.html + +# Copyright(C) 2010 Christophe Benz +# +# 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 sys +import __builtin__ + + +class property(property): + def __init__(self, fget, *args, **kwargs): + self.__doc__ = fget.__doc__ + super(property, self).__init__(fget, *args, **kwargs) + + def setter(self, fset): + cls_ns = sys._getframe(1).f_locals + for k, v in cls_ns.iteritems(): + if v == self: + propname = k + break + cls_ns[propname] = property(self.fget, fset, self.fdel, self.__doc__) + return cls_ns[propname] + + def deleter(self, fdel): + cls_ns = sys._getframe(1).f_locals + for k, v in cls_ns.iteritems(): + if v == self: + propname = k + break + cls_ns[propname] = property(self.fget, self.fset, fdel, self.__doc__) + return cls_ns[propname] + +__builtin__.property = property