diff options
Diffstat (limited to 'module/plugins/internal/Account.py')
-rw-r--r-- | module/plugins/internal/Account.py | 76 |
1 files changed, 24 insertions, 52 deletions
diff --git a/module/plugins/internal/Account.py b/module/plugins/internal/Account.py index ba8db0a6d..c63d182d9 100644 --- a/module/plugins/internal/Account.py +++ b/module/plugins/internal/Account.py @@ -6,7 +6,7 @@ import threading import time from module.plugins.internal.Plugin import Plugin, Skip -from module.plugins.internal.utils import compare_time, isiterable, lock, parse_size, safe_format +from module.plugins.internal.misc import Periodical, compare_time, decode, isiterable, lock, parse_size class Account(Plugin): @@ -23,8 +23,6 @@ class Account(Plugin): LOGIN_TIMEOUT = 30 * 60 #: Relogin account every 30 minutes TUNE_TIMEOUT = True #: Automatically tune relogin interval - PERIODICAL_INTERVAL = None - def __init__(self, manager, accounts): self._init(manager.core) @@ -37,9 +35,9 @@ class Account(Plugin): self.timeout = self.LOGIN_TIMEOUT - #: Callback of periodical job task - self.cb = None - self.interval = None + #: Callback of periodical job task, used by HookManager + self.periodical = Periodical(self, self.periodical_task) + self.cb = self.periodical.cb #@TODO: Recheck in 0.4.10 self.init() @@ -66,56 +64,30 @@ class Account(Plugin): return bool(self.get_data('premium')) - def setup(self): - """ - Setup for enviroment and other things, called before logging (possibly more than one time) - """ - pass - - - def set_interval(self, value): - newinterval = max(0, self.PERIODICAL_INTERVAL, value) + def _log(self, level, plugintype, pluginname, messages): + log = getattr(self.pyload.log, level) + msg = u" | ".join(decode(a).strip() for a in messages if a) - if newinterval != value: - return False - - if newinterval != self.interval: - self.interval = newinterval - - return True - - - def start_periodical(self, interval=None, threaded=False, delay=None): - if interval is not None and self.set_interval(interval) is False: - return False - else: - self.cb = self.pyload.scheduler.addJob(max(1, delay), self._periodical, [threaded], threaded=threaded) - return True - - - def restart_periodical(self, *args, **kwargs): - self.stop_periodical() - return self.start_periodical(*args, **kwargs) - - - def stop_periodical(self): + #: Hide any password try: - return self.pyload.scheduler.removeJob(self.cb) - finally: - self.cb = None - + msg = msg.replace(self.info['login']['password'], "**********") + except Exception: + pass - def _periodical(self, threaded): - try: - self.periodical() + log("%(plugintype)s %(pluginname)s: %(msg)s" % + {'plugintype': plugintype.upper(), + 'pluginname': pluginname, + 'msg' : msg}) - except Exception, e: - self.log_error(_("Error performing periodical task"), e) - self.restart_periodical(threaded=threaded, delay=self.interval) + def setup(self): + """ + Setup for enviroment and other things, called before logging (possibly more than one time) + """ + pass - def periodical(self): + def periodical_task(self): raise NotImplementedError @@ -209,7 +181,7 @@ class Account(Plugin): self.sync() clear = lambda x: {} if isinstance(x, dict) else [] if isiterable(x) else None - self.info['data'] = dict((k, clear(v)) for k, v in self.info['data'].iteritems()) + self.info['data'] = dict((k, clear(v)) for k, v in self.info['data'].items()) self.info['data']['options'] = {'limitdl': ['0']} self.syncback() @@ -237,7 +209,7 @@ class Account(Plugin): self.syncback() - self.log_debug("Account info for user `%s`: %s" % (self.user, safe_format(self.info, self.info['login']['password']))) + self.log_debug("Account info for user `%s`: %s" % (self.user, self.info)) return self.info @@ -452,7 +424,7 @@ class Account(Plugin): ########################################################################### - def parse_traffic(self, size, unit=None): #@NOTE: Returns kilobytes in 0.4.9 + def parse_traffic(self, size, unit=None): #@NOTE: Returns kilobytes only in 0.4.9 self.log_debug("Size: %s" % size, "Unit: %s" % (unit or "N/D")) return parse_size(size, unit or "byte") / 1024 #@TODO: Remove `/ 1024` in 0.4.10 |