summaryrefslogtreecommitdiffstats
path: root/module/plugins/Hook.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/plugins/Hook.py')
-rw-r--r--module/plugins/Hook.py101
1 files changed, 58 insertions, 43 deletions
diff --git a/module/plugins/Hook.py b/module/plugins/Hook.py
index 5efd08bae..83ef091ae 100644
--- a/module/plugins/Hook.py
+++ b/module/plugins/Hook.py
@@ -14,38 +14,50 @@
You should have received a copy of the GNU General Public License
along with this program; if not, see <http://www.gnu.org/licenses/>.
- @author: mkaay
- @interface-version: 0.2
+ @author: RaNaN
"""
from traceback import print_exc
-from Plugin import Base
+#from functools import wraps
+from module.utils import has_method
+
+from Base import Base
+
+def class_name(p):
+ return p.rpartition(".")[2]
class Expose(object):
""" used for decoration to declare rpc services """
+ def __new__(cls, f, *args, **kwargs):
+ hookManager.addRPC(class_name(f.__module__), f.func_name, f.func_doc)
+ return f
+
+def AddEventListener(event):
+ """ used to register method for events """
+ class _klass(object):
+ def __new__(cls, f, *args, **kwargs):
+ hookManager.addEventListener(class_name(f.__module__), f.func_name, event)
+ return f
+ return _klass
+
+class ConfigHandler(object):
+ """ register method as config handler """
def __new__(cls, f, *args, **kwargs):
- hookManager.addRPC(f.__module__, f.func_name, f.func_doc)
+ hookManager.addConfigHandler(class_name(f.__module__), f.func_name)
return f
def threaded(f):
+ #@wraps(f)
def run(*args,**kwargs):
hookManager.startThread(f, *args, **kwargs)
return run
class Hook(Base):
"""
- Base class for hook plugins.
+ Base class for hook plugins. Please use @threaded decorator for all longer running task.
"""
- __name__ = "Hook"
- __version__ = "0.2"
- __type__ = "hook"
- __threaded__ = []
- __config__ = [ ("name", "type", "desc" , "default") ]
- __description__ = """interface for hook"""
- __author_name__ = ("mkaay", "RaNaN")
- __author_mail__ = ("mkaay@mkaay.de", "RaNaN@pyload.org")
#: automatically register event listeners for functions, attribute will be deleted dont use it yourself
event_map = None
@@ -75,20 +87,21 @@ class Hook(Base):
for event, funcs in self.event_map.iteritems():
if type(funcs) in (list, tuple):
for f in funcs:
- self.manager.addEvent(event, getattr(self,f))
+ self.evm.addEvent(event, getattr(self,f))
else:
- self.manager.addEvent(event, getattr(self,funcs))
+ self.evm.addEvent(event, getattr(self,funcs))
#delete for various reasons
self.event_map = None
if self.event_list:
for f in self.event_list:
- self.manager.addEvent(f, getattr(self,f))
+ self.evm.addEvent(f, getattr(self,f))
self.event_list = None
self.initPeriodical()
+ self.init()
self.setup()
def initPeriodical(self):
@@ -108,36 +121,51 @@ class Hook(Base):
def __repr__(self):
return "<Hook %s>" % self.__name__
-
+
+ def isActivated(self):
+ """ checks if hook is activated"""
+ return self.getConfig("activated")
+
+ def init(self):
+ pass
+
def setup(self):
""" more init stuff if needed """
pass
- def unload(self):
- """ called when hook was deactivated """
+ def activate(self):
+ """ Used to activate the hook """
+ if has_method(self.__class__, "coreReady"):
+ self.logDebug("Deprecated method .coreReady() use activated() instead")
+ self.coreReady()
+
+ def deactivate(self):
+ """ Used to deactivate the hook. """
pass
-
- def isActivated(self):
- """ checks if hook is activated"""
- return self.config.getPlugin(self.__name__, "activated")
-
- #event methods - overwrite these if needed
- def coreReady(self):
+ def periodical(self):
pass
- def coreExiting(self):
+ def newCaptchaTask(self, task):
+ """ new captcha task for the plugin, it MUST set the handler and timeout or will be ignored """
pass
-
+
+ def captchaCorrect(self, task):
+ pass
+
+ def captchaInvalid(self, task):
+ pass
+
+ # public events starts from here
def downloadPreparing(self, pyfile):
pass
def downloadFinished(self, pyfile):
pass
-
+
def downloadFailed(self, pyfile):
pass
-
+
def packageFinished(self, pypack):
pass
@@ -145,17 +173,4 @@ class Hook(Base):
pass
def afterReconnecting(self, ip):
- pass
-
- def periodical(self):
- pass
-
- def newCaptchaTask(self, task):
- """ new captcha task for the plugin, it MUST set the handler and timeout or will be ignored """
- pass
-
- def captchaCorrect(self, task):
- pass
-
- def captchaInvalid(self, task):
pass \ No newline at end of file