summaryrefslogtreecommitdiffstats
path: root/module/plugins/internal/Account.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/internal/Account.py')
-rw-r--r--module/plugins/internal/Account.py76
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