From 0624be22886c7543e95cee53a7d4b1bdc01bc3b1 Mon Sep 17 00:00:00 2001 From: Walter Purcaro Date: Sun, 11 Oct 2015 03:44:46 +0200 Subject: [XFSAccount] Error handling support --- module/plugins/internal/Plugin.py | 13 ++++--- module/plugins/internal/SimpleHoster.py | 20 +++++++---- module/plugins/internal/XFSAccount.py | 64 +++++++++++++++++++++++++-------- 3 files changed, 68 insertions(+), 29 deletions(-) diff --git a/module/plugins/internal/Plugin.py b/module/plugins/internal/Plugin.py index ab5dcc447..3ad878c1b 100644 --- a/module/plugins/internal/Plugin.py +++ b/module/plugins/internal/Plugin.py @@ -136,15 +136,14 @@ def str2int(string): def parse_time(string): if re.search("da(il)?y|today", string): - time = seconds_to_midnight() + seconds = seconds_to_midnight() else: - regex = re.compile(r'(\d+| (?:this|an?) )\s*(hr|hour|min|sec|)', re.I) - time = sum((int(v) if v.strip() not in ("this", "a", "an") else 1) * - {'hr': 3600, 'hour': 3600, 'min': 60, 'sec': 1, '': 1}[u.lower()] - for v, u in regex.findall(string)) - - return time + regex = re.compile(r'(\d+| (?:this|an?) )\s*(hr|hour|min|sec|)', re.I) + seconds = sum((int(v) if v.strip() not in ("this", "a", "an") else 1) * + {'hr': 3600, 'hour': 3600, 'min': 60, 'sec': 1, '': 1}[u.lower()] + for v, u in regex.findall(string)) + return seconds #@TODO: Move to utils in 0.4.10 diff --git a/module/plugins/internal/SimpleHoster.py b/module/plugins/internal/SimpleHoster.py index 98afe8b4c..744a1f686 100644 --- a/module/plugins/internal/SimpleHoster.py +++ b/module/plugins/internal/SimpleHoster.py @@ -16,7 +16,7 @@ from module.utils import fixup, fs_encode class SimpleHoster(Hoster): __name__ = "SimpleHoster" __type__ = "hoster" - __version__ = "1.97" + __version__ = "1.98" __status__ = "testing" __pattern__ = r'^unmatchable$' @@ -334,13 +334,16 @@ class SimpleHoster(Hoster): elif self.DL_LIMIT_PATTERN and re.search(self.DL_LIMIT_PATTERN, self.html): m = re.search(self.DL_LIMIT_PATTERN, self.html) try: - errmsg = m.group(1).strip() + errmsg = m.group(1) except (AttributeError, IndexError): - errmsg = m.group(0).strip() + errmsg = m.group(0) - self.info['error'] = re.sub(r'<.*?>', " ", errmsg) - self.log_warning(self.info['error']) + finally: + errmsg = re.sub(r'<.*?>', " ", errmsg.strip()) + + self.info['error'] = errmsg + self.log_warning(errmsg) wait_time = parse_time(errmsg) self.wait(wait_time, reconnect=wait_time > 300) @@ -358,8 +361,11 @@ class SimpleHoster(Hoster): except (AttributeError, IndexError): errmsg = m.group(0).strip() - self.info['error'] = re.sub(r'<.*?>', " ", errmsg) - self.log_warning(self.info['error']) + finally: + errmsg = re.sub(r'<.*?>', " ", errmsg) + + self.info['error'] = errmsg + self.log_warning(errmsg) if re.search('limit|wait|slot', errmsg, re.I): wait_time = parse_time(errmsg) diff --git a/module/plugins/internal/XFSAccount.py b/module/plugins/internal/XFSAccount.py index 75ff4a362..5a6f0ee9c 100644 --- a/module/plugins/internal/XFSAccount.py +++ b/module/plugins/internal/XFSAccount.py @@ -6,13 +6,13 @@ import urlparse from module.plugins.internal.Account import Account # from module.plugins.internal.MultiAccount import MultiAccount -from module.plugins.internal.Plugin import parse_html_form, set_cookie +from module.plugins.internal.Plugin import parse_html_form, parse_time, set_cookie class XFSAccount(Account): __name__ = "XFSAccount" __type__ = "account" - __version__ = "0.51" + __version__ = "0.52" __status__ = "testing" __description__ = """XFileSharing account plugin""" @@ -38,6 +38,7 @@ class XFSAccount(Account): LEECH_TRAFFIC_UNIT = "MB" #: Used only if no group was found LOGIN_FAIL_PATTERN = r'Incorrect Login or Password|account was banned|Error<' + LOGIN_BAN_PATTERN = r'>(Your IP.+?)', " ", errmsg.strip()) + + self.timeout = parse_time(errmsg) + self.fail_login(errmsg) + + m = re.search(self.LOGIN_FAIL_PATTERN, self.html) + if m is not None: + try: + errmsg = m.group(1) + + except (AttributeError, IndexError): + errmsg = m.group(0) + + finally: + errmsg = re.sub(r'<.*?>', " ", errmsg.strip()) + + self.timeout = self.LOGIN_TIMEOUT + self.fail_login(errmsg) -- cgit v1.2.3