diff --git a/contrib/boobot.py b/contrib/boobot.py
index 7bbfe6df1441ffb6e940ba34c6fe7b1eb11d00c0..8ffb57662fb237f41c26fdc6c627ccb1229f308e 100755
--- a/contrib/boobot.py
+++ b/contrib/boobot.py
@@ -33,6 +33,7 @@
IRC_SERVER = 'irc.freenode.org'
STORAGE_FILE = 'boobot.storage'
+
class MyThread(Thread):
def __init__(self, bot):
Thread.__init__(self)
@@ -50,9 +51,9 @@ def run(self):
self.weboob.loop()
def find_keywords(self, text):
- for word in ['weboob', 'videoob', 'havesex', 'havedate', 'monboob', 'boobmsg', \
- 'flatboob', 'boobill', 'pastoob', 'radioob', 'translaboob', 'traveloob', \
- 'boobathon', 'boobank', 'boobtracker', 'comparoob', 'wetboobs', \
+ for word in ['weboob', 'videoob', 'havesex', 'havedate', 'monboob', 'boobmsg',
+ 'flatboob', 'boobill', 'pastoob', 'radioob', 'translaboob', 'traveloob',
+ 'boobathon', 'boobank', 'boobtracker', 'comparoob', 'wetboobs',
'webcontentedit', 'weboorrents', 'capabilit', u'sàt', u'salut à toi']:
if word in text.lower():
return word
@@ -80,6 +81,7 @@ def iter_messages(backend):
def stop(self):
self.weboob.want_stop()
+
class TestBot(SingleServerIRCBot):
def __init__(self, channel, nickname, server, port=6667):
SingleServerIRCBot.__init__(self, [(server, port)], nickname, nickname + "`")
@@ -121,6 +123,7 @@ def obj_info_housing(self, backend, id):
if h:
self.send_message(u'Housing: %s (%sm² / %s%s)' % (h.title, h.area, h.cost, h.currency))
+
def main():
logging.basicConfig(level=logging.DEBUG)
bot = TestBot(IRC_CHANNEL, IRC_NICKNAME, IRC_SERVER)
diff --git a/contrib/downloadboob/downloadboob.py b/contrib/downloadboob/downloadboob.py
index babce1c4706e5018a7e78210d73fb03059b19b02..49e9fcebeaaeeb970ca01a3a6580e1d0f9c5504a 100755
--- a/contrib/downloadboob/downloadboob.py
+++ b/contrib/downloadboob/downloadboob.py
@@ -39,14 +39,18 @@
# end of hack
+
def removeNonAscii(s): return "".join(i for i in s if ord(i)<128)
rx = re.compile(u'[ \\/\\?\\:\\>\\<\\!\\\\\\*]+', re.UNICODE)
+
+
def removeSpecial(s):
return rx.sub(u' ', u'%s' % s)
DOWNLOAD_DIRECTORY=".files"
+
class Downloadboob:
def __init__(self, backend_name, download_directory, links_directory):
diff --git a/contrib/videoob_web/videoob_web/videoob_web.py b/contrib/videoob_web/videoob_web/videoob_web.py
index 465531444fc2665e8fbea96b687bb6f9a8620f30..822e5386359f45862c471ca2da42c886ce943921 100644
--- a/contrib/videoob_web/videoob_web/videoob_web.py
+++ b/contrib/videoob_web/videoob_web/videoob_web.py
@@ -100,7 +100,7 @@ def index(self, req):
page_url=video.page_url,
url=video.url if video.url else '/download?id=%s' % video.id,
thumbnail_url=video.thumbnail.url,
- ) \
+ )
for video in backend.search_videos(pattern=q, nsfw=nsfw)]
if videos:
if merge:
diff --git a/docs/source/genapi.py b/docs/source/genapi.py
index 53a6c0922f56872d8799284e7de5874049bb0f7e..9994c52a76d8ec3877151fa464b2468adeec0529 100755
--- a/docs/source/genapi.py
+++ b/docs/source/genapi.py
@@ -4,6 +4,7 @@
import os
+
def genapi():
os.system('rm -rf api')
os.system('mkdir api')
diff --git a/modules/arte/pages.py b/modules/arte/pages.py
index e391ee037841579e56cbaa81f2ee7ba9f3010cec..230b73fc5bfff747b2daf10ab00f64d9d2a9223a 100644
--- a/modules/arte/pages.py
+++ b/modules/arte/pages.py
@@ -75,6 +75,7 @@ def iter_videos(self):
yield video
+
class VideoPage(BasePage):
def get_video(self, video=None, lang='fr', quality='hd'):
if not video:
diff --git a/modules/attilasub/pages.py b/modules/attilasub/pages.py
index 3cd0ae1fab190d31edd83270bfc5723fc78ef075..31b2092a87b3f4dddd60c84972c1ed0b2e86e9ce 100644
--- a/modules/attilasub/pages.py
+++ b/modules/attilasub/pages.py
@@ -87,7 +87,7 @@ def iter_subtitles(self,language, pattern):
traduced_title_words = traduced_title.split()
original_title_words = original_title.split()
- # if the pattern is one word and in the title OR if the
+ # if the pattern is one word and in the title OR if the
# intersection between pattern and the title is at least 2 words
if (len(pattern_words) == 1 and pattern in traduced_title_words) or\
(len(pattern_words) == 1 and pattern in original_title_words) or\
diff --git a/modules/attilasub/test.py b/modules/attilasub/test.py
index 942d37ef163e9ea35d62796499aa8a13633efb71..2746db658278a73f03392b5799e5ab5d9565654e 100644
--- a/modules/attilasub/test.py
+++ b/modules/attilasub/test.py
@@ -22,6 +22,7 @@
import urllib
from random import choice
+
class AttilasubTest(BackendTest):
BACKEND = 'attilasub'
diff --git a/modules/aum/backend.py b/modules/aum/backend.py
index f640008c4a5d7610005a275770e0c0223f9a4d03..bf57762f10774bffa4cbf3548f596fb81ed95913 100644
--- a/modules/aum/backend.py
+++ b/modules/aum/backend.py
@@ -55,6 +55,7 @@ def parse_dt(s):
d = _parse_dt(s)
return local2utc(d)
+
class AuMBackend(BaseBackend, ICapMessages, ICapMessagesPost, ICapDating, ICapChat, ICapContact, ICapAccount):
NAME = 'aum'
MAINTAINER = u'Romain Bignon'
@@ -503,6 +504,7 @@ def register_account(klass, account):
browser = None
REGISTER_REGEXP = re.compile('.*http://www.adopteunmec.com/register4.php\?([^\' ]*)\'')
+
def confirm_account(self, mail):
msg = email.message_from_string(mail)
diff --git a/modules/aum/browser.py b/modules/aum/browser.py
index f15b368bed257d8a0baa37bdc34b0e08deb0dab5..c420e5a66da90de54bb83320cdbae7f209c7085a 100644
--- a/modules/aum/browser.py
+++ b/modules/aum/browser.py
@@ -64,6 +64,7 @@ def __init__(self, code):
Exception.__init__(self, self.ERRORS.get(code, code))
self.code = code
+
class AuMBrowser(BaseBrowser):
DOMAIN = 'www.adopteunmec.com'
APIKEY = 'fb0123456789abcd'
diff --git a/modules/aum/captcha.py b/modules/aum/captcha.py
index 462d359a0270effb79a5ca0a66763f199fa4c087..44683a950e6d1b460d70a6d465668f03c51bb885 100644
--- a/modules/aum/captcha.py
+++ b/modules/aum/captcha.py
@@ -26,8 +26,10 @@
except ImportError:
raise ImportError('Please install python-imaging')
+
class CaptchaError(Exception): pass
+
class Tile(object):
hash = {
'bc8d52d96058478a6def26226145d53b': 'A',
@@ -115,6 +117,7 @@ def letter(self):
print 'hash: %s' % checksum
raise CaptchaError()
+
class Captcha(object):
def __init__(self, f):
self.img = Image.open(f)
@@ -156,6 +159,7 @@ def text(self):
s += tile.letter
return s
+
class Decoder(object):
def __init__(self):
self.hash = {}
diff --git a/modules/aum/contact.py b/modules/aum/contact.py
index 73556556099da253ad9f5e8d35d563fadaa73044..edf28680a6aa97371144f77d0c81f7316f47f2c2 100644
--- a/modules/aum/contact.py
+++ b/modules/aum/contact.py
@@ -140,6 +140,7 @@ def get_value(self, profile, consts):
labels.append(consts[self.key][i])
return labels
+
class Contact(_Contact):
TABLE = OrderedDict((
('_info', OrderedDict((
diff --git a/modules/axabanque/pages.py b/modules/axabanque/pages.py
index e74565de06bf4ef33774504b382640a77fc6682b..41d0265b931f7a32be1c026e7b33176c27a7e0d7 100644
--- a/modules/axabanque/pages.py
+++ b/modules/axabanque/pages.py
@@ -40,6 +40,7 @@ class UnavailablePage(BasePage):
def on_loaded(self):
raise BrowserUnavailable()
+
class VirtKeyboard(MappedVirtKeyboard):
symbols={'0':'f47e48cfdf3abc6716a6b0aadf8eebe3',
'1':'3495abaf658dc550e51c5c92ea56b60b',
@@ -148,6 +149,7 @@ def get_list(self):
account._args = args
yield account
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile('^RET(RAIT) DAB (?P
\d{2})/(?P\d{2}) (?P.*)'),
FrenchTransaction.TYPE_WITHDRAWAL),
diff --git a/modules/axabanque/test.py b/modules/axabanque/test.py
index b170710eaba31eb4a63ec5ddb8bdf65d70a7d03f..8853c50616866433ba030050a57844fc08859ed0 100644
--- a/modules/axabanque/test.py
+++ b/modules/axabanque/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class AXABanqueTest(BackendTest):
BACKEND = 'axabanque'
diff --git a/modules/banquepopulaire/pages.py b/modules/banquepopulaire/pages.py
index f8d4993a614408faf1d28e41ddac3124b2777f09..76771c30fe0e05228440e64766e3202077396056 100644
--- a/modules/banquepopulaire/pages.py
+++ b/modules/banquepopulaire/pages.py
@@ -39,6 +39,7 @@ def on_loaded(self):
else:
self.browser.location(a.attrib['href'])
+
class LoginPage(BasePage):
def login(self, login, passwd):
self.browser.select_form(name='Login')
@@ -46,6 +47,7 @@ def login(self, login, passwd):
self.browser['IDToken2'] = passwd.encode(self.browser.ENCODING)
self.browser.submit(nologin=True)
+
class IndexPage(BasePage):
def get_token(self):
url = self.document.getroot().xpath('//frame[@name="portalHeader"]')[0].attrib['src']
@@ -53,6 +55,7 @@ def get_token(self):
args = dict(parse_qsl(v.query))
return args['token']
+
class AccountsPage(BasePage):
ACCOUNT_TYPES = {u'Mes comptes d\'épargne': Account.TYPE_SAVINGS,
u'Mes comptes': Account.TYPE_CHECKING,
@@ -101,6 +104,7 @@ def get_list(self):
return
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile('^RET DAB (?P.*?) RETRAIT (DU|LE) (?P\d{2})(?P\d{2})(?P\d+).*'),
FrenchTransaction.TYPE_WITHDRAWAL),
diff --git a/modules/banquepopulaire/test.py b/modules/banquepopulaire/test.py
index 61a9db2835a521263b6a25ab3a16e9ab46880d7b..08aabe2150cdbf1c4ef5a592d5670a73524be784 100644
--- a/modules/banquepopulaire/test.py
+++ b/modules/banquepopulaire/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class BanquePopulaireTest(BackendTest):
BACKEND = 'banquepopulaire'
diff --git a/modules/barclays/pages.py b/modules/barclays/pages.py
index 0e640041f035a35d997396bb534f04358e692b22..90742b59ff79cc47e23e6d45f87cb44f0492d489 100644
--- a/modules/barclays/pages.py
+++ b/modules/barclays/pages.py
@@ -44,6 +44,7 @@ def has_redirect(self):
else:
return True
+
class Login2Page(BasePage):
def login(self, secret):
label = self.document.xpath('//span[@class="PF_LABEL"]')[0].text.strip()
@@ -55,9 +56,11 @@ def login(self, secret):
self.browser['word'] = letters
self.browser.submit(name='valider', nologin=True)
+
class IndexPage(BasePage):
pass
+
class AccountsPage(BasePage):
ACCOUNT_TYPES = {u'Epargne': Account.TYPE_SAVINGS,
u'Liquidités': Account.TYPE_CHECKING,
@@ -170,11 +173,13 @@ class Transaction(FrenchTransaction):
FrenchTransaction.TYPE_UNKNOWN),
]
+
class HistoryBasePage(BasePage):
def get_history(self):
self.logger.warning('Do not support account of type %s' % type(self).__name__)
return iter([])
+
class TransactionsPage(HistoryBasePage):
def get_history(self):
for tr in self.document.xpath('//table[@id="operation"]/tbody/tr'):
@@ -229,11 +234,14 @@ def get_history(self):
t.set_amount(amount)
yield t
+
class ValuationPage(HistoryBasePage):
pass
+
class LoanPage(HistoryBasePage):
pass
+
class MarketPage(HistoryBasePage):
pass
diff --git a/modules/barclays/test.py b/modules/barclays/test.py
index ab919703c5b5efc738a33eed0ec49e6336bd3ac6..3c9519095ea407a6cc43462be30a0fc50536921e 100644
--- a/modules/barclays/test.py
+++ b/modules/barclays/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class BarclaysTest(BackendTest):
BACKEND = 'barclays'
diff --git a/modules/bnporc/perso/login.py b/modules/bnporc/perso/login.py
index 0a560e1264a9e49c1b7602367b72acb49bc73d82..423961bd70b127d67fa6cefb08e2a61263198520 100644
--- a/modules/bnporc/perso/login.py
+++ b/modules/bnporc/perso/login.py
@@ -28,6 +28,7 @@
__all__ = ['LoginPage', 'ConfirmPage', 'ChangePasswordPage']
+
class BNPVirtKeyboard(MappedVirtKeyboard):
symbols={'0':'9cc4789a2cb223e8f2d5e676e90264b5',
'1':'e10b58fc085f9683052d5a63c96fc912',
@@ -100,10 +101,12 @@ def get_relocate_url(self):
if m:
return m.group(1)
+
class InfoMessagePage(BasePage):
def on_loaded(self):
pass
+
class ChangePasswordPage(BasePage):
def change_password(self, current, new):
try:
diff --git a/modules/bnporc/perso/transactions.py b/modules/bnporc/perso/transactions.py
index 6c4899dd7c72b97d7c09cde26c9623dbe21c247e..bdf1ca8c3c5b6e0fc1d1c45e8bd3aa910d51e61e 100644
--- a/modules/bnporc/perso/transactions.py
+++ b/modules/bnporc/perso/transactions.py
@@ -44,6 +44,7 @@ class Transaction(FrenchTransaction):
(re.compile('^(?PREMISE CHEQUES)(?P.*)'), FrenchTransaction.TYPE_DEPOSIT),
]
+
class AccountHistory(BasePage):
def iter_operations(self):
for tr in self.document.xpath('//table[@id="tableCompte"]//tr'):
diff --git a/modules/bnporc/perso/transfer.py b/modules/bnporc/perso/transfer.py
index cdfdaad43dbfe238292799fd7751c1541750d7ca..e771667cb4f046ef8bc298333914479678d3cd7c 100644
--- a/modules/bnporc/perso/transfer.py
+++ b/modules/bnporc/perso/transfer.py
@@ -35,6 +35,7 @@ def __init__(self, id, label, send_checkbox, receive_checkbox):
self.send_checkbox = send_checkbox
self.receive_checkbox = receive_checkbox
+
class TransferPage(BasePage):
def on_loaded(self):
for td in self.document.xpath('//td[@class="hdvon1"]'):
diff --git a/modules/bnporc/pro.py b/modules/bnporc/pro.py
index 023bef6cf66e1ff4548c331d8b3b76ff150a8b0d..5ea8227442da10b9fcbe5457f0e8d6c45f814de5 100644
--- a/modules/bnporc/pro.py
+++ b/modules/bnporc/pro.py
@@ -36,6 +36,7 @@ class ProAccountsList(BasePage):
COL_ID = 2
COL_BALANCE = 3
COL_COMING = 5
+
def get_list(self):
for tr in self.document.xpath('//tr[@class="comptes"]'):
cols = tr.findall('td')
@@ -57,6 +58,7 @@ def get_list(self):
yield account
+
class ProAccountHistory(BasePage):
COL_DATE = 0
COL_LABEL = 1
diff --git a/modules/boursorama/pages/__init__.py b/modules/boursorama/pages/__init__.py
index 615a7ef3d7a95f02847ba8b4546f2ddc387d318d..1b67004054cce3d6785c30ea7202b26b7d9e1c6b 100644
--- a/modules/boursorama/pages/__init__.py
+++ b/modules/boursorama/pages/__init__.py
@@ -23,6 +23,7 @@
from .accounts_list import AccountsList
from .login import LoginPage, UpdateInfoPage
+
class AccountPrelevement(AccountsList):
pass
diff --git a/modules/boursorama/pages/account_history.py b/modules/boursorama/pages/account_history.py
index 7b1aa6aea92f7d224a4347bc9125a42c83893681..705375205dc92ab869eccee2bab8d5023e303940 100644
--- a/modules/boursorama/pages/account_history.py
+++ b/modules/boursorama/pages/account_history.py
@@ -29,6 +29,7 @@
__all__ = ['AccountHistory']
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile(u'^CHQ\. (?P.*)'), FrenchTransaction.TYPE_CHECK),
(re.compile('^(ACHAT|PAIEMENT) CARTE (?P\d{2})(?P\d{2})(?P\d{2}) (?P.*)'),
@@ -42,6 +43,7 @@ class Transaction(FrenchTransaction):
(re.compile('^REM CHQ (?P.*)'), FrenchTransaction.TYPE_DEPOSIT),
]
+
class AccountHistory(BasePage):
def on_loaded(self):
diff --git a/modules/boursorama/pages/login.py b/modules/boursorama/pages/login.py
index 14504d6becb5827975fd886a3c570ab7912921ef..5732bcd9b6a0f3927f04d644cf1e205918fdaa66 100644
--- a/modules/boursorama/pages/login.py
+++ b/modules/boursorama/pages/login.py
@@ -75,6 +75,7 @@ def checksum(self, (x1, y1, x2, y2)):
s += " "
return hashlib.md5(s).hexdigest()
+
class LoginPage(BasePage):
def on_loaded(self):
pass
@@ -98,6 +99,7 @@ def login(self, login, password):
self.browser.location(form.attrib['action'], urllib.urlencode(args), no_login=True)
+
class UpdateInfoPage(BasePage):
def on_loaded(self):
raise BrowserIncorrectPassword('Please update your user informations')
diff --git a/modules/boursorama/test.py b/modules/boursorama/test.py
index 667b3210cf48d3c3b96b0338d5ca720308ad4fa2..40e2ad26b9e49340592cfbdcbed4ba91349f50d8 100644
--- a/modules/boursorama/test.py
+++ b/modules/boursorama/test.py
@@ -21,6 +21,7 @@
from weboob.tools.test import BackendTest
+
class BoursoramaTest(BackendTest):
BACKEND = 'boursorama'
diff --git a/modules/bouygues/test.py b/modules/bouygues/test.py
index 8bdf6745ba8f2dc58bd29f741b0ae17de017c007..511554fcd8c93a7e31d984092a7cb326e5e2bec0 100644
--- a/modules/bouygues/test.py
+++ b/modules/bouygues/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class BouyguesTest(BackendTest):
BACKEND = 'bouygues'
diff --git a/modules/bp/pages/accounthistory.py b/modules/bp/pages/accounthistory.py
index 2a04fa6e7b9ab3764358604a54bf01ecec8d916d..a5fa82ef7af810bded71f709bb7cd82b886300d1 100644
--- a/modules/bp/pages/accounthistory.py
+++ b/modules/bp/pages/accounthistory.py
@@ -47,6 +47,7 @@ class Transaction(FrenchTransaction):
(re.compile('^(?PREMISE DE CHEQUE) (?P.*)'), FrenchTransaction.TYPE_DEPOSIT),
]
+
class AccountHistory(BasePage):
def get_next_link(self):
for a in self.document.xpath('//a[@class="btn_crt"]'):
@@ -105,6 +106,7 @@ def get_history(self, deferred=False):
operations.append(op)
return operations
+
class CardsList(BasePage):
def get_cards(self):
cards = []
diff --git a/modules/bp/pages/login.py b/modules/bp/pages/login.py
index c0a3e5a0479811067a9c938e856477c0f9a93b4d..3b939ea72a5f3debddaa25d26fb703a13166df9a 100644
--- a/modules/bp/pages/login.py
+++ b/modules/bp/pages/login.py
@@ -30,6 +30,7 @@ def md5(f):
md5.update(f.read())
return md5.hexdigest()
+
class UnavailablePage(BasePage):
def on_loaded(self):
raise BrowserUnavailable()
@@ -57,14 +58,17 @@ def login(self, login, pwd):
self.browser['username'] = login
self.browser.submit()
+
class repositionnerCheminCourant(BasePage):
def on_loaded(self):
self.browser.open("https://voscomptesenligne.labanquepostale.fr/voscomptes/canalXHTML/securite/authentification/initialiser-identif.ea")
+
class Initident(BasePage):
def on_loaded(self):
self.browser.open("https://voscomptesenligne.labanquepostale.fr/voscomptes/canalXHTML/securite/authentification/verifierMotDePasse-identif.ea")
+
class CheckPassword(BasePage):
def on_loaded(self):
self.browser.open("https://voscomptesenligne.labanquepostale.fr/voscomptes/canalXHTML/comptesCommun/synthese_assurancesEtComptes/init-synthese.ea")
diff --git a/modules/bred/pages.py b/modules/bred/pages.py
index 4d36d3316dbe13572f6e2b80826adc42c68f272c..accdb48b228f3f75ccc3f979628467d475f91230 100644
--- a/modules/bred/pages.py
+++ b/modules/bred/pages.py
@@ -37,6 +37,7 @@ def login(self, login, passwd):
self.browser['pass'] = passwd.encode(self.browser.ENCODING)
self.browser.submit(nologin=True)
+
class LoginResultPage(BasePage):
def confirm(self):
self.browser.location('MainAuth?typeDemande=AC', no_login=True)
@@ -52,9 +53,11 @@ def get_error(self):
return error.text.strip()
+
class EmptyPage(BasePage):
pass
+
class BredBasePage(BasePage):
def js2args(self, s):
cur_arg = None
@@ -70,6 +73,7 @@ def js2args(self, s):
return args
+
class AccountsPage(BredBasePage):
def get_list(self):
accounts = []
@@ -123,6 +127,7 @@ def get_list(self):
return accounts
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile('^RETRAIT G.A.B. \d+ (?P.*?)( CARTE .*)? LE (?P\d{2})/(?P\d{2})/(?P\d{2}).*'),
FrenchTransaction.TYPE_WITHDRAWAL),
diff --git a/modules/bred/test.py b/modules/bred/test.py
index 4e24f66db923f818801b9d9d6e187b46c3b14c77..105901a782bc4f3478a9483287d9fd2b2d22fb59 100644
--- a/modules/bred/test.py
+++ b/modules/bred/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class BredTest(BackendTest):
BACKEND = 'bred'
diff --git a/modules/btmon/pages.py b/modules/btmon/pages.py
index 98a1e03c5e16e2611977fd22f9a8084901516104..7b343e48ba254d01f4a186c455ef166e995a49c7 100644
--- a/modules/btmon/pages.py
+++ b/modules/btmon/pages.py
@@ -64,7 +64,6 @@ def iter_torrents(self):
torrent.description = NotLoaded
torrent.files = NotLoaded
yield torrent
-
class TorrentPage(BasePage):
@@ -86,7 +85,7 @@ def get_torrent(self):
href_t = self.parser.select(div,'a.down',1).attrib.get('href','')
url = u'http://%s%s'%(self.browser.DOMAIN,href_t)
magnet = unicode(self.parser.select(div,'a.magnet',1).attrib.get('href',''))
-
+
divtabs = self.parser.select(div,'div#tabs',1)
files_div = self.parser.select(divtabs,'div.body > div.doubleblock > div.leftblock')
files = []
diff --git a/modules/btmon/test.py b/modules/btmon/test.py
index 6ba714fccf35d5a97ca5a2ea3c4e046328912b2b..bc356ae5623a8d624ab68b577bac84e982fb89fb 100644
--- a/modules/btmon/test.py
+++ b/modules/btmon/test.py
@@ -22,6 +22,7 @@
from random import choice
+
class BtmonTest(BackendTest):
BACKEND = 'btmon'
diff --git a/modules/caissedepargne/pages.py b/modules/caissedepargne/pages.py
index 1c161f0c9824963bf00a5f42e30662e6e269182a..f1fafdffe82517eb6802241dc36927091ea73640 100644
--- a/modules/caissedepargne/pages.py
+++ b/modules/caissedepargne/pages.py
@@ -54,6 +54,7 @@ def login3(self, passwd):
self.browser.form.action = m.group(1)
self.browser.submit(nologin=True)
+
class ErrorPage(BasePage):
def get_error(self):
try:
@@ -61,6 +62,7 @@ def get_error(self):
except BrokenPageError:
return None
+
class UnavailablePage(BasePage):
def on_loaded(self):
try:
@@ -68,6 +70,7 @@ def on_loaded(self):
except BrokenPageError:
raise BrowserUnavailable()
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile('^CB (?P.*?) FACT (?P\d{2})(?P\d{2})(?P\d{2})'),
FrenchTransaction.TYPE_CARD),
@@ -87,6 +90,7 @@ class Transaction(FrenchTransaction):
(re.compile('^CB [\d\*]+ (?P.*)'), FrenchTransaction.TYPE_CARD),
]
+
class IndexPage(BasePage):
ACCOUNT_TYPES = {u'Epargne liquide': Account.TYPE_SAVINGS,
u'Compte Courant': Account.TYPE_CHECKING,
diff --git a/modules/caissedepargne/test.py b/modules/caissedepargne/test.py
index 41beac04ae628c7be76f742ff75055deb62322a3..8b489abe379b05a68c453fde4c8b2b0c4c684a55 100644
--- a/modules/caissedepargne/test.py
+++ b/modules/caissedepargne/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class CaisseEpargneTest(BackendTest):
BACKEND = 'caissedepargne'
diff --git a/modules/canalplus/test.py b/modules/canalplus/test.py
index e7d756895a3df2792444ea5138e1d9017e85a773..41b76cc9a7d36659eae3688b1cfa60e944155d80 100644
--- a/modules/canalplus/test.py
+++ b/modules/canalplus/test.py
@@ -21,6 +21,7 @@
from weboob.tools.test import BackendTest
from weboob.capabilities.video import BaseVideo
+
class CanalPlusTest(BackendTest):
BACKEND = 'canalplus'
diff --git a/modules/canaltp/test.py b/modules/canaltp/test.py
index 23b02cf58d40f60cdff65ef333c6c5a624220cbe..5207b319063266437adcba481156565c38aea302 100644
--- a/modules/canaltp/test.py
+++ b/modules/canaltp/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class CanalTPTest(BackendTest):
BACKEND = 'canaltp'
diff --git a/modules/carrefourbanque/pages.py b/modules/carrefourbanque/pages.py
index 74b2c6a1f7cd751f28cfb37a3c7b4c61c77771bb..4647e9528de13eb54cc1fd7b36c71a6653f202cf 100644
--- a/modules/carrefourbanque/pages.py
+++ b/modules/carrefourbanque/pages.py
@@ -39,9 +39,11 @@ def redirect(self):
except FormNotFoundError:
raise BrowserIncorrectPassword()
+
class HomePage(BasePage):
pass
+
class AccountsPage(BasePage):
def get_list(self):
div = self.document.xpath('//div[@id="descriptifdroite"]')[0]
@@ -73,6 +75,7 @@ def get_list(self):
yield account
+
class TransactionsPage(BasePage):
COL_DATE = 0
COL_TEXT = 1
diff --git a/modules/carrefourbanque/test.py b/modules/carrefourbanque/test.py
index 2fd36ba609c09cb6f6522e9d7e83b2f9af2172c4..e67a3da76cbbf0e01349bf3caf1b8a076c751279 100644
--- a/modules/carrefourbanque/test.py
+++ b/modules/carrefourbanque/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class CarrefourBanqueTest(BackendTest):
BACKEND = 'carrefourbanque'
diff --git a/modules/cic/pages.py b/modules/cic/pages.py
index b387547489041d97431e88e8d40bcded56d716ba..54bf887ee5be63c679616560f0c7836e2634d062 100644
--- a/modules/cic/pages.py
+++ b/modules/cic/pages.py
@@ -28,6 +28,7 @@
from weboob.capabilities.bank import Account
from weboob.tools.capabilities.bank.transactions import FrenchTransaction
+
class LoginPage(BasePage):
def login(self, login, passwd):
self.browser.select_form(name='ident')
@@ -35,25 +36,32 @@ def login(self, login, passwd):
self.browser['_cm_pwd'] = passwd
self.browser.submit(nologin=True)
+
class LoginErrorPage(BasePage):
pass
+
class ChangePasswordPage(BasePage):
def on_loaded(self):
raise BrowserIncorrectPassword('Please change your password')
+
class InfoPage(BasePage):
pass
+
class EmptyPage(BasePage):
pass
+
class TransfertPage(BasePage):
pass
+
class UserSpacePage(BasePage):
pass
+
class AccountsPage(BasePage):
def get_list(self):
accounts = OrderedDict()
@@ -102,6 +110,7 @@ def get_list(self):
return accounts.itervalues()
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile('^VIR(EMENT)? (?P.*)'), FrenchTransaction.TYPE_TRANSFER),
(re.compile('^PRLV (?P.*)'), FrenchTransaction.TYPE_ORDER),
@@ -116,6 +125,7 @@ class Transaction(FrenchTransaction):
_is_coming = False
+
class OperationsPage(BasePage):
def get_history(self):
index = 0
@@ -181,6 +191,7 @@ def go_next(self):
return True
+
class CardPage(OperationsPage):
def get_history(self):
index = 0
@@ -200,6 +211,7 @@ def get_history(self):
tr.set_amount(tds[-1].text)
yield tr
+
class NoOperationsPage(OperationsPage):
def get_history(self):
return iter([])
diff --git a/modules/cic/test.py b/modules/cic/test.py
index 2391716b7c79adfabc97c82133f874f2658604a1..50b96311df27c89fae7994ac5ab3e07d55109813 100644
--- a/modules/cic/test.py
+++ b/modules/cic/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class CICTest(BackendTest):
BACKEND = 'cic'
diff --git a/modules/cmb/hellhttp.py b/modules/cmb/hellhttp.py
index f75594719907740bf50ccfc209070df3eda91f52..56c445ac49c32882ac3ac14b249e4ac6d68b0972 100644
--- a/modules/cmb/hellhttp.py
+++ b/modules/cmb/hellhttp.py
@@ -29,6 +29,7 @@
PROXY_PORT = 8080
+
class HTTPSVerifiedConnection(httplib.HTTPSConnection):
"""
This class allows communication via SSL, and will checks certificates
@@ -54,7 +55,7 @@ def connect(self):
if self._tunnel_host:
self.sock = sock
self._tunnel()
-
+
if self.ca_file:
self.sock = ssl.wrap_socket(sock,
self.key_file,
@@ -102,7 +103,7 @@ def __init__(self, host, port=None, proxy=None, proxy_port=None,
else:
self.conn = HTTPSVerifiedConnection(host, port, key_file, cert_file,
ca_file, strict, timeout, callBack)
-
+
def request(self, *args, **kwargs):
self.conn.request(*args, **kwargs)
diff --git a/modules/cmso/pages.py b/modules/cmso/pages.py
index b3361dd8b90051cf08ddd24bdf288f42a0d1e837..dca98bd50765b9ae5478982ee900734bba4d0f7d 100644
--- a/modules/cmso/pages.py
+++ b/modules/cmso/pages.py
@@ -37,6 +37,7 @@ def login(self, login, passwd):
self.browser['motDePasse'] = passwd.encode(self.browser.ENCODING)
self.browser.submit(nologin=True)
+
class AccountsPage(BasePage):
def get_list(self):
names = set()
diff --git a/modules/cmso/test.py b/modules/cmso/test.py
index d13661b9704b42c001ffbdf24acf5be64a689d60..86456875befc4a16b3082d74f26123e580732bd9 100644
--- a/modules/cmso/test.py
+++ b/modules/cmso/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class CmsoTest(BackendTest):
BACKEND = 'cmso'
diff --git a/modules/cragr/browser.py b/modules/cragr/browser.py
index 2eed4e9731566817e8fb022954e6323562f0b13d..f8e5ff120cb016e025317852aea7ff9381ec0203 100644
--- a/modules/cragr/browser.py
+++ b/modules/cragr/browser.py
@@ -26,6 +26,7 @@
from datetime import datetime
import re
+
class Cragr(BaseBrowser):
PROTOCOL = 'https'
ENCODING = 'utf-8'
diff --git a/modules/cragr/pages/accounts_list.py b/modules/cragr/pages/accounts_list.py
index 1432c69b8c6d7b660c4845ed98562c33f184422a..2d881ca9df837a17941a0b5ac778ef4a379964b4 100644
--- a/modules/cragr/pages/accounts_list.py
+++ b/modules/cragr/pages/accounts_list.py
@@ -25,6 +25,7 @@
from .tokenextractor import TokenExtractor
from weboob.tools.capabilities.bank.transactions import FrenchTransaction
+
class Transaction(FrenchTransaction):
PATTERNS = [
(re.compile('^(Vp|Vt|Vrt|Virt|Vir(ement)?)\s*(?P.*)', re.IGNORECASE), FrenchTransaction.TYPE_TRANSFER),
@@ -44,6 +45,7 @@ class Transaction(FrenchTransaction):
(re.compile('^RET.CARTE (?P.*)', re.IGNORECASE), FrenchTransaction.TYPE_WITHDRAWAL),
]
+
class AccountsList(CragrBasePage):
"""
Unlike most pages used with the Browser class, this class represents
diff --git a/modules/cragr/pages/base.py b/modules/cragr/pages/base.py
index 8b40651ecd2c8eeebc8d9a61714a7a836ccac66f..bf969c9e65706488f3e3a9ef63dedd74678544b1 100644
--- a/modules/cragr/pages/base.py
+++ b/modules/cragr/pages/base.py
@@ -21,6 +21,7 @@
from weboob.tools.browser import BasePage
from weboob.tools.browser import BrowserUnavailable
+
class CragrBasePage(BasePage):
def on_loaded(self):
# Check for an error
diff --git a/modules/cragr/pages/tokenextractor.py b/modules/cragr/pages/tokenextractor.py
index abdd280e0a8ee20e9179f8de28126de910aa9ea7..d599702302cbeb38f94882b14ff6e7be1ebde404 100644
--- a/modules/cragr/pages/tokenextractor.py
+++ b/modules/cragr/pages/tokenextractor.py
@@ -17,16 +17,19 @@
# You should have received a copy of the GNU Affero General Public License
# along with weboob. If not, see .
+
class TokenExtractor:
""" Extracts texts token from an HTML document """
def __init__(self):
self.iterated_elements = []
+
def clear(self):
"""
Reset any content stored within a TokenExtractor object. Useful to start
a new parsing without creating a new instance.
"""
self.iterated_elements = []
+
def element_iterated_already(self, html_element):
if html_element in self.iterated_elements:
return True
@@ -34,6 +37,7 @@ def element_iterated_already(self, html_element):
if ancestor in self.iterated_elements:
return True
return False
+
def extract_tokens(self, html_element):
if self.element_iterated_already(html_element):
return
@@ -44,10 +48,12 @@ def extract_tokens(self, html_element):
for token in self.split_text_into_smaller_tokens(text):
if self.token_looks_relevant(token):
yield token.strip()
+
@staticmethod
def split_text_into_smaller_tokens(text):
for subtext1 in text.split('\t'):
yield subtext1
+
@staticmethod
def token_looks_relevant(token):
return len(token.strip()) > 1
diff --git a/modules/cragr/test.py b/modules/cragr/test.py
index 8545f4a34c72818aae0239196d1683dcc4dea16a..58424d1789dcfb61a687d64a3dafdb46c4bda47c 100644
--- a/modules/cragr/test.py
+++ b/modules/cragr/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class CrAgrTest(BackendTest):
BACKEND = 'cragr'
diff --git a/modules/creditcooperatif/perso/pages.py b/modules/creditcooperatif/perso/pages.py
index 2cbd9a65857eed6eaa106f60cd2a47a9ae93ffb1..0fadd3836a1042743b02d466aa7a644c532b2e38 100644
--- a/modules/creditcooperatif/perso/pages.py
+++ b/modules/creditcooperatif/perso/pages.py
@@ -37,6 +37,7 @@ def login(self, login, password):
self.browser['j_password'] = password.encode('iso-8859-15')
self.browser.submit(nologin=True)
+
class LoggedPage(BasePage):
def get_error(self):
div = self.document.xpath('//div[@class="errorForm-msg"]')
@@ -46,6 +47,7 @@ def get_error(self):
msg = u', '.join([li.text.strip() for li in div[0].xpath('.//li')])
return re.sub('[\r\n\t\xa0]+', ' ', msg)
+
class AccountsPage(BasePage):
ACCOUNT_TYPES = {u'COMPTE NEF': Account.TYPE_CHECKING}
@@ -65,6 +67,7 @@ def get_list(self):
yield account
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile('^(?PRETRAIT DAB) (?P\d{2})-(?P\d{2})-([\d\-]+)'),
FrenchTransaction.TYPE_WITHDRAWAL),
@@ -88,9 +91,11 @@ class Transaction(FrenchTransaction):
FrenchTransaction.TYPE_UNKNOWN),
]
+
class TransactionsPage(BasePage):
pass
+
class TransactionsJSONPage(BasePage):
ROW_DATE = 0
ROW_TEXT = 2
@@ -104,6 +109,7 @@ def get_transactions(self):
t.set_amount(tr[self.ROW_CREDIT], tr[self.ROW_DEBIT])
yield t
+
class ComingTransactionsPage(BasePage):
ROW_REF = 0
ROW_TEXT = 1
diff --git a/modules/creditcooperatif/pro/pages.py b/modules/creditcooperatif/pro/pages.py
index 1d30d131b1b4c90efc68e4996b4d3337140bdc57..44d66d845982d764974967272204ddb3aa976c86 100644
--- a/modules/creditcooperatif/pro/pages.py
+++ b/modules/creditcooperatif/pro/pages.py
@@ -29,6 +29,7 @@
__all__ = ['LoginPage', 'AccountsPage', 'TransactionsPage', 'ComingTransactionsPage']
+
class LoginPage(BasePage):
def login(self, login, pin, strong_auth):
form_nb = 1 if strong_auth else 0
@@ -41,6 +42,7 @@ def login(self, login, pin, strong_auth):
assert self.browser['identType'] == indentType
self.browser.submit(nologin=True)
+
class AccountsPage(BasePage):
ACCOUNT_TYPES = {u'COMPTE NEF': Account.TYPE_CHECKING}
@@ -77,6 +79,7 @@ def get_list(self):
return
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile('^RETRAIT DAB (?P.*?).*'),
FrenchTransaction.TYPE_WITHDRAWAL),
@@ -95,6 +98,7 @@ class Transaction(FrenchTransaction):
FrenchTransaction.TYPE_UNKNOWN),
]
+
class TransactionsPage(BasePage):
def get_next_url(self):
# can be 'Suivant' or ' Suivant'
@@ -109,6 +113,7 @@ def get_next_url(self):
TR_TEXT = 2
TR_DEBIT = 3
TR_CREDIT = 4
+
def get_history(self):
for tr in self.document.xpath('//table[@id="operation"]/tbody/tr'):
tds = tr.findall('td')
@@ -129,6 +134,7 @@ def get_content(td):
yield t
+
class ComingTransactionsPage(BasePage):
COM_TR_COMMENT = 0
COM_TR_DATE = 1
diff --git a/modules/creditcooperatif/test.py b/modules/creditcooperatif/test.py
index 1ba65654cf33af9155bf805f113b5422a3ba3d3b..39bd5d212b00c6344aa3fe4965d36279c1e9e427 100644
--- a/modules/creditcooperatif/test.py
+++ b/modules/creditcooperatif/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class CreditCooperatifTest(BackendTest):
BACKEND = 'creditcooperatif'
diff --git a/modules/creditdunord/pages.py b/modules/creditdunord/pages.py
index 193907dba6b4d32a681d1cdb59226097f9fce98f..17712f9a1470f4b0204b2147adb78dc86bc12fd4 100644
--- a/modules/creditdunord/pages.py
+++ b/modules/creditdunord/pages.py
@@ -34,6 +34,7 @@
class LoginPage(BasePage):
pass
+
class CDNBasePage(BasePage):
def get_from_js(self, pattern, end, is_list=False):
"""
@@ -69,6 +70,7 @@ def get_from_js(self, pattern, end, is_list=False):
def get_execution(self):
return self.get_from_js("name: 'execution', value: '", "'")
+
class AccountsPage(CDNBasePage):
COL_HISTORY = 2
COL_ID = 4
@@ -113,6 +115,7 @@ def get_list(self):
return iter(accounts)
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile(r'^(?PRET DAB \w+ .*?) LE (?P\d{2})(?P\d{2})$'),
FrenchTransaction.TYPE_WITHDRAWAL),
diff --git a/modules/creditdunord/test.py b/modules/creditdunord/test.py
index 4cf04dbd26f12921d2bb9b19afb495bc4719f90e..d23db48f8334f38f85fa12b02df21965d3291a9e 100644
--- a/modules/creditdunord/test.py
+++ b/modules/creditdunord/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class CreditDuNordTest(BackendTest):
BACKEND = 'creditdunord'
diff --git a/modules/creditmutuel/pages.py b/modules/creditmutuel/pages.py
index 5cf0794f4184ad09fd0aea0105dc70e072ba31eb..bb933c6a729cc4bfe763c688d07cb7212c692e9a 100644
--- a/modules/creditmutuel/pages.py
+++ b/modules/creditmutuel/pages.py
@@ -28,6 +28,7 @@
from weboob.capabilities.bank import Account
from weboob.tools.capabilities.bank.transactions import FrenchTransaction
+
class LoginPage(BasePage):
def login(self, login, passwd):
self.browser.select_form(nr=0)
@@ -35,25 +36,32 @@ def login(self, login, passwd):
self.browser['_cm_pwd'] = passwd
self.browser.submit(nologin=True)
+
class LoginErrorPage(BasePage):
pass
+
class ChangePasswordPage(BasePage):
def on_loaded(self):
raise BrowserIncorrectPassword('Please change your password')
+
class InfoPage(BasePage):
pass
+
class EmptyPage(BasePage):
pass
+
class TransfertPage(BasePage):
pass
+
class UserSpacePage(BasePage):
pass
+
class AccountsPage(BasePage):
def get_list(self):
accounts = OrderedDict()
@@ -102,6 +110,7 @@ def get_list(self):
return accounts.itervalues()
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile('^VIR(EMENT)? (?P.*)'), FrenchTransaction.TYPE_TRANSFER),
(re.compile('^PRLV (?P.*)'), FrenchTransaction.TYPE_ORDER),
@@ -116,6 +125,7 @@ class Transaction(FrenchTransaction):
_is_coming = False
+
class OperationsPage(BasePage):
def get_history(self):
index = 0
@@ -181,6 +191,7 @@ def go_next(self):
return True
+
class CardPage(OperationsPage):
def get_history(self):
index = 0
@@ -200,6 +211,7 @@ def get_history(self):
tr.set_amount(tds[-1].text)
yield tr
+
class NoOperationsPage(OperationsPage):
def get_history(self):
return iter([])
diff --git a/modules/creditmutuel/test.py b/modules/creditmutuel/test.py
index e34a480bbca0d8b383879ef4210c38af840bc275..b152b39e631c3627003ae242a234bbb3a09ff2a8 100644
--- a/modules/creditmutuel/test.py
+++ b/modules/creditmutuel/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class CreditMutuelTest(BackendTest):
BACKEND = 'creditmutuel'
@@ -28,5 +29,3 @@ def test_crmut(self):
if len(l) > 0:
a = l[0]
list(self.backend.iter_history(a))
-
-
diff --git a/modules/dailymotion/backend.py b/modules/dailymotion/backend.py
index 03a05896773d2ec434df6ee9059149b66fed4e15..b348f2f72a9ea38f5a05282ec7b92ce18de46175 100644
--- a/modules/dailymotion/backend.py
+++ b/modules/dailymotion/backend.py
@@ -45,6 +45,7 @@ def get_video(self, _id):
return self.browser.get_video(_id)
SORTBY = ['relevance', 'rated', 'visited', None]
+
def search_videos(self, pattern, sortby=ICapVideo.SEARCH_RELEVANCE, nsfw=False, max_results=None):
with self.browser:
return self.browser.search_videos(pattern, self.SORTBY[sortby])
diff --git a/modules/dailymotion/pages.py b/modules/dailymotion/pages.py
index dd90c35c2025554f127e343f8627bcabd2fabc5c..dda038c1531d23316e9481a07033b19bed0e3934 100644
--- a/modules/dailymotion/pages.py
+++ b/modules/dailymotion/pages.py
@@ -85,6 +85,7 @@ def get_rate(self, div):
self.browser.logger.warning('Unable to parse rating: %s' % div.attrib['style'])
return 0
+
class VideoPage(BasePage):
def get_video(self, video=None):
if video is None:
diff --git a/modules/dlfp/backend.py b/modules/dlfp/backend.py
index a0874ab474ebb4f84f141bcb3a9554811b951b23..59ca9a6d12c2aa692bbf9a69ff9c52ac6740decc 100644
--- a/modules/dlfp/backend.py
+++ b/modules/dlfp/backend.py
@@ -167,7 +167,7 @@ def _insert_comment(self, com, parent, getseen=True):
date=com.date,
parent=parent,
content=com.body,
- signature=com.signature + \
+ signature=com.signature +
'
'.join(['Score: %d' % com.score,
'URL: %s' % com.url]),
children=[],
diff --git a/modules/dlfp/browser.py b/modules/dlfp/browser.py
index bb20ba90788dac0f0f4eca6a08efa260a21c38f4..a597636caa699fe08bc8690421586b3d3b4c78c9 100644
--- a/modules/dlfp/browser.py
+++ b/modules/dlfp/browser.py
@@ -33,6 +33,8 @@
from .tools import id2url, url2id
# Browser
+
+
class DLFP(BaseBrowser):
DOMAIN = 'linuxfr.org'
PROTOCOL = 'https'
diff --git a/modules/dlfp/pages/board.py b/modules/dlfp/pages/board.py
index 122feaebea67c3c069beae1fd4babb91009bab01..9bf60ad401eb550d5e00fdb9eabd8e96aafea646 100644
--- a/modules/dlfp/pages/board.py
+++ b/modules/dlfp/pages/board.py
@@ -23,8 +23,10 @@
from weboob.tools.browser import BasePage
+
class Message(object):
TIMESTAMP_REGEXP = re.compile(r'(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})')
+
def __init__(self, id, timestamp, login, message, is_me):
self.id = id
self.timestamp = timestamp
@@ -40,6 +42,7 @@ def __init__(self, id, timestamp, login, message, is_me):
else:
warning('Unable to parse timestamp "%s"' % timestamp)
+
class BoardIndexPage(BasePage):
def is_logged(self):
return True
diff --git a/modules/dlfp/pages/index.py b/modules/dlfp/pages/index.py
index 27e0620f61164a736d42c929c0d9ef27c02e9658..227f768f90a03332b83c37923f1f51f372c5efe9 100644
--- a/modules/dlfp/pages/index.py
+++ b/modules/dlfp/pages/index.py
@@ -20,6 +20,7 @@
from weboob.tools.browser import BasePage
+
class DLFPPage(BasePage):
def is_logged(self):
for form in self.document.getiterator('form'):
@@ -28,6 +29,7 @@ def is_logged(self):
return True
+
class IndexPage(DLFPPage):
def get_login_token(self):
form = self.parser.select(self.document.getroot(), 'form#new_account_sidebar', 1)
@@ -35,5 +37,6 @@ def get_login_token(self):
if i.attrib['name'] == 'authenticity_token':
return i.attrib['value']
+
class LoginPage(DLFPPage):
pass
diff --git a/modules/dlfp/pages/news.py b/modules/dlfp/pages/news.py
index d363a6937342e001ced3291c977ae0bfebbba781..b49bd2284534f20e5aa2be37e1deabd503dcf3c0 100644
--- a/modules/dlfp/pages/news.py
+++ b/modules/dlfp/pages/news.py
@@ -26,10 +26,12 @@
from .index import DLFPPage
+
class RSSComment(DLFPPage):
def on_loaded(self):
pass
+
class Content(object):
TAGGABLE = False
@@ -50,6 +52,7 @@ def __init__(self, browser):
def is_taggable(self):
return False
+
class Comment(Content):
def __init__(self, article, div, reply_id):
Content.__init__(self, article.browser)
@@ -105,6 +108,7 @@ def iter_all_comments(self):
def __repr__(self):
return u"" % (self.id, self.author, self.title)
+
class Article(Content):
TAGGABLE = True
@@ -149,11 +153,13 @@ def iter_all_comments(self):
for c in comment.iter_all_comments():
yield c
+
class CommentPage(DLFPPage):
def get_comment(self):
article = Article(self.browser, self.url, None)
return Comment(article, self.parser.select(self.document.getroot(), 'li.comment', 1), 0)
+
class ContentPage(DLFPPage):
def on_loaded(self):
self.article = None
@@ -192,9 +198,11 @@ def get_post_comment_url(self):
def get_tag_url(self):
return self.parser.select(self.document.getroot(), 'div.tag_in_place', 1).find('a').attrib['href']
+
class NewCommentPage(DLFPPage):
pass
+
class NewTagPage(DLFPPage):
def _is_tag_form(self, form):
return form.action.endswith('/tags')
@@ -204,6 +212,7 @@ def tag(self, tag):
self.browser['tags'] = tag
self.browser.submit()
+
class NodePage(DLFPPage):
def get_errors(self):
try:
diff --git a/modules/dlfp/pages/wiki.py b/modules/dlfp/pages/wiki.py
index 655b6fcfe7424469033ba8038d87acaf1ff1d277..e59165fe156a358a1884183a2807ebeae50beb1d 100644
--- a/modules/dlfp/pages/wiki.py
+++ b/modules/dlfp/pages/wiki.py
@@ -21,6 +21,7 @@
from .index import DLFPPage
+
class WikiEditPage(DLFPPage):
def get_body(self):
try:
diff --git a/modules/dlfp/tools.py b/modules/dlfp/tools.py
index 5248656536ea9e287c6a4871e1051bd3f616628e..5a2933b0bf4e10895a886b9f96bb2a7ff981896b 100644
--- a/modules/dlfp/tools.py
+++ b/modules/dlfp/tools.py
@@ -31,9 +31,11 @@
'/forums/%s/posts/%s': 'B%s.%s',
}
+
def f2re(f):
return '.*' + f.replace('%s', '([^ /]+)')
+
def rssid(entry):
m = RSSID_RE.match(entry.id)
if not m:
@@ -53,6 +55,7 @@ def rssid(entry):
else:
return '%s.%s' % (ind, m.group(2))
+
def id2url(id):
m = ID2URL_RE.match(id)
if not m:
@@ -67,6 +70,7 @@ def id2url(id):
else:
return url_re % m.group(3)
+
def url2id(url):
for url_re, id_re in REGEXPS.iteritems():
m = re.match(f2re(url_re), url)
@@ -75,6 +79,7 @@ def url2id(url):
return id_re % m.groups()
+
def id2threadid(id):
m = ID2URL_RE.match(id)
if m:
diff --git a/modules/dresdenwetter/pages.py b/modules/dresdenwetter/pages.py
index b4faae81ea1bf4e322f14ac0401b39e2db850402..abd7dbc69296b599ebca78e790386423eff0da41 100644
--- a/modules/dresdenwetter/pages.py
+++ b/modules/dresdenwetter/pages.py
@@ -26,7 +26,7 @@
class StartPage(BasePage):
- name = [u"Temperatur", u"Wind", u"Luftdruck", u"Luftfeuchtigkeit",\
+ name = [u"Temperatur", u"Wind", u"Luftdruck", u"Luftfeuchtigkeit",
u"Niederschlag", u"Globalstrahlung", u"Schneehoehe"]
unit = [u"°C", u"km/h", u"hPa", u"%", u"mm", u"W/m²", u"cm"]
@@ -54,7 +54,7 @@ def get_sensors_list(self):
lastvalue.level = float(text.split('\n')[2].split('hPa')[0])
if i == 3:
text = paraph.xpath('span/font[@size="4"]/b')[0].text
- lastvalue.level = float(text.split('\n')[2].split(u'%')[0]\
+ lastvalue.level = float(text.split('\n')[2].split(u'%')[0]
.split(':')[1])
if i == 4:
text = paraph.xpath('b/font[@size="4"]/span')[0].text
diff --git a/modules/ehentai/backend.py b/modules/ehentai/backend.py
index ba5df4e2a037048442fe2bf6381d8c0339fa7a48..cab872a4ad0a76556d4e9d145a23d14076240ae1 100644
--- a/modules/ehentai/backend.py
+++ b/modules/ehentai/backend.py
@@ -65,6 +65,7 @@ def iter_gallery_images(self, gallery):
ID_REGEXP = r'/?\d+/[\dabcdef]+/?'
URL_REGEXP = r'.+/g/(%s)' % ID_REGEXP
+
def get_gallery(self, _id):
match = re.match(r'^%s$' % self.URL_REGEXP, _id)
if match:
diff --git a/modules/ehentai/gallery.py b/modules/ehentai/gallery.py
index 4b8ff8300d4fc8c52f36b07c1d35f54d3b42fea9..4b839288b57a7889cefa1161e527f39a93765f87 100644
--- a/modules/ehentai/gallery.py
+++ b/modules/ehentai/gallery.py
@@ -21,10 +21,12 @@
__all_ = ['EHentaiGallery', 'EHentaiImage']
+
class EHentaiGallery(BaseGallery):
def __init__(self, *args, **kwargs):
BaseGallery.__init__(self, *args, **kwargs)
+
class EHentaiImage(BaseImage):
def __init__(self, *args, **kwargs):
BaseImage.__init__(self, *args, **kwargs)
diff --git a/modules/europarl/pages.py b/modules/europarl/pages.py
index 9e5378f3de2f364f695842aba82e7e515742d41c..4d10de3140048a53853117d3780506324f426c0d 100644
--- a/modules/europarl/pages.py
+++ b/modules/europarl/pages.py
@@ -34,6 +34,7 @@
__all__ = ['VideoPage']
+
class VideoPage(BasePage):
def get_video(self, video=None):
if video is None:
@@ -67,7 +68,7 @@ def get_title(self):
for span in self.parser.select(obj[0], 'span.ep_acronym, span.ep_theme'):
if span.text_content():
title += ' ' + span.text_content().strip()
-
+
return title
def set_details(self, v):
@@ -89,7 +90,7 @@ def set_details(self, v):
day=int(day),
hour=int(hour),
minute=int(minute))
-
+
obj = self.parser.select(self.document.getroot(), 'span.ep_subtitle', 1)
if obj is not None:
span = self.parser.select(obj, 'span.ep_date', 1)
@@ -104,7 +105,7 @@ def set_details(self, v):
day = m.group(5)
month = m.group(6)
year = m.group(7)
-
+
start = datetime.datetime(year=int(year),
month=int(month),
day=int(day),
diff --git a/modules/europarl/video.py b/modules/europarl/video.py
index c1cc3907a53ff355bf56fa783572b22db5363842..d4ce00872f957a8f5ca2adb55b61db4e9cfb9fc7 100644
--- a/modules/europarl/video.py
+++ b/modules/europarl/video.py
@@ -47,4 +47,3 @@ def id2url(cls, _id):
if m:
return u'http://www.europarl.europa.eu/ep-live/en/plenary/video?debate=%s' % _id
return None
-
diff --git a/modules/fortuneo/browser.py b/modules/fortuneo/browser.py
index 481743fa73288b37d768f105ce849928adf5c14c..8000bd59ff8a2b0e28877efa2b7838e76024cb8c 100644
--- a/modules/fortuneo/browser.py
+++ b/modules/fortuneo/browser.py
@@ -29,6 +29,7 @@
__all__ = ['Fortuneo']
+
class Fortuneo(BaseBrowser):
DOMAIN_LOGIN = 'www.fortuneo.fr'
DOMAIN = 'www.fortuneo.fr'
diff --git a/modules/fortuneo/pages/accounts_list.py b/modules/fortuneo/pages/accounts_list.py
index 36f46f3b7d1983046fc3ae58558030419ccd4871..20447aa075e82909344c2b3d72236e51f998a237 100644
--- a/modules/fortuneo/pages/accounts_list.py
+++ b/modules/fortuneo/pages/accounts_list.py
@@ -52,6 +52,7 @@ class Transaction(FrenchTransaction):
(re.compile('^(?PREMISE CHEQUES)(?P.*)'), FrenchTransaction.TYPE_DEPOSIT),
]
+
class AccountHistoryPage(BasePage):
def get_operations(self, _id):
"""history, see http://docs.weboob.org/api/capabilities/bank.html?highlight=transaction#weboob.capabilities.bank.Transaction"""
@@ -85,6 +86,7 @@ def get_operations(self, _id):
yield operation
+
class AccountsList(BasePage):
def on_loaded(self):
warn = self.document.xpath('//div[@id="message_renouvellement_mot_passe"]')
@@ -156,6 +158,7 @@ def get_list(self):
yield account
+
class GlobalAccountsList(BasePage):
pass
diff --git a/modules/fortuneo/pages/login.py b/modules/fortuneo/pages/login.py
index 6893815d51b0b7379f05ff8e2786038f43eb1584..285032f108e6b9295eee9e07aa02a08686afd533 100644
--- a/modules/fortuneo/pages/login.py
+++ b/modules/fortuneo/pages/login.py
@@ -25,6 +25,7 @@
__all__ = ['LoginPage']
+
class LoginPage(BasePage):
def login(self, login, passwd):
msgb = self.document.xpath(".//*[@id='message_client']/text()")
diff --git a/modules/fortuneo/test.py b/modules/fortuneo/test.py
index 4894c65175ee7832cbbabdec8cfe12048de59ae5..04dcd6557b7f2846344e0ade61bd9a38b37c41ff 100644
--- a/modules/fortuneo/test.py
+++ b/modules/fortuneo/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class FortuneoTest(BackendTest):
BACKEND = 'fortuneo'
diff --git a/modules/fourchan/test.py b/modules/fourchan/test.py
index 245e34eb23cce03130d3d416fd6294a98eb6b02c..c60e97b98eee46115a05a93607a820ac99405443 100644
--- a/modules/fourchan/test.py
+++ b/modules/fourchan/test.py
@@ -21,6 +21,7 @@
from logging import debug
from weboob.tools.test import BackendTest
+
class FourChanTest(BackendTest):
BACKEND = 'fourchan'
diff --git a/modules/francetelevisions/test.py b/modules/francetelevisions/test.py
index 0d7acd297dc861ad205041e714d539acca480043..5f3cb75cf1b2aa7f610ce24330df2414b3d3ad13 100644
--- a/modules/francetelevisions/test.py
+++ b/modules/francetelevisions/test.py
@@ -21,6 +21,7 @@
from weboob.tools.test import BackendTest
from weboob.capabilities.video import BaseVideo
+
class PluzzTest(BackendTest):
BACKEND = 'francetelevisions'
diff --git a/modules/ganassurances/pages.py b/modules/ganassurances/pages.py
index b427448daf99b73058e6c1d3dda7c31366cb9e7e..ae8da63bbadd09b53d2e228fa93334b44768ab18 100644
--- a/modules/ganassurances/pages.py
+++ b/modules/ganassurances/pages.py
@@ -37,6 +37,7 @@ def login(self, login, passwd):
self.browser['LoginPortletFormPassword1'] = passwd.encode(self.browser.ENCODING)
self.browser.submit(nologin=True)
+
class AccountsPage(BasePage):
ACCOUNT_TYPES = {u'Solde des comptes bancaires - Groupama Banque': Account.TYPE_CHECKING,
u'Epargne bancaire constituée - Groupama Banque': Account.TYPE_SAVINGS,
@@ -89,6 +90,7 @@ class Transaction(FrenchTransaction):
(re.compile('(?PInt .*)'), FrenchTransaction.TYPE_BANK),
]
+
class TransactionsPage(BasePage):
def get_history(self):
count = 0
diff --git a/modules/ganassurances/test.py b/modules/ganassurances/test.py
index 327cbe03253d119b0821972a9742b0c28f36f5e5..cd6c65eff476ee7f63a81d1dc2e6e2b588c77005 100644
--- a/modules/ganassurances/test.py
+++ b/modules/ganassurances/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class GanAssurancesTest(BackendTest):
BACKEND = 'ganassurances'
diff --git a/modules/gazelle/test.py b/modules/gazelle/test.py
index 330d7f97387254eac715dc522a7ffb86df87f699..b12b9d0d9caa318e302d3d92367bb2157da6bb25 100644
--- a/modules/gazelle/test.py
+++ b/modules/gazelle/test.py
@@ -19,6 +19,7 @@
from weboob.tools.test import BackendTest
+
class GazelleTest(BackendTest):
BACKEND = 'gazelle'
diff --git a/modules/gdcvault/pages.py b/modules/gdcvault/pages.py
index 44316f9c969b7007ed480e156d5052025e300f25..9df3663efe3bed30a6bbded8395a790806304dd3 100644
--- a/modules/gdcvault/pages.py
+++ b/modules/gdcvault/pages.py
@@ -37,6 +37,7 @@
__all__ = ['VideoPage']
+
class VideoPage(BasePage):
def get_video(self, video=None):
if video is None:
@@ -127,7 +128,7 @@ def set_details(self, v):
day=int(day),
hour=int(hour),
minute=int(minute))
-
+
obj = self.parser.select(self.document.getroot(), 'span.ep_subtitle', 1)
if obj is not None:
span = self.parser.select(obj, 'span.ep_date', 1)
@@ -142,7 +143,7 @@ def set_details(self, v):
day = m.group(5)
month = m.group(6)
year = m.group(7)
-
+
start = datetime.datetime(year=int(year),
month=int(month),
day=int(day),
diff --git a/modules/gdcvault/video.py b/modules/gdcvault/video.py
index a65fd47196596e4af4bde6c922237c273ae06c7e..6aab480474d5bd0664c4b06a97ad206e891c35de 100644
--- a/modules/gdcvault/video.py
+++ b/modules/gdcvault/video.py
@@ -41,4 +41,3 @@ def id2url(cls, _id):
if m:
return u'http://www.gdcvault.com/play/%s#slides' % _id
return u'http://www.gdcvault.com/play/%s' % _id
-
diff --git a/modules/geolocip/test.py b/modules/geolocip/test.py
index 5191dadbb5af7abcb493909e99684f685fa49d0d..d1f88c2332891c7c600d8055e9e2b8d3320db277 100644
--- a/modules/geolocip/test.py
+++ b/modules/geolocip/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class GeolocIPTest(BackendTest):
BACKEND = 'geolocip'
diff --git a/modules/googletranslate/browser.py b/modules/googletranslate/browser.py
index c9390d3b5c2201d2c5171b533d3c138bd4d95038..dce314ce23519bfed15c3902fcd39b2edd18e3e6 100644
--- a/modules/googletranslate/browser.py
+++ b/modules/googletranslate/browser.py
@@ -35,7 +35,7 @@ class GoogleTranslateBrowser(BaseBrowser):
PAGES = {
'https?://translate\.google\.com': TranslatePage
}
-
+
def __init__(self, *args, **kwargs):
BaseBrowser.__init__(self, *args, **kwargs)
diff --git a/modules/hds/browser.py b/modules/hds/browser.py
index 5bdb4b1049fbd2b20b1047bf39c74a948b0a9328..68c9a11e5cb7af93461eaee32b4261050ec5c7ca 100644
--- a/modules/hds/browser.py
+++ b/modules/hds/browser.py
@@ -23,6 +23,8 @@
from .pages import ValidationPage, HomePage, HistoryPage, StoryPage, AuthorPage
# Browser
+
+
class HDSBrowser(BaseBrowser):
ENCODING = 'ISO-8859-1'
DOMAIN = 'histoires-de-sexe.net'
diff --git a/modules/hsbc/browser.py b/modules/hsbc/browser.py
index 035ace1b7261db22859661268221c35fcb6b02af..62ec4725cdb6bad73e7b00ce8656eb725abed3f0 100644
--- a/modules/hsbc/browser.py
+++ b/modules/hsbc/browser.py
@@ -33,6 +33,7 @@
class NotLoggedPage(BasePage):
pass
+
class HSBC(BaseBrowser):
DOMAIN = 'client.hsbc.fr'
PROTOCOL = 'https'
diff --git a/modules/hsbc/pages/accounts.py b/modules/hsbc/pages/accounts.py
index 76a3373c41ffa302af15a06b2bfa21d7fbf40fad..84d9d8234fead9144e21f26c97b350bf13abe65c 100644
--- a/modules/hsbc/pages/accounts.py
+++ b/modules/hsbc/pages/accounts.py
@@ -73,6 +73,7 @@ def get_list(self):
return iter(accounts)
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile('^VIR(EMENT)? (?P.*)'), FrenchTransaction.TYPE_TRANSFER),
(re.compile('^PRLV (?P.*)'), FrenchTransaction.TYPE_ORDER),
@@ -85,6 +86,7 @@ class Transaction(FrenchTransaction):
(re.compile('^REMISE (?P.*)'), FrenchTransaction.TYPE_DEPOSIT),
]
+
class HistoryPage(BasePage):
def get_next_link(self):
return None
@@ -92,6 +94,7 @@ def get_next_link(self):
def get_operations(self, num_page, date_guesser):
raise NotImplementedError()
+
class CPTHistoryPage(HistoryPage):
def get_operations(self, num_page, date_guesser):
for script in self.document.getiterator('script'):
@@ -105,6 +108,7 @@ def get_operations(self, num_page, date_guesser):
op._coming = (re.match('\d+/\d+/\d+', m.group(2)) is None)
yield op
+
class CardHistoryPage(HistoryPage):
def get_next_link(self):
ok = False
diff --git a/modules/hsbc/test.py b/modules/hsbc/test.py
index 6ebce485f604ddfdc24a29bc357eec62201532f3..ea59dd2fb085113a57fb63829810f74618f04fe5 100644
--- a/modules/hsbc/test.py
+++ b/modules/hsbc/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class HSBCTest(BackendTest):
BACKEND = 'hsbc'
diff --git a/modules/imdb/browser.py b/modules/imdb/browser.py
index ecf72987c978c2aefdd35837dd35b3251cf886ac..82fef92cad9026a926496f68ce93ca04727a952e 100644
--- a/modules/imdb/browser.py
+++ b/modules/imdb/browser.py
@@ -218,6 +218,8 @@ def get_movie_releases(self,id, country):
'â': u'â',
'ç': u'ç'
}
+
+
def latin2unicode(word):
for key in dict_hex.keys():
word = word.replace(key,dict_hex[key])
diff --git a/modules/imdb/pages.py b/modules/imdb/pages.py
index 64fbe2b29abe9ac2a92ef6904e49694091d54114..0c3171110923edb1552962a135741e01288860ea 100644
--- a/modules/imdb/pages.py
+++ b/modules/imdb/pages.py
@@ -187,6 +187,7 @@ def get_person(self,id):
person.thumbnail_url = thumbnail_url
return person
+
class FilmographyPage(BasePage):
''' Page of detailed filmography of a person, sorted by type of role
This page is easier to parse than the main person page filmography
diff --git a/modules/imdb/test.py b/modules/imdb/test.py
index 73a134e370e65793f2b98c2bde9a5251ec65e441..80a469726a5441372c95537a4424792429324d90 100644
--- a/modules/imdb/test.py
+++ b/modules/imdb/test.py
@@ -19,6 +19,7 @@
from weboob.tools.test import BackendTest
+
class ImdbTest(BackendTest):
BACKEND = 'imdb'
@@ -26,7 +27,7 @@ def test_search_movie(self):
movies = list(self.backend.iter_movies('spiderman'))
for movie in movies:
assert movie.id
-
+
def test_get_movie(self):
movie = self.backend.get_movie('tt0079980')
assert movie.id
diff --git a/modules/ina/test.py b/modules/ina/test.py
index b8156cae14c1436e13e0953a218588103be9f096..abc25a0afd112aa6769689e5b8cd6adb8798708a 100644
--- a/modules/ina/test.py
+++ b/modules/ina/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class INATest(BackendTest):
BACKEND = 'ina'
diff --git a/modules/ing/pages/accounts_list.py b/modules/ing/pages/accounts_list.py
index e518fed51321bf04b82352f9d07211fe41a9c2df..a173a17062e9672b5a43c98e7c1380e89c8d4caa 100644
--- a/modules/ing/pages/accounts_list.py
+++ b/modules/ing/pages/accounts_list.py
@@ -31,6 +31,7 @@
__all__ = ['AccountsList']
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile(u'^retrait dab (?P\d{2})/(?P\d{2})/(?P\d{4}) (?P.*)'), FrenchTransaction.TYPE_WITHDRAWAL),
(re.compile(u'^carte (?P\d{2})/(?P\d{2})/(?P\d{4}) (?P.*)'), Transaction.TYPE_CARD),
diff --git a/modules/inrocks/backend.py b/modules/inrocks/backend.py
index 509175960ba96fa9a27a0657df49c978b058464d..18628693d48ec892f47fe031a0520e9de51d7917 100644
--- a/modules/inrocks/backend.py
+++ b/modules/inrocks/backend.py
@@ -23,6 +23,7 @@
from .browser import NewspaperInrocksBrowser
from .tools import rssid
+
class NewspaperInrocksBackend(GenericNewspaperBackend, ICapMessages):
MAINTAINER = u'Julien Hebert'
EMAIL = 'juke@free.fr'
diff --git a/modules/inrocks/pages/article.py b/modules/inrocks/pages/article.py
index 3a499556d103f26f07b82f8355fb1ffb540c6f6c..5c9dab31910fc773cc3c3281d005e7de1af1ee7b 100644
--- a/modules/inrocks/pages/article.py
+++ b/modules/inrocks/pages/article.py
@@ -23,6 +23,7 @@
try_remove_from_selector_list, \
drop_comments, NoneMainDiv
+
class ArticlePage(GenericNewsPage):
"ArticlePage object for inrocks"
def on_loaded(self):
diff --git a/modules/inrocks/pages/inrockstv.py b/modules/inrocks/pages/inrockstv.py
index dceebe2d574edd1086144e2b5f92f428548c2c4c..75caa1fe9355f0591e29d7af26260eb1be61f80c 100644
--- a/modules/inrocks/pages/inrockstv.py
+++ b/modules/inrocks/pages/inrockstv.py
@@ -20,6 +20,7 @@
from weboob.tools.capabilities.messages.genericArticle import GenericNewsPage
+
class InrocksTvPage(GenericNewsPage):
"ArticlePage object for inrocks"
def on_loaded(self):
diff --git a/modules/inrocks/tools.py b/modules/inrocks/tools.py
index c39dcf26380bc76c204d8cde7d3c6e08e7e6e36b..309cccae026539e4e21658ea0696a27eff9b1db6 100644
--- a/modules/inrocks/tools.py
+++ b/modules/inrocks/tools.py
@@ -20,6 +20,7 @@
import re
+
def id2url(_id):
"return an url from an id"
regexp2 = re.compile("(\w+).([0-9]+).(.*$)")
diff --git a/modules/ipinfodb/backend.py b/modules/ipinfodb/backend.py
index 38a28aa1752d8627196967c3e137b49817e6bc38..efd319e77df9729889dc9aaba58bd63b3b073218 100644
--- a/modules/ipinfodb/backend.py
+++ b/modules/ipinfodb/backend.py
@@ -50,12 +50,12 @@ def get_location(self, ipaddr):
if 'Invalid IP or domain name' in content:
raise Exception('Bad parameter')
else:
- tab = {'City' : 'NA' ,\
- 'Country name' : 'NA' ,\
- 'Region' : 'NA' ,\
- 'Latitude' : 'NA' ,\
- 'Longitude' : 'NA' ,\
- 'hostname' : 'NA' ,\
+ tab = {'City' : 'NA' ,
+ 'Country name' : 'NA' ,
+ 'Region' : 'NA' ,
+ 'Latitude' : 'NA' ,
+ 'Longitude' : 'NA' ,
+ 'hostname' : 'NA' ,
'zipcode' : 'NA'}
line = ''
for line in content.split('\n'):
diff --git a/modules/ipinfodb/test.py b/modules/ipinfodb/test.py
index e3d62d60441707061c52a874ea5be0d721249e10..8d0d16d8b280aea0c3b39c2c90cdf9e1ce689c9a 100644
--- a/modules/ipinfodb/test.py
+++ b/modules/ipinfodb/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class IpinfodbTest(BackendTest):
BACKEND = 'ipinfodb'
diff --git a/modules/isohunt/test.py b/modules/isohunt/test.py
index 420ca6476bae2cb71523d8f73d1008ac870dee73..d054ba21c18645c49ac21e78b6f108fbc866c3a3 100644
--- a/modules/isohunt/test.py
+++ b/modules/isohunt/test.py
@@ -21,6 +21,7 @@
from random import choice
+
class IsohuntTest(BackendTest):
BACKEND = 'isohunt'
diff --git a/modules/kickass/pages.py b/modules/kickass/pages.py
index cdedf4325afe5479d44f431a7e6dc40f99f19814..92a60ae3e8f02804e0ae8761b07ca0c98f1bd1ea 100644
--- a/modules/kickass/pages.py
+++ b/modules/kickass/pages.py
@@ -125,7 +125,7 @@ def get_torrent(self, id):
for span in self.document.getiterator('span'):
# sometimes there are others span, this is not so sure but the size of the children list
# is enough to know if this is the right span
- if (span.attrib.get('class', '') == 'folder' \
+ if (span.attrib.get('class', '') == 'folder'
or span.attrib.get('class', '') == 'folderopen') \
and len(span.getchildren()) > 2:
size = span.getchildren()[1].tail
diff --git a/modules/kickass/test.py b/modules/kickass/test.py
index 4ce76f63630a46f85b6acbf2f752db11c0b1fd36..87a3ed1e13ace17f087dc03b314f8e0988f136aa 100644
--- a/modules/kickass/test.py
+++ b/modules/kickass/test.py
@@ -23,6 +23,7 @@
import urllib
from random import choice
+
class KickassTest(BackendTest):
BACKEND = 'kickass'
diff --git a/modules/lcl/browser.py b/modules/lcl/browser.py
index fc13b4644f28543545e37e7c7f5e793d9bd6bab9..651ce5541b69ef1307b7d176e9bcf8d6fd364804 100644
--- a/modules/lcl/browser.py
+++ b/modules/lcl/browser.py
@@ -63,7 +63,7 @@ def login(self):
assert self.agency.isdigit()
if not self.is_on_page(LoginPage):
- self.location('%s://%s/outil/UAUT/Authentication/authenticate' \
+ self.location('%s://%s/outil/UAUT/Authentication/authenticate'
% (self.PROTOCOL, self.DOMAIN),
no_login=True)
@@ -71,7 +71,7 @@ def login(self):
not self.is_logged() or \
(self.is_on_page(LoginPage) and self.page.is_error()) :
raise BrowserIncorrectPassword("invalid login/password.\nIf you did not change anything, be sure to check for password renewal request\non the original web site.\nAutomatic renewal will be implemented later.")
- self.location('%s://%s/outil/UWSP/Synthese' \
+ self.location('%s://%s/outil/UWSP/Synthese'
% (self.PROTOCOL, self.DOMAIN),
no_login=True)
diff --git a/modules/lcl/pages.py b/modules/lcl/pages.py
index 7625c0a8ac1d88330b2d9e7d37d48c296548e273..d8663a6a6b51d39ed06794750aa249e964d2220b 100644
--- a/modules/lcl/pages.py
+++ b/modules/lcl/pages.py
@@ -136,6 +136,7 @@ def select_contract(self):
self.browser.select_form(predicate=lambda form: form.attrs.get('id', '') == 'mainForm')
self.browser.submit()
+
class AccountsPage(BasePage):
def on_loaded(self):
warn = self.document.xpath('//div[@id="attTxt"]')
@@ -222,6 +223,7 @@ class Transaction(FrenchTransaction):
(re.compile('^(?PREM CHQ) (?P.*)'), FrenchTransaction.TYPE_DEPOSIT),
]
+
class AccountHistoryPage(BasePage):
def get_table(self):
tables=self.document.findall("//table[@class='tagTab pyjama']")
@@ -303,6 +305,7 @@ def get_operations(self):
operations.append(operation)
return operations
+
class CBHistoryPage(AccountHistoryPage):
def get_table(self):
# there is only one table on the page
@@ -320,6 +323,7 @@ def get_operations(self):
tr.type = tr.TYPE_CARD
yield tr
+
class CBListPage(CBHistoryPage):
def get_cards(self):
cards = []
diff --git a/modules/lcl/test.py b/modules/lcl/test.py
index 30dcc66be4492e4951de5a63ad51cff22cce3448..1c354019df1d3141a046567c5987f82fc729ae3d 100644
--- a/modules/lcl/test.py
+++ b/modules/lcl/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class LCLtTest(BackendTest):
BACKEND = 'lcl'
diff --git a/modules/lefigaro/backend.py b/modules/lefigaro/backend.py
index 68beba504f60a31cae58a890dfe179c97fdf696a..9fd58375c2f2106debf20b3fe031a2b304bdca93 100644
--- a/modules/lefigaro/backend.py
+++ b/modules/lefigaro/backend.py
@@ -23,6 +23,7 @@
from .browser import NewspaperFigaroBrowser
from .tools import rssid
+
class NewspaperFigaroBackend(GenericNewspaperBackend, ICapMessages):
MAINTAINER = u'Julien Hebert'
EMAIL = 'juke@free.fr'
diff --git a/modules/lefigaro/browser.py b/modules/lefigaro/browser.py
index e64c15e1d2283636d615b5e1c06169b0396fb49b..a453a345a5f12164b2b4e049c31668075371f3c0 100644
--- a/modules/lefigaro/browser.py
+++ b/modules/lefigaro/browser.py
@@ -22,6 +22,7 @@
from .pages.flashactu import FlashActuPage
from weboob.tools.browser import BaseBrowser, BasePage
+
class IndexPage(BasePage):
pass
diff --git a/modules/lefigaro/tools.py b/modules/lefigaro/tools.py
index 15d6b9ec9e03153f5463b18999e667a00bbd8817..6f45c08c2246e331c6db8f5346c377de901ecc6f 100644
--- a/modules/lefigaro/tools.py
+++ b/modules/lefigaro/tools.py
@@ -20,6 +20,7 @@
import re
+
def id2url(_id):
"return an url from an id"
regexp2 = re.compile("(\w+).([0-9]+).(.*$)")
diff --git a/modules/mangago/__init__.py b/modules/mangago/__init__.py
index c3dff900fabe78ac14d094526a7c8e5c71eab0af..171bfe1879c2561951daa424fc9346e5b66cd42f 100644
--- a/modules/mangago/__init__.py
+++ b/modules/mangago/__init__.py
@@ -21,4 +21,3 @@
from .backend import MangagoBackend
__all__ = ['MangagoBackend']
-
diff --git a/modules/mangago/backend.py b/modules/mangago/backend.py
index fb11ad5d977bda39f7e472dabf621939f841ab96..aa191b5194bec5b5b823314f116b8334262f0ab8 100644
--- a/modules/mangago/backend.py
+++ b/modules/mangago/backend.py
@@ -22,6 +22,7 @@
__all__ = ['MangagoBackend']
+
class MangagoBackend(GenericComicReaderBackend):
NAME = 'mangago'
DESCRIPTION = 'Mangago manga reading site'
@@ -33,4 +34,3 @@ class MangagoBackend(GenericComicReaderBackend):
URL_REGEXP = r'.+mangago.com/r/l_manga/(%s).+' % ID_REGEXP
ID_TO_URL = 'http://www.mangago.com/r/l_manga/%s'
PAGES = { URL_REGEXP: DisplayPage }
-
diff --git a/modules/mangago/test.py b/modules/mangago/test.py
index 0751f6432623750cd6c95b600974acef6ac5d6a0..0e6d81992e57172a59802b2a73f2763c69a83627 100644
--- a/modules/mangago/test.py
+++ b/modules/mangago/test.py
@@ -19,8 +19,9 @@
from weboob.tools.capabilities.gallery.genericcomicreader import GenericComicReaderTest
+
class MangagoTest(GenericComicReaderTest):
BACKEND = 'mangago'
+
def test_download(self):
return self._test_download('manga/love_scar/mh/manga/love_scar/c001/')
-
diff --git a/modules/marmiton/browser.py b/modules/marmiton/browser.py
index f68ba496f731179508946884788101a934ba6518..9c6a50b5f11fe396fa770cf642d47e5de818eae3 100644
--- a/modules/marmiton/browser.py
+++ b/modules/marmiton/browser.py
@@ -25,6 +25,7 @@
__all__ = ['MarmitonBrowser']
+
class MarmitonBrowser(BaseBrowser):
DOMAIN = 'www.marmiton.org'
PROTOCOL = 'http'
diff --git a/modules/marmiton/pages.py b/modules/marmiton/pages.py
index e6ed295ea51a024e1b65b50e2cfdd0a61b65a287..69e31a56cb063e59f3ed1134119f90d79aa3d531 100644
--- a/modules/marmiton/pages.py
+++ b/modules/marmiton/pages.py
@@ -53,7 +53,7 @@ def iter_recipes(self):
recipe.cooking_time = NotLoaded
recipe.preparation_time = NotLoaded
yield recipe
-
+
class RecipePage(BasePage):
""" Page which contains a recipe
diff --git a/modules/marmiton/test.py b/modules/marmiton/test.py
index 9e9885d58223030f080aa5c0e3fe852df2ce8dd8..d8f30ee590f18dbbb1fb1a0525be20bec07ac107 100644
--- a/modules/marmiton/test.py
+++ b/modules/marmiton/test.py
@@ -19,6 +19,7 @@
from weboob.tools.test import BackendTest
+
class MarmitonTest(BackendTest):
BACKEND = 'marmiton'
@@ -30,4 +31,3 @@ def test_recipe(self):
assert full_recipe.ingredients
assert full_recipe.title
assert full_recipe.preparation_time
-
diff --git a/modules/mediawiki/test.py b/modules/mediawiki/test.py
index 2ee72fe16f21713ac2fd2b3cf7495f41ab09ecc4..0aced62134de1e92b823aa2f814af7dfa46776f5 100644
--- a/modules/mediawiki/test.py
+++ b/modules/mediawiki/test.py
@@ -21,6 +21,7 @@
from weboob.tools.test import BackendTest
from datetime import datetime
+
class MediawikiTest(BackendTest):
BACKEND = 'mediawiki'
diff --git a/modules/meteofrance/test.py b/modules/meteofrance/test.py
index d748a8690c05286c0f1d724fa2855cd0f3e32e0e..1743ab10a71ccbf9c0f7d593f263e0ba13f0d3d5 100644
--- a/modules/meteofrance/test.py
+++ b/modules/meteofrance/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class MeteoFranceTest(BackendTest):
BACKEND = 'meteofrance'
diff --git a/modules/nolifetv/pages/video.py b/modules/nolifetv/pages/video.py
index 5c86dcad8d2298cd78341fddfb101255f153bc5b..2d2cec219c009af015de22d70924e7df7ff565a9 100644
--- a/modules/nolifetv/pages/video.py
+++ b/modules/nolifetv/pages/video.py
@@ -104,6 +104,7 @@ def get_video(self, video=None):
return video
SALT = 'a53be1853770f0ebe0311d6993c7bcbe'
+
def genkey(self):
# This website is really useful to get info: http://www.showmycode.com/
timestamp = str(int(time.time()))
diff --git a/modules/nova/test.py b/modules/nova/test.py
index 69c939820b2bba8b469142aa502ab14c616c1401..9b806797d49c6c4077d140c2ff959d2137b9c310 100644
--- a/modules/nova/test.py
+++ b/modules/nova/test.py
@@ -21,6 +21,7 @@
from weboob.tools.test import BackendTest
from weboob.capabilities.radio import Radio
+
class NovaTest(BackendTest):
BACKEND = 'nova'
diff --git a/modules/okc/backend.py b/modules/okc/backend.py
index 52745ba9ec69fd7c6e0585461e6a8a4d84e95b6e..2e7fd3cf679007f7eeff50e646bfcda2b161a412 100644
--- a/modules/okc/backend.py
+++ b/modules/okc/backend.py
@@ -38,6 +38,7 @@
__all__ = ['OkCBackend']
+
def parse_dt(s):
now = datetime.datetime.now()
if s is None:
@@ -62,6 +63,7 @@ def parse_dt(s):
d = _parse_dt(s)
return local2utc(d)
+
class OkCBackend(BaseBackend, ICapMessages, ICapContact, ICapMessagesPost):
NAME = 'okc'
MAINTAINER = u'Roger Philibert'
diff --git a/modules/okc/browser.py b/modules/okc/browser.py
index 57e6acce2f3c632e22dae4a08d257e39ec6ae434..57b1324771124ffbbb06fe863d02fa049e956805 100644
--- a/modules/okc/browser.py
+++ b/modules/okc/browser.py
@@ -30,6 +30,7 @@
class OkCException(Exception):
pass
+
class OkCBrowser(BaseBrowser):
DOMAIN = 'm.okcupid.com'
PROTOCOL = 'https'
diff --git a/modules/okc/pages.py b/modules/okc/pages.py
index 0b8dc034525ac3a8dce3c6c7037c444a66f09053..15104e48cc195e63defc20042abf88fdfcd7cbb1 100644
--- a/modules/okc/pages.py
+++ b/modules/okc/pages.py
@@ -23,6 +23,7 @@
from weboob.tools.ordereddict import OrderedDict
from weboob.capabilities.contact import ProfileNode
+
class LoginPage(BasePage):
def login(self, username, password):
self.browser.select_form(name='loginf')
@@ -30,6 +31,7 @@ def login(self, username, password):
self.browser['password'] = password.encode(self.browser.ENCODING)
self.browser.submit(id='login_btn', nologin=True)
+
class ThreadPage(BasePage):
def get_threads(self):
li_elems = self.parser.select(self.document.getroot(), "//div[@id='page_content']//li", method= 'xpath')
@@ -45,6 +47,7 @@ def get_threads(self):
return threads
+
class MessagesPage(BasePage):
def get_thread_mails(self, count):
ul_item = self.parser.select(self.document.getroot(), "//ul[@id='rows']", method='xpath')[0]
@@ -158,11 +161,13 @@ def get_profile(self):
return profile
+
class PhotosPage(BasePage):
def get_photos(self):
imgs = self.parser.select(self.document.getroot(), "//div[@class='pic clearfix']//img", method='xpath')
return [unicode(img.get('src')) for img in imgs]
+
class PostMessagePage(BasePage):
def post_mail(self, id, content):
self.browser.select_form(name='f2')
diff --git a/modules/opacwebaloes/browser.py b/modules/opacwebaloes/browser.py
index 3daea7c9f9c6cf17752e449978f026ab655d4b88..bb33d44af7924a9ba5a3d9da97edbf2037cfce1c 100644
--- a/modules/opacwebaloes/browser.py
+++ b/modules/opacwebaloes/browser.py
@@ -55,7 +55,7 @@ def login(self):
assert isinstance(self.username, basestring)
assert isinstance(self.password, basestring)
if not self.is_on_page(HomePage):
- self.location('%s://%s/index.aspx' \
+ self.location('%s://%s/index.aspx'
% (self.PROTOCOL, self.BASEURL),
no_login=True)
if not self.page.login(self.username, self.password) or \
@@ -65,13 +65,13 @@ def login(self):
def get_rented_books_list(self):
if not self.is_on_page(RentedPage):
- self.location('%s://%s/index.aspx?IdPage=45' \
+ self.location('%s://%s/index.aspx?IdPage=45'
% (self.PROTOCOL, self.BASEURL)
)
return self.page.get_list()
def get_booked_books_list(self):
if not self.is_on_page(BookedPage):
- self.location('%s://%s/index.aspx?IdPage=44' \
+ self.location('%s://%s/index.aspx?IdPage=44'
% (self.PROTOCOL, self.BASEURL))
return self.page.get_list()
diff --git a/modules/opacwebaloes/pages.py b/modules/opacwebaloes/pages.py
index 640d1b9d174b8c3bbe4da483b5826c97a3aa6f07..c801782d96c548a9dcab6de3896ef4ae57af2bea 100644
--- a/modules/opacwebaloes/pages.py
+++ b/modules/opacwebaloes/pages.py
@@ -22,12 +22,15 @@
from weboob.tools.browser import BasePage, BrowserUnavailable
from weboob.tools.mech import ClientForm
+
class SkipPage(BasePage):
pass
+
class HomePage(BasePage):
pass
+
def txt2date(s):
return date(*reversed([int(x) for x in s.split(' ')[-1].split('/')]))
@@ -51,6 +54,7 @@ def iter_books(self, el, start):
book.date = txt2date(tr[start+5].text)
yield book
+
class HistoryPage(BasePage):
pass
@@ -75,6 +79,7 @@ def get_list(self):
book.late = False
yield book
+
class LoginPage(BasePage):
def login(self, login, passwd):
self.browser.select_form(predicate=lambda x: x.attrs.get('id','')=='aspnetForm')
diff --git a/modules/opacwebaloes/test.py b/modules/opacwebaloes/test.py
index d105c76d7d37a9c484b6f04f5788f68da9598d98..517fdf2f52dca6f7ec22b0eb65c927dd60a688d1 100644
--- a/modules/opacwebaloes/test.py
+++ b/modules/opacwebaloes/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class AloestTest(BackendTest):
BACKEND = 'aloes'
diff --git a/modules/opensubtitles/browser.py b/modules/opensubtitles/browser.py
index fefed5af5b30cdac13e18c57ea0bf2183d947116..19b523e5d4bd500f94848590eb52a693c136b27a 100644
--- a/modules/opensubtitles/browser.py
+++ b/modules/opensubtitles/browser.py
@@ -26,6 +26,7 @@
__all__ = ['OpensubtitlesBrowser']
+
class OpensubtitlesBrowser(BaseBrowser):
DOMAIN = 'www.opensubtitles.org'
PROTOCOL = 'http'
diff --git a/modules/opensubtitles/test.py b/modules/opensubtitles/test.py
index be484df210b976702aad4f62ee952f20a2e4c0cf..66e7e568df186101159be37f7badd8a6c2d5fd23 100644
--- a/modules/opensubtitles/test.py
+++ b/modules/opensubtitles/test.py
@@ -21,6 +21,7 @@
from random import choice
+
class OpensubtitlesTest(BackendTest):
BACKEND = 'opensubtitles'
diff --git a/modules/orange/browser.py b/modules/orange/browser.py
index 36816b6ece1910184e2243d45821a41ae4b00182..a9ea84bdc597fb2758e508e771405022945cc6e8 100644
--- a/modules/orange/browser.py
+++ b/modules/orange/browser.py
@@ -37,6 +37,7 @@ class OrangeBrowser(BaseBrowser):
'http://smsmms1.orange.fr/./Sms/sms_write.php.*' : ComposePage,
'http://smsmms1.orange.fr/./Sms/sms_write.php?command=send' : ConfirmPage,
}
+
def get_nb_remaining_free_sms(self):
self.location("http://smsmms1.orange.fr/M/Sms/sms_write.php")
return self.page.get_nb_remaining_free_sms()
diff --git a/modules/orange/pages/login.py b/modules/orange/pages/login.py
index 8fa7173065b8e4d1cf5ef3af95dcddd712678d62..72afcf42632b4b098ca08887c2953fe81c1d990a 100644
--- a/modules/orange/pages/login.py
+++ b/modules/orange/pages/login.py
@@ -22,6 +22,7 @@
__all__ = ['LoginPage']
+
class LoginPage(BasePage):
def on_loaded(self):
pass
diff --git a/modules/pap/browser.py b/modules/pap/browser.py
index 57c45a35cd075dd8b3f534df2a2613c211c8aa64..c2ba06cc1ad69eed7bf784909a26b43e85cae622 100644
--- a/modules/pap/browser.py
+++ b/modules/pap/browser.py
@@ -47,6 +47,7 @@ def search_geo(self, pattern):
TYPES = {Query.TYPE_RENT: 'location',
Query.TYPE_SALE: 'vente',
}
+
def search_housings(self, type, cities, nb_rooms, area_min, area_max, cost_min, cost_max):
data = {'geo_objets_ids': ','.join(cities),
'surface[min]': area_min or '',
diff --git a/modules/pap/pages.py b/modules/pap/pages.py
index 7eed3659f0a3fca6346064c68bf5e79163482c1c..742260fabaf28053ca0f07ba05099b673d0ece92 100644
--- a/modules/pap/pages.py
+++ b/modules/pap/pages.py
@@ -88,6 +88,7 @@ def iter_housings(self):
yield housing
+
class HousingPage(BasePage):
def get_housing(self):
div = self.parser.select(self.document.getroot(), 'div#annonce_detail', 1)
diff --git a/modules/parolesmania/test.py b/modules/parolesmania/test.py
index 19a70d6fff3de9f2dd8c409bc1efafcbfa566d77..d397eae2bcfb9e2503e030e0ed1f29ae3c494989 100644
--- a/modules/parolesmania/test.py
+++ b/modules/parolesmania/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
from weboob.capabilities.base import NotLoaded
+
class ParolesmaniaTest(BackendTest):
BACKEND = 'parolesmania'
diff --git a/modules/parolesmusique/backend.py b/modules/parolesmusique/backend.py
index 8f328c175a157eed44c5ad4f5f475f8c2d4f38e4..be427e65aa33b6e68eb6846f01ad405b04ad693a 100644
--- a/modules/parolesmusique/backend.py
+++ b/modules/parolesmusique/backend.py
@@ -48,7 +48,7 @@ def fill_songlyrics(self, songlyrics, fields):
sl = self.get_lyrics(songlyrics.id)
songlyrics.content = sl.content
return songlyrics
-
+
OBJECTS = {
SongLyrics:fill_songlyrics
}
diff --git a/modules/parolesmusique/pages.py b/modules/parolesmusique/pages.py
index 9f3354acea84f97e4410aaeb407ee6999560a4dd..7aad55e76393ae8ac59b42330fb7465c516d3f93 100644
--- a/modules/parolesmusique/pages.py
+++ b/modules/parolesmusique/pages.py
@@ -38,6 +38,7 @@ def iter_lyrics(self,criteria,pattern):
for lyr in self.browser.page.iter_lyrics():
yield lyr
+
class ArtistResultsPage(BasePage):
def iter_lyrics(self):
for link in self.parser.select(self.document.getroot(),'div.cont_cat table a.std'):
diff --git a/modules/parolesmusique/test.py b/modules/parolesmusique/test.py
index a9b2a9f367e6bd2e7fa23ff3f5b1a8311bb779b8..1008b769f3aba24d6a2469c70ac39618d3e375b0 100644
--- a/modules/parolesmusique/test.py
+++ b/modules/parolesmusique/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
from weboob.capabilities.base import NotLoaded
+
class ParolesmusiqueTest(BackendTest):
BACKEND = 'parolesmusique'
diff --git a/modules/pastealacon/browser.py b/modules/pastealacon/browser.py
index c5291a1b665e4a7952b2712d24c44b6c68c957d7..b6acfde96ae5206749863c6d0ca18865b94cbda4 100644
--- a/modules/pastealacon/browser.py
+++ b/modules/pastealacon/browser.py
@@ -30,6 +30,7 @@
__all__ = ['PastealaconBrowser']
+
class PastealaconBrowser(BaseBrowser):
DOMAIN = 'pastealacon.com'
ENCODING = 'ISO-8859-1'
diff --git a/modules/pastealacon/pages.py b/modules/pastealacon/pages.py
index 2d54a07403d744c8c4a062336ec98759cf92064a..7a395f84558aa56ddbc25fd4f9285360a4dfe18c 100644
--- a/modules/pastealacon/pages.py
+++ b/modules/pastealacon/pages.py
@@ -26,6 +26,7 @@
__all__ = ['PastePage', 'PostPage', 'CaptchaPage']
+
class PastePage(BasePage):
def fill_paste(self, paste):
root = self.document.getroot()
@@ -46,6 +47,7 @@ def get_id(self):
"""
return self.group_dict['id']
+
class PostPage(BasePage):
def post(self, paste, expiration=None):
self.browser.select_form(name='editor')
@@ -55,5 +57,6 @@ def post(self, paste, expiration=None):
self.browser['expiry'] = [expiration]
self.browser.submit()
+
class CaptchaPage(BasePage):
pass
diff --git a/modules/pastealacon/test.py b/modules/pastealacon/test.py
index 0624b299aa824b5aa5e0d418479b6e3e20ec027e..7e87faedadde4997650ce760e30c33666f47e898 100644
--- a/modules/pastealacon/test.py
+++ b/modules/pastealacon/test.py
@@ -24,6 +24,7 @@
from weboob.capabilities.paste import PasteNotFound
+
class PastealaconTest(BackendTest):
BACKEND = 'pastealacon'
diff --git a/modules/pastebin/test.py b/modules/pastebin/test.py
index 040dc77dd865461cde90f203ef4a60ec53fd4207..d6d96048459ea5d0390e22e6eb13bcd62caa0eff 100644
--- a/modules/pastebin/test.py
+++ b/modules/pastebin/test.py
@@ -21,6 +21,7 @@
from weboob.capabilities.base import NotLoaded
from weboob.capabilities.paste import PasteNotFound
+
class PastebinTest(BackendTest):
BACKEND = 'pastebin'
diff --git a/modules/phpbb/pages/forum.py b/modules/phpbb/pages/forum.py
index c9bb2fa0d6bc80f5310a250124b5896d738d1e5a..2d8b03c1a9d12aee78170bf073be13ca6fa68a7d 100644
--- a/modules/phpbb/pages/forum.py
+++ b/modules/phpbb/pages/forum.py
@@ -40,6 +40,7 @@ def __init__(self, type, url):
self.title = u''
self.date = None
+
class ForumPage(PhpBBPage):
def iter_links(self):
for li in self.parser.select(self.document.getroot(), 'ul.forums li.row'):
@@ -72,6 +73,7 @@ def iter_all_forums(self):
yield value, option.text.strip(u'» \xa0\n\r')
+
class Post(object):
def __init__(self, forum_id, topic_id, id):
self.id = int(id)
@@ -84,6 +86,7 @@ def __init__(self, forum_id, topic_id, id):
self.signature = u''
self.parent = 0
+
class TopicPage(PhpBBPage):
def on_loaded(self):
div = self.document.getroot().cssselect('div.pagination')[0]
diff --git a/modules/phpbb/pages/index.py b/modules/phpbb/pages/index.py
index 46ad3b7a9d99e94d9be33f941716f6914a46eab9..b41edbef34b49cd2f70108e62a87725f2e450082 100644
--- a/modules/phpbb/pages/index.py
+++ b/modules/phpbb/pages/index.py
@@ -20,6 +20,7 @@
from weboob.tools.browser import BasePage
+
class PhpBBPage(BasePage):
def is_logged(self):
return len(self.document.getroot().cssselect('li.icon-register')) == 0
@@ -35,5 +36,6 @@ def get_error_message(self):
errors.append(div.text.strip())
return ', '.join(errors)
+
class LoginPage(PhpBBPage):
pass
diff --git a/modules/phpbb/tools.py b/modules/phpbb/tools.py
index 292bf18b38769f27e1feb12234b2855aada43aad..f384dbf4ab6ea2a1944b040405f6411f7fbff229 100644
--- a/modules/phpbb/tools.py
+++ b/modules/phpbb/tools.py
@@ -42,6 +42,7 @@ def url2id(url, nopost=False):
return None
+
def id2url(id):
v = id.split('.')
if len(v) == 1:
@@ -54,15 +55,18 @@ def id2url(id):
int(v[2]),
int(v[2]))
+
def id2topic(id):
try:
return int(id.split('.')[1])
except IndexError:
return None
+
def rssid(id):
return id
+
def parse_date(s):
s = s.replace(u'Fév', 'Feb') \
.replace(u'Avr', 'Apr') \
diff --git a/modules/piratebay/backend.py b/modules/piratebay/backend.py
index 40941a113e458d34ce755d369a35e815ec57f5f2..b3347a90d66c6f9da6e18a4a923097ef6f663043 100644
--- a/modules/piratebay/backend.py
+++ b/modules/piratebay/backend.py
@@ -26,6 +26,7 @@
__all__ = ['PiratebayBackend']
+
class PiratebayBackend(BaseBackend, ICapTorrent):
NAME = 'piratebay'
MAINTAINER = u'Julien Veyssier'
diff --git a/modules/piratebay/test.py b/modules/piratebay/test.py
index ca01336c95983d1954a11106ea06e955bd8d3321..65b7fa839980cf128e1edd57860b0e6720d3fc54 100644
--- a/modules/piratebay/test.py
+++ b/modules/piratebay/test.py
@@ -22,6 +22,7 @@
from random import choice
+
class PiratebayTest(BackendTest):
BACKEND = 'piratebay'
diff --git a/modules/prixcarburants/pages.py b/modules/prixcarburants/pages.py
index 55775ff6b286b05390a4df94d3ae338184048f42..336c3dff0b6b67ee3e0740001b97eb23481b2a44 100644
--- a/modules/prixcarburants/pages.py
+++ b/modules/prixcarburants/pages.py
@@ -44,6 +44,7 @@ def iter_products(self):
yield product
+
class ComparisonResultsPage(BasePage):
def get_product_name(self):
try:
@@ -75,6 +76,7 @@ def iter_results(self, product=None):
price.set_empty_fields(NotAvailable)
yield price
+
class ShopInfoPage(BasePage):
def get_info(self):
return self.parser.tostring(self.parser.select(self.document.getroot(), 'div.colg', 1))
diff --git a/modules/redmine/pages/index.py b/modules/redmine/pages/index.py
index 532c0c0ee05100566d5bc4f13c30e7b69bb75f91..a384b709a47ca59b791dbbb97ec31ddbcca1dcde 100644
--- a/modules/redmine/pages/index.py
+++ b/modules/redmine/pages/index.py
@@ -20,6 +20,7 @@
from weboob.tools.browser import BasePage
+
class LoginPage(BasePage):
def login(self, username, password):
self.browser.select_form(nr=1)
@@ -27,12 +28,15 @@ def login(self, username, password):
self.browser['password'] = password
self.browser.submit()
+
class IndexPage(BasePage):
pass
+
class MyPage(BasePage):
pass
+
class ProjectsPage(BasePage):
def iter_projects(self):
for ul in self.parser.select(self.document.getroot(), 'ul.projects'):
diff --git a/modules/redmine/pages/issues.py b/modules/redmine/pages/issues.py
index dc7379793b4431271d1b665a6445e99109bda175..b996d0172e4845be71e910d081a9f9eb71b47622 100644
--- a/modules/redmine/pages/issues.py
+++ b/modules/redmine/pages/issues.py
@@ -26,6 +26,7 @@
from weboob.tools.misc import to_unicode
from weboob.tools.mech import ClientForm
+
class BaseIssuePage(BasePage):
def parse_datetime(self, text):
m = re.match('(\d+)/(\d+)/(\d+) (\d+):(\d+) (\w+)', text)
@@ -80,6 +81,7 @@ def get_authenticity_token(self):
token = tokens[0].attrib['value']
return token
+
class IssuesPage(BaseIssuePage):
PROJECT_FIELDS = {'members': 'values_assigned_to_id',
'categories': 'values_category_id',
@@ -129,6 +131,7 @@ def iter_issues(self):
if len(issue) != 0:
yield issue
+
class NewIssuePage(BaseIssuePage):
PROJECT_FIELDS = {'members': 'issue_assigned_to_id',
'categories': 'issue_category_id',
@@ -182,6 +185,7 @@ def fill_form(self, **kwargs):
getattr(self, 'set_%s' % key)(value)
self.browser.submit()
+
class IssuePage(NewIssuePage):
def _parse_selection(self, id):
try:
@@ -291,6 +295,7 @@ def get_params(self):
return params
+
class IssueLogTimePage(BasePage):
def logtime(self, hours, message):
self.browser.select_form(predicate=lambda form: form.attrs.get('action', '').endswith('/edit'))
@@ -299,5 +304,6 @@ def logtime(self, hours, message):
self.browser['time_entry[activity_id]'] = ['8']
self.browser.submit()
+
class IssueTimeEntriesPage(BasePage):
pass
diff --git a/modules/seeklyrics/test.py b/modules/seeklyrics/test.py
index 64a3a4ab67459633b64cdccb70ff3a4a63fe06e5..d0d4056eda8edcae8a880b2091b7f1019b27b6fa 100644
--- a/modules/seeklyrics/test.py
+++ b/modules/seeklyrics/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
from weboob.capabilities.base import NotLoaded
+
class SeeklyricsTest(BackendTest):
BACKEND = 'seeklyrics'
diff --git a/modules/seloger/pages.py b/modules/seloger/pages.py
index e005a3870784dd5fd4ffd7cb0e6425e0ec54b80b..d6c805f701736a85671d718e3c9fe559365fc34e 100644
--- a/modules/seloger/pages.py
+++ b/modules/seloger/pages.py
@@ -59,6 +59,7 @@ def iter_housings(self):
yield housing
+
class HousingPage(BasePage):
def get_housing(self, housing=None):
if housing is None:
diff --git a/modules/sfr/test.py b/modules/sfr/test.py
index 7c525d8fb0d3d0ea12cb245bdc7c0849e7b3a143..c17b980afa977b0d4b32efcef9ee0692f27be387 100644
--- a/modules/sfr/test.py
+++ b/modules/sfr/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class SFRTest(BackendTest):
BACKEND = 'sfr'
diff --git a/modules/societegenerale/pages/accounts_list.py b/modules/societegenerale/pages/accounts_list.py
index 52cfaedfeb2b2ce9c08731c7a62827d9e489fb16..1f7bc31021a4b6a56dcbce7434a6d184be72c42d 100644
--- a/modules/societegenerale/pages/accounts_list.py
+++ b/modules/societegenerale/pages/accounts_list.py
@@ -87,6 +87,7 @@ def get_list(self):
accounts.append(account)
return iter(accounts)
+
class CardsList(BasePage):
def iter_cards(self):
for tr in self.document.getiterator('tr'):
@@ -96,6 +97,7 @@ def iter_cards(self):
yield tr.xpath('.//a')[0].attrib['href']
+
class Transaction(FrenchTransaction):
PATTERNS = [(re.compile(r'^CARTE \w+ RETRAIT DAB.* (?P\d{2})/(?P\d{2})( (?P\d+)H(?P\d+))? (?P.*)'),
FrenchTransaction.TYPE_WITHDRAWAL),
@@ -123,6 +125,7 @@ class Transaction(FrenchTransaction):
FrenchTransaction.TYPE_WITHDRAWAL),
]
+
class AccountHistory(BasePage):
def get_part_url(self):
for script in self.document.getiterator('script'):
diff --git a/modules/societegenerale/test.py b/modules/societegenerale/test.py
index 45102f19fc1cd201b0e3e99552c7d5d2b43c29e3..63973a3981b925b2ba063a531fb55c40282ff81a 100644
--- a/modules/societegenerale/test.py
+++ b/modules/societegenerale/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class SocieteGeneraleTest(BackendTest):
BACKEND = 'societegenerale'
diff --git a/modules/transilien/backend.py b/modules/transilien/backend.py
index 6131007738c0c32dd3342de161055dcd6609b7da..7ecf6661a675e96c0474681a806c6ef45008da72 100644
--- a/modules/transilien/backend.py
+++ b/modules/transilien/backend.py
@@ -26,6 +26,7 @@
from .browser import Transilien
from .stations import STATIONS
+
class TransilienBackend(BaseBackend, ICapTravel):
NAME = 'transilien'
MAINTAINER = u'Julien Hébert'
diff --git a/modules/transilien/browser.py b/modules/transilien/browser.py
index 8c82859c6019a2c8e14b7f724f106798829b3cb2..a4ad867db2be620d21e3d65d52aa83ab0e49ca90 100644
--- a/modules/transilien/browser.py
+++ b/modules/transilien/browser.py
@@ -23,10 +23,12 @@
from .pages.departures import DeparturesPage
from .pages.roadmap import RoadmapSearchPage, RoadmapConfirmPage, RoadmapPage
+
class UnavailablePage(BasePage):
def on_loaded(self):
raise BrowserUnavailable('Website is currently unavailable')
+
class Transilien(BaseBrowser):
DOMAIN = 'www.transilien.com'
PROTOCOL = 'https'
diff --git a/modules/transilien/pages/departures.py b/modules/transilien/pages/departures.py
index a2c0cb31b4a5526cd43792807309b7424b7750dc..5a24c18bd7eb7a333a013c51199c38fe67f20230 100644
--- a/modules/transilien/pages/departures.py
+++ b/modules/transilien/pages/departures.py
@@ -30,6 +30,7 @@
class StationNotFound(UserError):
pass
+
class DeparturesPage(BasePage):
def iter_routes(self):
try:
diff --git a/modules/transilien/pages/roadmap.py b/modules/transilien/pages/roadmap.py
index f51c7742c608f703699e9df1b85de29f8b64dcb1..43088936d5a7110b292aae43db3a91b088750224 100644
--- a/modules/transilien/pages/roadmap.py
+++ b/modules/transilien/pages/roadmap.py
@@ -54,6 +54,7 @@ def search(self, departure, arrival, departure_time, arrival_time):
raise RoadmapError('Unable to establish a roadmap with %s time at "%s"' % ('departure' if departure_time else 'arrival', time))
self.browser.submit()
+
class RoadmapPage(BasePage):
def get_steps(self):
errors = []
@@ -95,6 +96,7 @@ def parse_duration(self, dur):
return datetime.timedelta(hours=int(m.group(1)),
minutes=int(m.group(2)))
+
class RoadmapConfirmPage(RoadmapPage):
def select(self, name, num):
try:
diff --git a/modules/transilien/test.py b/modules/transilien/test.py
index 0eb399410848a2ac5bfd74d418c95f7130ad1b6e..6d90efbacda340bee5a1042b380ff64a58394355 100644
--- a/modules/transilien/test.py
+++ b/modules/transilien/test.py
@@ -22,6 +22,7 @@
from weboob.capabilities.travel import RoadmapFilters
from weboob.tools.test import BackendTest
+
class TransilienTest(BackendTest):
BACKEND = 'transilien'
diff --git a/modules/trictractv/test.py b/modules/trictractv/test.py
index 1fa835fbfda7a74aace7e0d10067f31d55015d4a..621287f5250eb6ae9e1487b98a8d0385319df756 100644
--- a/modules/trictractv/test.py
+++ b/modules/trictractv/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class TricTracTVTest(BackendTest):
BACKEND = 'trictractv'
diff --git a/modules/tvsubtitles/browser.py b/modules/tvsubtitles/browser.py
index 8703393808f63717e73b822acb7e03f3679dd202..079e9e44e379e399221ef6e5ef76f1cbc364189a 100644
--- a/modules/tvsubtitles/browser.py
+++ b/modules/tvsubtitles/browser.py
@@ -29,6 +29,7 @@
'ar','hu','pl','tr','nl','pt','sv','da','fi',
'ko','cn','jp','bg','cz','ro']
+
class TvsubtitlesBrowser(BaseBrowser):
DOMAIN = 'www.tvsubtitles.net'
PROTOCOL = 'http'
diff --git a/modules/tvsubtitles/test.py b/modules/tvsubtitles/test.py
index e53dfd093e1898843b485c350235c346e31fab76..2432ee0026cc52c716ca694d9c73764278c884ae 100644
--- a/modules/tvsubtitles/test.py
+++ b/modules/tvsubtitles/test.py
@@ -21,6 +21,7 @@
from random import choice
+
class TvsubtitlesTest(BackendTest):
BACKEND = 'tvsubtitles'
diff --git a/modules/vimeo/pages.py b/modules/vimeo/pages.py
index 06becb89001ffdadeb78f5a7fb3dad96fd0b9283..44981b09212bb9ae489c69b49fd89478caf08bf4 100644
--- a/modules/vimeo/pages.py
+++ b/modules/vimeo/pages.py
@@ -40,6 +40,7 @@
__all__ = ['VideoPage']
+
class VideoPage(BasePage):
def get_video(self, video=None):
if video is None:
diff --git a/modules/vimeo/video.py b/modules/vimeo/video.py
index a9e58200651a3c2a1463b88ca8a67a1407c4c78e..f4e26b7dffa30996ae26192aa7559ab9bccc015b 100644
--- a/modules/vimeo/video.py
+++ b/modules/vimeo/video.py
@@ -32,4 +32,3 @@ def __init__(self, *args, **kwargs):
@classmethod
def id2url(cls, _id):
return u'http://vimeo.com/%s' % _id
-
diff --git a/modules/weather/backend.py b/modules/weather/backend.py
index 8800e8817b41bb2116ed4a404478bc33640c8998..25d5a94ce06ebb7a4242b0f54f90e7a2fb61a336 100644
--- a/modules/weather/backend.py
+++ b/modules/weather/backend.py
@@ -25,6 +25,7 @@
__all__ = ['WeatherBackend']
+
class WeatherBackend(BaseBackend, ICapWeather):
NAME = 'weather'
MAINTAINER = u'Arno Renevier'
diff --git a/modules/weather/browser.py b/modules/weather/browser.py
index 62941370495a118e8151b60bec56e067ba0ba1a9..d70b465d29b03106f34d9a361b3a2d02bf03a131 100644
--- a/modules/weather/browser.py
+++ b/modules/weather/browser.py
@@ -26,6 +26,7 @@
__all__ = ['WeatherBrowser']
+
class WeatherBrowser(BaseBrowser):
DOMAIN = 'www.weather.com'
PROTOCOL = 'http'
diff --git a/modules/weather/pages.py b/modules/weather/pages.py
index 0f15d0b0c380b84a8392ee93d10bd589475ab834..58971922cfc2c9f3c39f687e6dbffc9651fe7984 100644
--- a/modules/weather/pages.py
+++ b/modules/weather/pages.py
@@ -36,6 +36,7 @@ def iter_city_search(self):
city_id = item.find('a').attrib.get("href", "").split("+")[-1]
yield City(city_id, city_name)
+
class WeatherPage(BasePage):
def get_city(self):
parts = self.url.split('/')[-1].split('+')
@@ -47,6 +48,7 @@ def get_current(self):
temp = float(self.document.find('//p[@class="wx-temp"]').text_content().strip().split(u'°')[0])
return Current(date, temp, text, u'F')
+
class ForecastPage(BasePage):
def iter_forecast(self):
divs = self.document.findall('//div[@class="wx-daypart"]')
diff --git a/modules/weather/test.py b/modules/weather/test.py
index 49b826bacaeef676ce22850f97d44b21beaf6661..56e8efd0feda34f0322eb5eb04743a828d052efa 100644
--- a/modules/weather/test.py
+++ b/modules/weather/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class WeatherTest(BackendTest):
BACKEND = 'weather'
diff --git a/modules/wordreference/browser.py b/modules/wordreference/browser.py
index 41c5a7cd5f5ecd7ef364dfbf125ec93c35fafc90..7cefe5ff943c1d77b3ce506fb857b43fef2549ea 100644
--- a/modules/wordreference/browser.py
+++ b/modules/wordreference/browser.py
@@ -35,7 +35,7 @@ class WordReferenceBrowser(BaseBrowser):
PAGES = {
'https?://www\.wordreference\.com/.*/.*': TranslatePage
}
-
+
def __init__(self, *args, **kwargs):
BaseBrowser.__init__(self, *args, **kwargs)
diff --git a/modules/wordreference/pages.py b/modules/wordreference/pages.py
index f4735a236c9e5b86d5efd0fab4380d976cfd6da0..b09d054e5752b8f184146ed7a95805bf7ed45f2a 100644
--- a/modules/wordreference/pages.py
+++ b/modules/wordreference/pages.py
@@ -53,4 +53,3 @@ def get_translation(self):
return u''+td.text_content().split(';')[0].strip()
if td.attrib.get('class','') == 'roman1':
prev_was_roman1 = True
-
diff --git a/modules/yahoo/test.py b/modules/yahoo/test.py
index 281bde339b54b3f3590513e35078e39528957759..421817106f817bfd0e7e98624ffe8ef1e6a81a04 100644
--- a/modules/yahoo/test.py
+++ b/modules/yahoo/test.py
@@ -20,6 +20,7 @@
from weboob.tools.test import BackendTest
+
class YahooTest(BackendTest):
BACKEND = 'yahoo'
diff --git a/modules/youtube/pages.py b/modules/youtube/pages.py
index 782c464b0bdd13684dfee7e409bc8ec4f6459d81..2ff6c5de935d016cb060136b9d74db3dbc187fe4 100644
--- a/modules/youtube/pages.py
+++ b/modules/youtube/pages.py
@@ -25,7 +25,7 @@
from weboob.tools.json import json
-__all__ = ['LoginPage', 'LoginRedirectPage', 'ForbiddenVideo', 'ForbiddenVideoPage', \
+__all__ = ['LoginPage', 'LoginRedirectPage', 'ForbiddenVideo', 'ForbiddenVideoPage',
'VerifyAgePage', 'VerifyControversyPage', 'VideoPage']
diff --git a/tools/boilerplate_data/base_test.py b/tools/boilerplate_data/base_test.py
index ed8c17359d761be153f35f23dd539bf94ec82de5..e6a950035385aa1e9e3417e0323f4c66c6ad016f 100644
--- a/tools/boilerplate_data/base_test.py
+++ b/tools/boilerplate_data/base_test.py
@@ -1,6 +1,7 @@
<%inherit file="layout.py"/>
from weboob.tools.test import BackendTest
+
class ${r.classname}Test(BackendTest):
BACKEND = '${r.name}'
diff --git a/weboob/applications/boobathon/boobathon.py b/weboob/applications/boobathon/boobathon.py
index adb8db63301e3559bae261b0c4c002adfe5258af..8be18c22d34fc44dbb41dcf177e0387bb08f1c33 100644
--- a/weboob/applications/boobathon/boobathon.py
+++ b/weboob/applications/boobathon/boobathon.py
@@ -47,6 +47,7 @@ def __init__(self, backend, capability):
def __repr__(self):
return '' % (self.backend, self.capability)
+
class Member(object):
def __init__(self, id, name):
self.name = name
@@ -63,6 +64,7 @@ def shortname(self):
name = '%s..' % name[:18]
return name
+
class Event(object):
def __init__(self, name, backend):
self.my_id = backend.browser.get_userid()
@@ -272,6 +274,7 @@ def save(self, message):
self.content.content = s
self.backend.push_content(self.content, message)
+
class Boobathon(ReplApplication):
APPNAME = 'boobathon'
VERSION = '0.f'
diff --git a/weboob/applications/boobill/boobill.py b/weboob/applications/boobill/boobill.py
index b40d6d5bbdfa313f00c9945dfd4bb9aded3130d1..f94ee27e41edcd036c1adbcc325e1d8494810c4c 100644
--- a/weboob/applications/boobill/boobill.py
+++ b/weboob/applications/boobill/boobill.py
@@ -145,7 +145,7 @@ def do_bills(self, id):
Get the list of bills documents for subscriptions.
If no ID given, display bills of all backends
"""
- self.exec_method(id, 'iter_bills')
+ self.exec_method(id, 'iter_bills')
def do_download(self, line):
"""
diff --git a/weboob/applications/cineoob/cineoob.py b/weboob/applications/cineoob/cineoob.py
index 93f1a731ca53c019f683ebe0790231e681961004..a30077408cb270f46af4526432817a7092b0d210 100644
--- a/weboob/applications/cineoob/cineoob.py
+++ b/weboob/applications/cineoob/cineoob.py
@@ -38,6 +38,7 @@
ROLE_LIST = ['actor','director','writer','composer','producer']
COUNTRY_LIST = ['us','fr','de','jp']
+
class MovieInfoFormatter(IFormatter):
MANDATORY_FIELDS = ('id', 'original_title', 'release_date', 'other_titles', 'duration', 'pitch', 'note', 'roles', 'country')
@@ -100,6 +101,7 @@ def yearsago(years, from_date=None):
return from_date.replace(month=2, day=28,
year=from_date.year-years)
+
def num_years(begin, end=None):
if end is None:
end = datetime.now()
@@ -109,6 +111,7 @@ def num_years(begin, end=None):
else:
return num_years
+
class PersonInfoFormatter(IFormatter):
MANDATORY_FIELDS = ('id', 'name', 'birth_date', 'birth_place', 'short_biography')
diff --git a/weboob/applications/masstransit/masstransit.py b/weboob/applications/masstransit/masstransit.py
index f00fbfd61f4411a0da0551caf068425b711c8de4..5f75687a025929658f404474417ef51d20223e3b 100644
--- a/weboob/applications/masstransit/masstransit.py
+++ b/weboob/applications/masstransit/masstransit.py
@@ -29,6 +29,7 @@ class FakeConic(object):
STATUS_CONNECTED = None
STATUS_DISCONNECTED = None
CONNECT_FLAG_NONE = None
+
def Connection(self):
raise NotImplementedError()
try:
@@ -50,6 +51,7 @@ def Connection(self):
__all__ = ['Masstransit']
+
class MasstransitHildon():
"hildon interface"
diff --git a/weboob/applications/qboobmsg/main_window.py b/weboob/applications/qboobmsg/main_window.py
index f5b76d49cb979ad6a27fa12986eda4e8a8badd48..6cd5ddc40d992772b327a6f09a533aed0b088997 100644
--- a/weboob/applications/qboobmsg/main_window.py
+++ b/weboob/applications/qboobmsg/main_window.py
@@ -26,6 +26,7 @@
from .ui.main_window_ui import Ui_MainWindow
from .messages_manager import MessagesManager
+
class MainWindow(QtMainWindow):
def __init__(self, config, weboob, parent=None):
QtMainWindow.__init__(self, parent)
diff --git a/weboob/applications/qboobmsg/messages_manager.py b/weboob/applications/qboobmsg/messages_manager.py
index dc73098f6a72cbfff5c58389ecc17b7c80829694..3aa4d8ae1b4410279cc4af1ca070e4c08b99f9b2 100644
--- a/weboob/applications/qboobmsg/messages_manager.py
+++ b/weboob/applications/qboobmsg/messages_manager.py
@@ -29,6 +29,7 @@
from .ui.messages_manager_ui import Ui_MessagesManager
+
class MessagesManager(QWidget):
def __init__(self, weboob, parent=None):
QWidget.__init__(self, parent)
diff --git a/weboob/applications/qcineoob/main_window.py b/weboob/applications/qcineoob/main_window.py
index 2e1a1f0762ecdcb3b413d0dd4f8b30549e13f40e..44095f5612540324f8640ea7fba51acefa3f191a 100644
--- a/weboob/applications/qcineoob/main_window.py
+++ b/weboob/applications/qcineoob/main_window.py
@@ -40,6 +40,7 @@
from .torrent import Torrent
from .subtitle import Subtitle
+
class MainWindow(QtMainWindow):
def __init__(self, config, weboob, parent=None):
QtMainWindow.__init__(self, parent)
diff --git a/weboob/applications/qcineoob/minimovie.py b/weboob/applications/qcineoob/minimovie.py
index d4ec0d7ab99d86f3d888f193e81ba2092e3e4d5f..49836570176708ca424461e12aeabc3ae179aa3c 100644
--- a/weboob/applications/qcineoob/minimovie.py
+++ b/weboob/applications/qcineoob/minimovie.py
@@ -25,6 +25,7 @@
from weboob.applications.qcineoob.ui.minimovie_ui import Ui_MiniMovie
from weboob.capabilities.base import empty
+
class MiniMovie(QFrame):
def __init__(self, weboob, backend, movie, parent=None):
QFrame.__init__(self, parent)
diff --git a/weboob/applications/qcineoob/miniperson.py b/weboob/applications/qcineoob/miniperson.py
index 828357c74da38d7153214326626a8a5f36ea5eea..e2af29ac08bad3794deb234c9be5379d6d810eb3 100644
--- a/weboob/applications/qcineoob/miniperson.py
+++ b/weboob/applications/qcineoob/miniperson.py
@@ -25,6 +25,7 @@
from weboob.applications.qcineoob.ui.miniperson_ui import Ui_MiniPerson
from weboob.capabilities.base import empty
+
class MiniPerson(QFrame):
def __init__(self, weboob, backend, person, parent=None):
QFrame.__init__(self, parent)
diff --git a/weboob/applications/qcineoob/minisubtitle.py b/weboob/applications/qcineoob/minisubtitle.py
index 4f3f5fc9c5ee0a77a9f8c27a257bee875039befa..95313a16f0cefc60a21c73bf66f43c1974eca193 100644
--- a/weboob/applications/qcineoob/minisubtitle.py
+++ b/weboob/applications/qcineoob/minisubtitle.py
@@ -22,6 +22,7 @@
from weboob.applications.qcineoob.ui.minisubtitle_ui import Ui_MiniSubtitle
from weboob.capabilities.base import empty
+
class MiniSubtitle(QFrame):
def __init__(self, weboob, backend, subtitle, parent=None):
QFrame.__init__(self, parent)
diff --git a/weboob/applications/qcineoob/minitorrent.py b/weboob/applications/qcineoob/minitorrent.py
index 32d0fdc79328b485750eddc669a17975fb81096e..8eb906385d1c261679bd7e34c50bf225fd6624ac 100644
--- a/weboob/applications/qcineoob/minitorrent.py
+++ b/weboob/applications/qcineoob/minitorrent.py
@@ -23,6 +23,7 @@
from weboob.applications.weboorrents.weboorrents import sizeof_fmt
from weboob.capabilities.base import empty
+
class MiniTorrent(QFrame):
def __init__(self, weboob, backend, torrent, parent=None):
QFrame.__init__(self, parent)
diff --git a/weboob/applications/qcineoob/movie.py b/weboob/applications/qcineoob/movie.py
index f895cbcbcc7cf80502e4ded8ddff9988f6d40932..f1889c6c529823216a71f3929cb428fbda9da49f 100644
--- a/weboob/applications/qcineoob/movie.py
+++ b/weboob/applications/qcineoob/movie.py
@@ -27,6 +27,7 @@
from weboob.applications.suboob.suboob import LANGUAGE_CONV
from weboob.applications.cineoob.cineoob import ROLE_LIST
+
class Movie(QFrame):
def __init__(self, movie, backend, parent=None):
QFrame.__init__(self, parent)
diff --git a/weboob/applications/qcineoob/person.py b/weboob/applications/qcineoob/person.py
index 6c5f01ea374d09f209ab0994ab9d4c90193fa3dd..7836e5462a5d13363eb49e32cf95d04b2600e145 100644
--- a/weboob/applications/qcineoob/person.py
+++ b/weboob/applications/qcineoob/person.py
@@ -26,6 +26,7 @@
from weboob.capabilities.base import empty
from weboob.applications.cineoob.cineoob import ROLE_LIST
+
class Person(QFrame):
def __init__(self, person, backend, parent=None):
QFrame.__init__(self, parent)
diff --git a/weboob/applications/qcineoob/qcineoob.py b/weboob/applications/qcineoob/qcineoob.py
index b072413e4892cb352c17c112e6899a365a97587e..1a546674620cb24cfc7cd1b485830ed52ddc7e32 100644
--- a/weboob/applications/qcineoob/qcineoob.py
+++ b/weboob/applications/qcineoob/qcineoob.py
@@ -36,6 +36,7 @@ class QCineoob(QtApplication):
CONFIG = {'settings': {'backend': '',
}
}
+
def main(self, argv):
self.load_backends([ICapCinema,ICapTorrent,ICapSubtitle])
self.load_config()
diff --git a/weboob/applications/qcineoob/subtitle.py b/weboob/applications/qcineoob/subtitle.py
index b25cf4d7afc424e7e44bd50eef0e089ba1305581..fdf1cb2a9aa6e05b844c03ee80d8962765b2af13 100644
--- a/weboob/applications/qcineoob/subtitle.py
+++ b/weboob/applications/qcineoob/subtitle.py
@@ -25,6 +25,7 @@
from weboob.applications.qcineoob.ui.subtitle_ui import Ui_Subtitle
from weboob.capabilities.base import empty
+
class Subtitle(QFrame):
def __init__(self, subtitle, backend, parent=None):
QFrame.__init__(self, parent)
@@ -77,4 +78,3 @@ def download(self):
print >>sys.stderr, 'Unable to write subtitle file in "%s": %s' % (dest, e)
return 1
return
-
diff --git a/weboob/applications/qcineoob/torrent.py b/weboob/applications/qcineoob/torrent.py
index cfbbfdb2693b8ab6409e6ce62fd7e0476eac4343..2b26c661905014d7fd589d7b9df1a04a178a1cec 100644
--- a/weboob/applications/qcineoob/torrent.py
+++ b/weboob/applications/qcineoob/torrent.py
@@ -26,6 +26,7 @@
from weboob.applications.weboorrents.weboorrents import sizeof_fmt
from weboob.capabilities.base import empty
+
class Torrent(QFrame):
def __init__(self, torrent, backend, parent=None):
QFrame.__init__(self, parent)
@@ -77,4 +78,3 @@ def download(self):
print >>sys.stderr, 'Unable to write .torrent in "%s": %s' % (dest, e)
return 1
return
-
diff --git a/weboob/applications/qflatboob/main_window.py b/weboob/applications/qflatboob/main_window.py
index 8f17165a80d9fa10e08841e7c4925613fba71d25..5f1ca454773181cace4ca489a83f144dd2909d9c 100644
--- a/weboob/applications/qflatboob/main_window.py
+++ b/weboob/applications/qflatboob/main_window.py
@@ -30,6 +30,7 @@
from .ui.main_window_ui import Ui_MainWindow
from .query import QueryDialog
+
class HousingListWidgetItem(QListWidgetItem):
def __init__(self, housing, *args, **kwargs):
QListWidgetItem.__init__(self, *args, **kwargs)
@@ -56,6 +57,7 @@ def setAttrs(self, storage):
elif self.background().color() != QColor(0,0,0):
self.setBackground(QBrush())
+
class MainWindow(QtMainWindow):
def __init__(self, config, storage, weboob, parent=None):
QtMainWindow.__init__(self, parent)
diff --git a/weboob/applications/qflatboob/query.py b/weboob/applications/qflatboob/query.py
index 6b06c6ec4aee85d8c31a33581ad32866aaf80b00..b91004889bca4c852a4a1d88c80fb9b548cd6243 100644
--- a/weboob/applications/qflatboob/query.py
+++ b/weboob/applications/qflatboob/query.py
@@ -24,6 +24,7 @@
from .ui.query_ui import Ui_QueryDialog
+
class QueryDialog(QDialog):
def __init__(self, weboob, parent=None):
QDialog.__init__(self, parent)
@@ -43,7 +44,7 @@ def __init__(self, weboob, parent=None):
if hasattr(self.ui.cityEdit, "setPlaceholderText"):
self.ui.cityEdit.setPlaceholderText("Press enter to search city")
-
+
def keyPressEvent(self, event):
"""
Disable handler and to prevent closing the window.
diff --git a/weboob/applications/qhavedate/contacts.py b/weboob/applications/qhavedate/contacts.py
index 377eef7b103b71f1021bc6fe42afea517e93f58d..364311915672c751896aa4f8983fa477ec233f37 100644
--- a/weboob/applications/qhavedate/contacts.py
+++ b/weboob/applications/qhavedate/contacts.py
@@ -37,6 +37,7 @@
from .ui.profile_ui import Ui_Profile
from .ui.notes_ui import Ui_Notes
+
class ThreadMessage(QFrame):
"""
This class represents a message in the thread tab.
@@ -70,6 +71,7 @@ def __eq__(self, m):
return False
return self.message == m.message
+
class ContactThread(QWidget):
"""
The thread of the selected contact.
@@ -341,6 +343,7 @@ def display_photo(self):
text += '
(Hidden photo)'
self.ui.photoUrlLabel.setText(text)
+
class ContactNotes(QWidget):
""" Widget for storing notes about a contact """
@@ -399,6 +402,7 @@ def _saveNotes_eb(self, backend, error, backtrace):
QMessageBox.critical(self, self.tr('Error while saving notes'),
content, QMessageBox.Ok)
+
class IGroup(object):
def __init__(self, weboob, id, name):
self.id = id
@@ -408,6 +412,7 @@ def __init__(self, weboob, id, name):
def iter_contacts(self, cb):
raise NotImplementedError()
+
class MetaGroup(IGroup):
def iter_contacts(self, cb):
if self.id == 'online':
@@ -427,6 +432,7 @@ def cb(self, cb, backend, contact):
self.process = None
cb(None)
+
class ContactsWidget(QWidget):
def __init__(self, weboob, parent=None):
QWidget.__init__(self, parent)
@@ -587,5 +593,3 @@ def retrieveContact_eb(self, backend, error, backtrace):
content += u'\n%s\n' % to_unicode(backtrace)
QMessageBox.critical(self, self.tr('Error while getting contact'),
content, QMessageBox.Ok)
-
-
diff --git a/weboob/applications/qhavedate/events.py b/weboob/applications/qhavedate/events.py
index 7260d9f797c83ccd7bbad2513d2dd56a48ee7e38..d67743c35552a7321363ad5323c4a9293b7201a1 100644
--- a/weboob/applications/qhavedate/events.py
+++ b/weboob/applications/qhavedate/events.py
@@ -25,6 +25,7 @@
from .ui.events_ui import Ui_Events
+
class EventsWidget(QWidget):
def __init__(self, weboob, parent=None):
QWidget.__init__(self, parent)
diff --git a/weboob/applications/qhavedate/main_window.py b/weboob/applications/qhavedate/main_window.py
index 4bfec3ffaac94c92f72436f82c6923889ad07afd..378ab75ab4f7f2d2eb65a0415fbee48108e4ff95 100644
--- a/weboob/applications/qhavedate/main_window.py
+++ b/weboob/applications/qhavedate/main_window.py
@@ -35,6 +35,7 @@
from .contacts import ContactsWidget
from .events import EventsWidget
+
class MainWindow(QtMainWindow):
def __init__(self, config, weboob, parent=None):
QtMainWindow.__init__(self, parent)
diff --git a/weboob/applications/qhavedate/qhavedate.py b/weboob/applications/qhavedate/qhavedate.py
index 231cf19c8a48abd919da049a75f33a0c83d03c90..c025e706f528060b0c9986f265c7dff3ef0b0fa7 100644
--- a/weboob/applications/qhavedate/qhavedate.py
+++ b/weboob/applications/qhavedate/qhavedate.py
@@ -23,6 +23,7 @@
from .main_window import MainWindow
+
class QHaveDate(QtApplication):
APPNAME = 'qhavedate'
VERSION = '0.f'
diff --git a/weboob/applications/qhavedate/status.py b/weboob/applications/qhavedate/status.py
index ae7591cb58a16560f280d024a967ff331ca4c5b2..dbef05e415d7ca8b5a8a2a0cea03a8bd32cece89 100644
--- a/weboob/applications/qhavedate/status.py
+++ b/weboob/applications/qhavedate/status.py
@@ -24,6 +24,7 @@
from weboob.tools.application.qt import QtDo
from weboob.tools.misc import to_unicode
+
class Account(QFrame):
def __init__(self, weboob, backend, parent=None):
QFrame.__init__(self, parent)
@@ -103,6 +104,7 @@ def updateStats_eb(self, backend, err, backtrace):
self.body.setText(u'Unable to connect: %s' % to_unicode(err))
self.title.setText(u'%s' % unicode(self.title.text()))
+
class AccountsStatus(QScrollArea):
def __init__(self, weboob, parent=None):
QScrollArea.__init__(self, parent)
diff --git a/weboob/applications/qvideoob/main_window.py b/weboob/applications/qvideoob/main_window.py
index def9ded93d97a957dcb38581999b88f9cbacb9ab..704df56863cc0e03e80b1d3918e031a329b2a3d1 100644
--- a/weboob/applications/qvideoob/main_window.py
+++ b/weboob/applications/qvideoob/main_window.py
@@ -29,6 +29,7 @@
from .video import Video
from .minivideo import MiniVideo
+
class MainWindow(QtMainWindow):
def __init__(self, config, weboob, parent=None):
QtMainWindow.__init__(self, parent)
diff --git a/weboob/applications/qvideoob/minivideo.py b/weboob/applications/qvideoob/minivideo.py
index 1aa7171fbcf7c7152d3819d2a2b78af693e44748..066581a9d321fdb8c5d7ab7a7e90aec3cce3c638 100644
--- a/weboob/applications/qvideoob/minivideo.py
+++ b/weboob/applications/qvideoob/minivideo.py
@@ -24,6 +24,7 @@
from weboob.applications.qvideoob.ui.minivideo_ui import Ui_MiniVideo
from .video import Video
+
class MiniVideo(QFrame):
def __init__(self, weboob, backend, video, parent=None):
QFrame.__init__(self, parent)
diff --git a/weboob/applications/qvideoob/qvideoob.py b/weboob/applications/qvideoob/qvideoob.py
index 6001a9792feb0a58804f43c3ecba0c9c2277ecc7..e92a6640c8f9ef1e7a65c9786c16e351500b1347 100644
--- a/weboob/applications/qvideoob/qvideoob.py
+++ b/weboob/applications/qvideoob/qvideoob.py
@@ -37,6 +37,7 @@ class QVideoob(QtApplication):
'backend': ''
}
}
+
def main(self, argv):
self.load_backends(ICapVideo)
self.load_config()
diff --git a/weboob/applications/qvideoob/video.py b/weboob/applications/qvideoob/video.py
index 337b5120551924ce0c45be3f283a80872172b951..4e5d03979eecfd49d5520dd0d67715da3f09a697 100644
--- a/weboob/applications/qvideoob/video.py
+++ b/weboob/applications/qvideoob/video.py
@@ -24,6 +24,7 @@
from weboob.applications.qvideoob.ui.video_ui import Ui_Video
+
class Video(QDialog):
def __init__(self, video, parent=None):
QDialog.__init__(self, parent)
diff --git a/weboob/applications/qwebcontentedit/main_window.py b/weboob/applications/qwebcontentedit/main_window.py
index 907c8ee16b744a232a2fe9cace74b2af19ee8bf5..637b3f89597df241f647711f9cff70f4ddd7bbdc 100644
--- a/weboob/applications/qwebcontentedit/main_window.py
+++ b/weboob/applications/qwebcontentedit/main_window.py
@@ -30,6 +30,7 @@
from .ui.main_window_ui import Ui_MainWindow
+
class MainWindow(QtMainWindow):
def __init__(self, config, weboob, parent=None):
QtMainWindow.__init__(self, parent)
@@ -102,11 +103,11 @@ def loadPage(self):
_id = unicode(self.ui.idEdit.text())
if not _id:
return
-
+
self.ui.loadButton.setEnabled(False)
self.ui.loadButton.setText('Loading...')
self.ui.contentEdit.setReadOnly(True)
-
+
backend = str(self.ui.backendBox.currentText())
self.process = QtDo(self.weboob,
self._loadedPage,
@@ -137,7 +138,7 @@ def _loadedPage(self, backend, data):
self.ui.contentEdit.setPlainText(self.content.content)
self.setWindowTitle("QWebcontentedit - %s@%s" %(self.content.id,
backend.name))
- self.backend = backend
+ self.backend = backend
def _errorLoadPage(self, backend, error, backtrace):
""" Error callback for loadPage """
@@ -203,7 +204,7 @@ def loadHistory(self):
self.ui.loadHistoryButton.setEnabled(False)
self.ui.loadHistoryButton.setText("Loading...")
-
+
self.ui.historyTable.clear()
self.ui.historyTable.setRowCount(0)
@@ -212,7 +213,7 @@ def loadHistory(self):
"Author",
"Summary"])
self.ui.historyTable.setColumnWidth(3, 1000)
-
+
self.process = QtDo(self.weboob,
self._gotRevision,
self._errorHistory)
@@ -234,13 +235,13 @@ def _gotRevision(self, backend, revision):
# are not modifiable (they are modifiable by default)
item_revision = QTableWidgetItem(revision.id)
item_revision.setFlags(Qt.ItemIsEnabled)
-
+
item_time = QTableWidgetItem(revision.timestamp.strftime('%Y-%m-%d %H:%M:%S'))
item_time.setFlags(Qt.ItemIsEnabled)
-
+
item_author = QTableWidgetItem(revision.author)
item_author.setFlags(Qt.ItemIsEnabled)
-
+
item_summary = QTableWidgetItem(revision.comment)
item_summary.setFlags(Qt.ItemIsEnabled)
@@ -260,6 +261,6 @@ def _errorHistory(self, backend, error, backtrace):
content += '\n%s\n' % to_unicode(backtrace)
QMessageBox.critical(self, self.tr('Error while loading history'),
content, QMessageBox.Ok)
-
+
self.ui.loadHistoryButton.setEnabled(True)
self.ui.loadHistoryButton.setText("Reload")
diff --git a/weboob/applications/videoob/videoob.py b/weboob/applications/videoob/videoob.py
index 353b22223cfd0e87ee617858d3b4d15fe4f518cc..ae6460a0f5a53b7a6a1d359cec251aadb6537975 100644
--- a/weboob/applications/videoob/videoob.py
+++ b/weboob/applications/videoob/videoob.py
@@ -49,6 +49,7 @@ def get_description(self, obj):
result += u' (%s/%s)' % (obj.rating, obj.rating_max)
return result
+
class Videoob(ReplApplication):
APPNAME = 'videoob'
VERSION = '0.f'
diff --git a/weboob/capabilities/account.py b/weboob/capabilities/account.py
index 0c492d80de9093ca016c56d1b8392c969c7df21a..abd0600b10619eb2fa39a48b7ef7755166ab114d 100644
--- a/weboob/capabilities/account.py
+++ b/weboob/capabilities/account.py
@@ -29,6 +29,7 @@ class AccountRegisterError(UserError):
Raised when there is an error during registration.
"""
+
class Account(CapBaseObject):
"""
Describe an account and its properties.
@@ -40,6 +41,7 @@ class Account(CapBaseObject):
def __init__(self, id=None):
CapBaseObject.__init__(self, id)
+
class StatusField(object):
"""
Field of an account status.
diff --git a/weboob/capabilities/bank.py b/weboob/capabilities/bank.py
index 1dce091becd00592681f4c2570a3d4f0fc32d601..d9cc3772477dcdfd654487d1d446c41040d97345 100644
--- a/weboob/capabilities/bank.py
+++ b/weboob/capabilities/bank.py
@@ -36,11 +36,13 @@ class AccountNotFound(UserError):
def __init__(self, msg='Account not found'):
UserError.__init__(self, msg)
+
class TransferError(UserError):
"""
A transfer has failed.
"""
+
class Currency(object):
CUR_UNKNOWN = 0
CUR_EUR = 1
@@ -92,6 +94,7 @@ class Recipient(CapBaseObject):
def __init__(self):
CapBaseObject.__init__(self, 0)
+
class Account(Recipient, Currency):
"""
Bank account.
@@ -144,6 +147,7 @@ def __repr__(self):
return "" % (self.date,
label, self.amount)
+
class Transfer(CapBaseObject):
"""
Transfer from an account to a recipient.
@@ -155,6 +159,7 @@ class Transfer(CapBaseObject):
recipient = Field('Recipient', int, long, basestring)
reason = StringField('Reason')
+
class ICapBank(ICapCollection):
"""
Capability of bank websites to see accounts and transactions.
diff --git a/weboob/capabilities/bill.py b/weboob/capabilities/bill.py
index f1f21c36761cd3251f4bc87d76c77d468ac8120d..25018a889f96d59175418cd4d81d23c2e7eb1fbb 100644
--- a/weboob/capabilities/bill.py
+++ b/weboob/capabilities/bill.py
@@ -53,6 +53,7 @@ class Detail(CapBaseObject):
def __init__(self):
CapBaseObject.__init__(self, 0)
+
class Bill(CapBaseObject):
"""
Bill.
@@ -65,6 +66,7 @@ class Bill(CapBaseObject):
def __init__(self):
CapBaseObject.__init__(self, 0)
+
class Subscription(CapBaseObject):
"""
Subscription to a service.
@@ -74,6 +76,7 @@ class Subscription(CapBaseObject):
validity = DateField('End validity date of the subscription')
renewdate = DateField('Reset date of consumption')
+
class ICapBill(ICapCollection):
def iter_resources(self, objs, split_path):
"""
diff --git a/weboob/capabilities/bugtracker.py b/weboob/capabilities/bugtracker.py
index 71a44e1d3d6aae6c164dffd4f39673aa2a113456..f93468f2de16d4f0a5a0e7cdf2baf5ab8ff811b7 100644
--- a/weboob/capabilities/bugtracker.py
+++ b/weboob/capabilities/bugtracker.py
@@ -31,6 +31,7 @@ class IssueError(UserError):
Raised when there is an error with an issue.
"""
+
class Project(CapBaseObject):
"""
Represents a project.
@@ -101,6 +102,7 @@ def find_status(self, name):
return None
return None
+
class User(CapBaseObject):
"""
User.
@@ -114,6 +116,7 @@ def __init__(self, id, name):
def __repr__(self):
return '' % self.name
+
class Version(CapBaseObject):
"""
Version of a project.
@@ -127,6 +130,7 @@ def __init__(self, id, name):
def __repr__(self):
return '' % self.name
+
class Status(CapBaseObject):
"""
Status of an issue.
@@ -150,6 +154,7 @@ def __init__(self, id, name, value):
def __repr__(self):
return '' % self.name
+
class Attachment(CapBaseObject):
"""
Attachment of an issue.
@@ -160,6 +165,7 @@ class Attachment(CapBaseObject):
def __repr__(self):
return '' % self.filename
+
class Change(CapBaseObject):
"""
A change of an update.
@@ -168,6 +174,7 @@ class Change(CapBaseObject):
last = StringField('Last value of field')
new = StringField('New value of field')
+
class Update(CapBaseObject):
"""
Represents an update of an issue.
@@ -182,6 +189,7 @@ class Update(CapBaseObject):
def __repr__(self):
return '' % self.id
+
class Issue(CapBaseObject):
"""
Represents an issue.
@@ -199,6 +207,7 @@ class Issue(CapBaseObject):
version = Field('Target version of this issue', Version)
status = Field('Status of this issue', Status)
+
class Query(CapBaseObject):
"""
Query to find an issue.
@@ -214,6 +223,7 @@ class Query(CapBaseObject):
def __init__(self):
CapBaseObject.__init__(self, '')
+
class ICapBugTracker(IBaseCap):
"""
Bug trackers websites.
diff --git a/weboob/capabilities/chat.py b/weboob/capabilities/chat.py
index dd585be4f38e2362db488ce7faf967433a1fa9bf..aacae24f98bac24d4e5d9fe42a1f586a7293ce81 100644
--- a/weboob/capabilities/chat.py
+++ b/weboob/capabilities/chat.py
@@ -51,6 +51,7 @@ def __init__(self, id_from, id_to, message, date=None):
if self.date is None:
self.date = datetime.datetime.utcnow()
+
class ICapChat(IBaseCap):
"""
Websites with a chat system.
diff --git a/weboob/capabilities/content.py b/weboob/capabilities/content.py
index 8d528e0f74cb28a1bc88f8ba8c076b774415e543..06a315b34c9faf956e5dd6718bde7c9a513238a0 100644
--- a/weboob/capabilities/content.py
+++ b/weboob/capabilities/content.py
@@ -33,6 +33,7 @@ class Content(CapBaseObject):
content = StringField('Body')
revision = StringField('ID of revision')
+
class Revision(CapBaseObject):
"""
Revision of a change on a content.
@@ -42,6 +43,7 @@ class Revision(CapBaseObject):
timestamp = DateField('Date of revision')
minor = Field('Is this change minor?', bool)
+
class ICapContent(IBaseCap):
def get_content(self, id, revision=None):
"""
diff --git a/weboob/capabilities/dating.py b/weboob/capabilities/dating.py
index ff934cac5c8f44e18f75cb934e3647659588dd6b..eaa012878ccb8e8bdfcd29977db375463f9239b6 100644
--- a/weboob/capabilities/dating.py
+++ b/weboob/capabilities/dating.py
@@ -88,6 +88,7 @@ class Event(CapBaseObject):
type = StringField('Type of event')
message = StringField('Message of the event')
+
class ICapDating(IBaseCap):
"""
Capability for dating websites.
diff --git a/weboob/capabilities/geolocip.py b/weboob/capabilities/geolocip.py
index 6a071a9c01840750df6c4e8f0dc71edede21ff5b..a7a384b230aab5208323cf6b095b835d3725cb1f 100644
--- a/weboob/capabilities/geolocip.py
+++ b/weboob/capabilities/geolocip.py
@@ -42,6 +42,7 @@ def __init__(self, ipaddr):
CapBaseObject.__init__(self, ipaddr)
self.ipaddr = ipaddr
+
class ICapGeolocIp(IBaseCap):
"""
Access information about IP addresses database.
diff --git a/weboob/capabilities/housing.py b/weboob/capabilities/housing.py
index 11c1fd11799b09daa513078077d038225b61d604..7d8b2d5363fe20110bdae1ec88bf94e5f2bf988d 100644
--- a/weboob/capabilities/housing.py
+++ b/weboob/capabilities/housing.py
@@ -45,6 +45,7 @@ def __str__(self):
def __repr__(self):
return u'' % (self.id, len(self.data) if self.data else 0)
+
class Housing(CapBaseObject):
"""
Content of a housing.
@@ -61,6 +62,7 @@ class Housing(CapBaseObject):
photos = Field('List of photos', list)
details = Field('Key/values of details', dict)
+
class Query(CapBaseObject):
"""
Query to find housings.
@@ -79,12 +81,14 @@ class Query(CapBaseObject):
def __init__(self):
CapBaseObject.__init__(self, '')
+
class City(CapBaseObject):
"""
City.
"""
name = StringField('Name of city')
+
class ICapHousing(IBaseCap):
"""
Capability of websites to search housings.
diff --git a/weboob/capabilities/library.py b/weboob/capabilities/library.py
index ebe0169f564925812ef0e07ad21a51ffa793bc10..68caff7dc9091c69236ee1ae879c22b61e73dce8 100644
--- a/weboob/capabilities/library.py
+++ b/weboob/capabilities/library.py
@@ -34,12 +34,14 @@ class Book(CapBaseObject):
date = DateField('The due date')
late = Field('Are you late?', bool)
+
class Renew(CapBaseObject):
"""
A renew message.
"""
message = StringField('Message')
+
class ICapBook(ICapCollection):
"""
Library websites.
diff --git a/weboob/capabilities/messages.py b/weboob/capabilities/messages.py
index 711875dfa67b9a92b22fe8d01ebc6fa9ee2f008e..ada4f95f6ecbdf9ff82aa47897d8d134e036346c 100644
--- a/weboob/capabilities/messages.py
+++ b/weboob/capabilities/messages.py
@@ -34,10 +34,12 @@ class _Message(CapBaseObject):
""" Base message. """
pass
+
class _Thread(CapBaseObject):
""" Base Thread. """
pass
+
class Message(_Message):
"""
Represents a message read or to send.
@@ -131,6 +133,7 @@ def __repr__(self):
return '' % (
self.full_id, self.title, self.date, self.sender)
+
class Thread(_Thread):
"""
Thread containing messages.
@@ -199,11 +202,13 @@ def set_message_read(self, message):
"""
raise NotImplementedError()
+
class CantSendMessage(UserError):
"""
Raised when a message can't be send.
"""
+
class ICapMessagesPost(IBaseCap):
"""
This capability allow user to send a message.
diff --git a/weboob/capabilities/paste.py b/weboob/capabilities/paste.py
index f8b9ef6ddfcbcb44f185ddad9f641fb3683149b6..ce9833dfc5a54decf89793ba50bcbdc1cc1a33c7 100644
--- a/weboob/capabilities/paste.py
+++ b/weboob/capabilities/paste.py
@@ -29,6 +29,7 @@ class PasteNotFound(UserError):
Raised when a paste is not found.
"""
+
class BasePaste(CapBaseObject):
"""
Represents a pasted text.
diff --git a/weboob/capabilities/pricecomparison.py b/weboob/capabilities/pricecomparison.py
index aa1625a94a70da9ee7b7c41662c12263f021f4d2..a6ae0f2d84a34f4e3569c208091615f2f7c2c69b 100644
--- a/weboob/capabilities/pricecomparison.py
+++ b/weboob/capabilities/pricecomparison.py
@@ -31,6 +31,7 @@ class Product(CapBaseObject):
"""
name = StringField('Name of product')
+
class Shop(CapBaseObject):
"""
A shop where the price is.
@@ -39,6 +40,7 @@ class Shop(CapBaseObject):
location = StringField('Location of the shop')
info = StringField('Information about the shop')
+
class Price(CapBaseObject):
"""
Price.
@@ -50,6 +52,7 @@ class Price(CapBaseObject):
shop = Field('Shop information', Shop)
product = Field('Product', Product)
+
class ICapPriceComparison(IBaseCap):
"""
Capability for price comparison websites.
diff --git a/weboob/capabilities/radio.py b/weboob/capabilities/radio.py
index daaa41fc89e939ca2887e44799c37047f9c0867a..67be4f4ff6ac5156170e58a3207251fe6ccb9d34 100644
--- a/weboob/capabilities/radio.py
+++ b/weboob/capabilities/radio.py
@@ -41,6 +41,7 @@ def __unicode__(self):
else:
return self.title
+
class Stream(CapBaseObject):
"""
Stream of a radio.
@@ -54,6 +55,7 @@ def __unicode__(self):
def __repr__(self):
return self.__unicode__()
+
class Radio(CapBaseObject):
"""
Radio object.
@@ -63,6 +65,7 @@ class Radio(CapBaseObject):
current = Field('Current emission', Emission)
streams = Field('List of streams', list)
+
class ICapRadio(IBaseCap):
"""
Capability of radio websites.
diff --git a/weboob/capabilities/travel.py b/weboob/capabilities/travel.py
index 73fde9c12661e91caabb58e0bfacd4891f752d19..8f8cd75604ae83680084b056947420f79038effa 100644
--- a/weboob/capabilities/travel.py
+++ b/weboob/capabilities/travel.py
@@ -40,6 +40,7 @@ def __init__(self, id, name):
def __repr__(self):
return "" % (self.id, self.name)
+
class Departure(CapBaseObject):
"""
Describes a departure.
@@ -62,6 +63,7 @@ def __repr__(self):
return u"" % (
self.id, self.type, self.time.strftime('%H:%M'), self.departure_station, self.arrival_station)
+
class RoadStep(CapBaseObject):
"""
A step on a roadmap.
@@ -73,11 +75,13 @@ class RoadStep(CapBaseObject):
arrival = StringField('Arrival station')
duration = DeltaField('Duration of this step')
+
class RoadmapError(UserError):
"""
Raised when the roadmap is unable to be calculated.
"""
+
class RoadmapFilters(CapBaseObject):
"""
Filters to get a roadmap.
@@ -88,6 +92,7 @@ class RoadmapFilters(CapBaseObject):
def __init__(self):
CapBaseObject.__init__(self, '')
+
class ICapTravel(IBaseCap):
"""
Travel websites.
diff --git a/weboob/capabilities/weather.py b/weboob/capabilities/weather.py
index 074df49ab33556ea1d98e6c5fc2efd82d5da4ee7..1252705b20b38b8fd4ff438089a941cf8df9cf8c 100644
--- a/weboob/capabilities/weather.py
+++ b/weboob/capabilities/weather.py
@@ -71,6 +71,7 @@ def __init__(self, date, low, high, text, unit):
self.high = Temperature(high, unit)
self.text = text
+
class Current(CapBaseObject):
"""
Current weather.
@@ -85,6 +86,7 @@ def __init__(self, date, temp, text, unit):
self.text = text
self.temp = Temperature(temp, unit)
+
class City(CapBaseObject):
"""
City where to find weather.
@@ -95,11 +97,13 @@ def __init__(self, id, name):
CapBaseObject.__init__(self, id)
self.name = name
+
class CityNotFound(UserError):
"""
Raised when a city is not found.
"""
+
class ICapWeather(IBaseCap):
"""
Capability for weather websites.
diff --git a/weboob/core/bcall.py b/weboob/core/bcall.py
index 7a20ad9dabf0e4bc436928e31a0da87ae1d0a6de..1a0492d6f2832482b459982db9b87f01045ee358 100644
--- a/weboob/core/bcall.py
+++ b/weboob/core/bcall.py
@@ -43,13 +43,16 @@ def __init__(self, errors):
def __iter__(self):
return self.errors.__iter__()
+
class IResultsCondition(object):
def is_valid(self, obj):
raise NotImplementedError()
+
class ResultsConditionError(Exception):
pass
+
class BackendsCall(object):
def __init__(self, backends, condition, function, *args, **kwargs):
"""
diff --git a/weboob/core/modules.py b/weboob/core/modules.py
index 25024233c302516d9bfbc7fb7b51f31bd0857540..1d67f3a56466fa072dbf42ab52583d38d0d9d1c2 100644
--- a/weboob/core/modules.py
+++ b/weboob/core/modules.py
@@ -32,6 +32,7 @@ def __init__(self, module_name, msg):
Exception.__init__(self, msg)
self.module = module_name
+
class Module(object):
def __init__(self, package):
self.logger = getLogger('backend')
diff --git a/weboob/core/scheduler.py b/weboob/core/scheduler.py
index 3c19a50e943c3a57a79fcab94687da56eb573e59..bf2b555e53d7c73376df3666b2f51b2fca29f4f4 100644
--- a/weboob/core/scheduler.py
+++ b/weboob/core/scheduler.py
@@ -44,6 +44,7 @@ def run(self):
def want_stop(self):
raise NotImplementedError()
+
class RepeatedTimer(_Timer):
def run(self):
while not self.finished.isSet():
@@ -55,6 +56,7 @@ def run(self):
self.finished.wait(self.interval)
self.finished.set()
+
class Scheduler(IScheduler):
def __init__(self):
self.logger = getLogger('scheduler')
diff --git a/weboob/tools/application/base.py b/weboob/tools/application/base.py
index 3768876c53568a2e60ff8b314573095f380b4ecd..bb0accf6b5ea3bf018b5c0f737fb18c438e8e03f 100644
--- a/weboob/tools/application/base.py
+++ b/weboob/tools/application/base.py
@@ -64,6 +64,7 @@ def save(self):
if self.storage:
return self.storage.save('applications', self.name)
+
class BaseApplication(object):
"""
Base application.
diff --git a/weboob/tools/application/console.py b/weboob/tools/application/console.py
index a22aa4d7440d5e39af87b8a10007c5531c5a1095..000ad903e0eee99432debe8c584da9fbe328ca08 100644
--- a/weboob/tools/application/console.py
+++ b/weboob/tools/application/console.py
@@ -50,9 +50,11 @@ def __init__(self, id, backends):
Exception.__init__(self, 'Please specify a backend to use for this argument (%s@backend_name). '
'Availables: %s.' % (id, ', '.join(name for name, backend in backends)))
+
class BackendNotFound(Exception):
pass
+
class ConsoleApplication(BaseApplication):
"""
Base application class for CLI applications.
diff --git a/weboob/tools/application/formatters/load.py b/weboob/tools/application/formatters/load.py
index 3bc544ab455cbadc5f9df2d483bbf67603fef694..810de04b27ddcbb594ba70b77f250758e2e5512c 100644
--- a/weboob/tools/application/formatters/load.py
+++ b/weboob/tools/application/formatters/load.py
@@ -24,6 +24,7 @@
class FormatterLoadError(Exception):
pass
+
class FormattersLoader(object):
BUILTINS = ['htmltable', 'multiline', 'simple', 'table', 'csv', 'webkit', 'json']
diff --git a/weboob/tools/application/formatters/table.py b/weboob/tools/application/formatters/table.py
index 55e74688192515eebd57f8c4e6631a0ad4587fb6..7ac6a7ab3f56ba9cbc15d4588ce2e4e04b81089b 100644
--- a/weboob/tools/application/formatters/table.py
+++ b/weboob/tools/application/formatters/table.py
@@ -70,7 +70,7 @@ def get_formatted_table(self):
table = PrettyTable(list(column_headers))
for column_header in column_headers:
# API changed in python-prettytable. The try/except is a bad hack to support both versions
- # Note: two versions are not exactly the same...
+ # Note: two versions are not exactly the same...
# (first one: header in center. Second one: left align for header too)
try:
table.set_field_align(column_header, 'l')
diff --git a/weboob/tools/application/media_player.py b/weboob/tools/application/media_player.py
index 0c83df3c90d8628204ae5b3be46d49b86ebe4bc1..4e068c3584e2f29f579bf83520f91d349b17e563 100644
--- a/weboob/tools/application/media_player.py
+++ b/weboob/tools/application/media_player.py
@@ -39,7 +39,7 @@
class MediaPlayerNotFound(Exception):
def __init__(self):
- Exception.__init__(self, u'No media player found on this system. Please install one of them: %s.' % \
+ Exception.__init__(self, u'No media player found on this system. Please install one of them: %s.' %
', '.join(player[0] for player in PLAYERS))
@@ -75,7 +75,7 @@ def play(self, media, player_name=None, player_args=None):
"""
player_names = [player[0] for player in PLAYERS]
if not player_name:
- self.logger.debug(u'No media player given. Using the first available from: %s.' % \
+ self.logger.debug(u'No media player given. Using the first available from: %s.' %
', '.join(player_names))
player_name = self.guess_player_name()
if player_name is None:
diff --git a/weboob/tools/application/qt/backendcfg.py b/weboob/tools/application/qt/backendcfg.py
index ff1873e7924de46efd90a3b59e320c050630c75c..fc0d7ccb4d02e897802be8c86e21f190effb2e00 100644
--- a/weboob/tools/application/qt/backendcfg.py
+++ b/weboob/tools/application/qt/backendcfg.py
@@ -221,7 +221,7 @@ def loadBackendsList(self):
continue
item = QTreeWidgetItem(None, [instance_name, name])
- item.setCheckState(0, Qt.Checked if params.get('_enabled', '1').lower() in ('1', 'y', 'true') \
+ item.setCheckState(0, Qt.Checked if params.get('_enabled', '1').lower() in ('1', 'y', 'true')
else Qt.Unchecked)
self.set_icon(item, info)
diff --git a/weboob/tools/application/qt/qt.py b/weboob/tools/application/qt/qt.py
index 05bf79fe120e7b7bd49eafab00c4ddb3453331b5..81000c6d9b61e6849568f243536f167e871572e2 100644
--- a/weboob/tools/application/qt/qt.py
+++ b/weboob/tools/application/qt/qt.py
@@ -39,6 +39,7 @@
__all__ = ['QtApplication', 'QtMainWindow', 'QtDo', 'HTMLDelegate']
+
class QtScheduler(IScheduler):
def __init__(self, app):
self.app = app
@@ -81,6 +82,7 @@ def want_stop(self):
def run(self):
self.app.exec_()
+
class QCallbacksManager(QObject):
class Request(object):
def __init__(self):
@@ -132,6 +134,7 @@ def add_request(self, request):
request.event.wait()
return request.answer
+
class QtApplication(QApplication, BaseApplication):
def __init__(self):
QApplication.__init__(self, sys.argv)
@@ -143,10 +146,12 @@ def __init__(self):
def create_weboob(self):
return Weboob(scheduler=QtScheduler(self))
+
class QtMainWindow(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
+
class QtDo(QObject):
def __init__(self, weboob, cb, eb=None):
QObject.__init__(self)
@@ -223,6 +228,7 @@ def thread_cb(self, backend, data):
def thread_eb(self, backend, error, backtrace):
self.emit(SIGNAL('eb'), backend, error, backtrace)
+
class HTMLDelegate(QStyledItemDelegate):
def paint(self, painter, option, index):
optionV4 = QStyleOptionViewItemV4(option)
@@ -260,6 +266,7 @@ def sizeHint(self, option, index):
return QSize(doc.idealWidth(), max(doc.size().height(), optionV4.decorationSize.height()))
+
class _QtValueStr(QLineEdit):
def __init__(self, value):
QLineEdit.__init__(self)
@@ -277,11 +284,13 @@ def get_value(self):
self._value.set(unicode(self.text()))
return self._value
+
class _QtValueBackendPassword(_QtValueStr):
def get_value(self):
self._value._domain = None
return _QtValueStr.get_value(self)
+
class _QtValueBool(QCheckBox):
def __init__(self, value):
QCheckBox.__init__(self)
@@ -297,6 +306,7 @@ def get_value(self):
self._value.set(self.isChecked())
return self._value
+
class _QtValueInt(QSpinBox):
def __init__(self, value):
QSpinBox.__init__(self)
@@ -312,6 +322,7 @@ def get_value(self):
self._value.set(self.getValue())
return self._value
+
class _QtValueChoices(QComboBox):
def __init__(self, value):
QComboBox.__init__(self)
@@ -332,6 +343,7 @@ def get_value(self):
self._value.set(unicode(self.itemData(self.currentIndex()).toString()))
return self._value
+
def QtValue(value):
if isinstance(value, ValueBool):
klass = _QtValueBool
diff --git a/weboob/tools/browser/browser.py b/weboob/tools/browser/browser.py
index 9caacd6c89f276c9d9f1962845c4eaa5132eba29..7a0c5fa0245979c1ad9f2607887330766386e997 100644
--- a/weboob/tools/browser/browser.py
+++ b/weboob/tools/browser/browser.py
@@ -70,12 +70,15 @@
class BrowserIncorrectPassword(Exception):
pass
+
class BrowserForbidden(Exception):
pass
+
class BrowserBanned(BrowserIncorrectPassword):
pass
+
class BrowserPasswordExpired(BrowserIncorrectPassword):
pass
@@ -83,9 +86,11 @@ class BrowserPasswordExpired(BrowserIncorrectPassword):
class BrowserUnavailable(Exception):
pass
+
class BrowserHTTPNotFound(BrowserUnavailable):
pass
+
class BrowserHTTPError(BrowserUnavailable):
pass
@@ -113,9 +118,11 @@ def clear(self):
def close(self):
pass
+
class BrokenPageError(Exception):
pass
+
class BasePage(object):
"""
Base page
@@ -138,6 +145,7 @@ def on_loaded(self):
"""
pass
+
def check_location(func):
def inner(self, *args, **kwargs):
if args and isinstance(args[0], basestring):
@@ -152,6 +160,7 @@ def inner(self, *args, **kwargs):
return func(self, *args, **kwargs)
return inner
+
class StandardBrowser(mechanize.Browser):
"""
Standard Browser.
diff --git a/weboob/tools/browser/decorators.py b/weboob/tools/browser/decorators.py
index 436f38f3f3a5b41e7599a22764b81376c8639de0..a15a74a0cb546dc165d390d4f56847e02e0cfe1e 100644
--- a/weboob/tools/browser/decorators.py
+++ b/weboob/tools/browser/decorators.py
@@ -23,6 +23,7 @@
from urlparse import urlsplit
import re
+
class check_url(object):
"""
Checks if the first argument matches the given regular expression (given as str,
diff --git a/weboob/tools/capabilities/messages/genericArticle.py b/weboob/tools/capabilities/messages/genericArticle.py
index 76f50c05fabfcab6c7da308d9d485fefb42d1d71..14731d19db39b20cbd0db7d921db99e622a4d569 100644
--- a/weboob/tools/capabilities/messages/genericArticle.py
+++ b/weboob/tools/capabilities/messages/genericArticle.py
@@ -50,6 +50,8 @@ def drop_comments(base_element):
# Replace relative url in link and image with a complete url
# Arguments: the html element to clean, and the domain name (with http:// prefix)
+
+
def clean_relativ_urls(base_element, domain):
for a in base_element.findall('.//a'):
if "href" in a.attrib:
diff --git a/weboob/tools/capabilities/paste.py b/weboob/tools/capabilities/paste.py
index 09135a556ed7adf6c70fea8c5a7fcddf3c6413ff..305582f939c3eb6d860725345966ce13dfd58d69 100644
--- a/weboob/tools/capabilities/paste.py
+++ b/weboob/tools/capabilities/paste.py
@@ -48,6 +48,7 @@ def get_closest_expiration(self, max_age):
if max_age is False or max_age >= e:
return e
+
def test():
class MockPasteBackend(BasePasteBackend):
def __init__(self, expirations):
diff --git a/weboob/tools/captcha/virtkeyboard.py b/weboob/tools/captcha/virtkeyboard.py
index 8840dac53d9eea1efd27e59a15a17c037c421b63..8f0a36fb0ea57100663421c188a8a44d8af02d7e 100644
--- a/weboob/tools/captcha/virtkeyboard.py
+++ b/weboob/tools/captcha/virtkeyboard.py
@@ -46,10 +46,10 @@ def __init__(self, file, coords, color, convert=None):
self.bands = img.getbands()
if isinstance(color, int) and not isinstance(self.bands, str) and len(self.bands) != 1:
- raise VirtKeyboardError("Color requires %i component but only 1 is provided" \
+ raise VirtKeyboardError("Color requires %i component but only 1 is provided"
% len(self.bands))
if not isinstance(color, int) and len(color) != len(self.bands):
- raise VirtKeyboardError("Color requires %i components but %i are provided" \
+ raise VirtKeyboardError("Color requires %i components but %i are provided"
% (len(self.bands), len(color)))
self.color = color
@@ -123,7 +123,7 @@ def check_symbols(self, symbols, dirname):
if dirname is None:
dirname = tempfile.mkdtemp(prefix='weboob_session_')
self.generate_MD5(dirname)
- raise VirtKeyboardError("Symbol '%s' not found; all symbol hashes are available in %s"\
+ raise VirtKeyboardError("Symbol '%s' not found; all symbol hashes are available in %s"
% (s, dirname))
def generate_MD5(self, dir):
diff --git a/weboob/tools/parsers/iparser.py b/weboob/tools/parsers/iparser.py
index 161e009a04c02f5473086080cbe755270d17c0dc..072ba8cebb0d9ab36c6c7b48f8a8106ed61600b9 100644
--- a/weboob/tools/parsers/iparser.py
+++ b/weboob/tools/parsers/iparser.py
@@ -54,6 +54,7 @@ def strip(self, data):
p = re.compile(r'<.*?>')
return p.sub(' ', data).strip()
+
class RawParser(IParser):
def parse(self, data, encoding=None):
return data.read()
diff --git a/weboob/tools/test.py b/weboob/tools/test.py
index e6ce1d996b05f5ff8d79898b2915928ab8fb623e..65b175a233c1a73f2f0f170b04434a629087425c 100644
--- a/weboob/tools/test.py
+++ b/weboob/tools/test.py
@@ -26,6 +26,7 @@
__all__ = ['TestCase', 'BackendTest']
+
class BackendTest(TestCase):
BACKEND = None
diff --git a/weboob/tools/value.py b/weboob/tools/value.py
index 602455158538feb10a0ee910e2988320e58bd5c2..217b1a49b7ae81ee7ae79981ad0d1315c73f1fe7 100644
--- a/weboob/tools/value.py
+++ b/weboob/tools/value.py
@@ -37,6 +37,7 @@ def __init__(self, *values):
for v in values:
self[v.id] = v
+
class Value(object):
"""
Value.
@@ -116,6 +117,7 @@ def get(self):
"""
return self._value
+
class ValueBackendPassword(Value):
_domain = None
_callbacks = {}
@@ -190,6 +192,7 @@ def get(self):
self._stored = False
return self._value
+
class ValueInt(Value):
def __init__(self, *args, **kwargs):
kwargs['regexp'] = '^\d+$'
@@ -198,6 +201,7 @@ def __init__(self, *args, **kwargs):
def get(self):
return int(self._value)
+
class ValueFloat(Value):
def __init__(self, *args, **kwargs):
kwargs['regexp'] = '^[\d\.]+$'
@@ -212,6 +216,7 @@ def check_valid(self, v):
def get(self):
return float(self._value)
+
class ValueBool(Value):
def __init__(self, *args, **kwargs):
kwargs['choices'] = {'y': 'True', 'n': 'False'}