Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ########################################################################################################################
- # File: hooks.py
- # Author: Dan Huckson, https://github.com/unodan
- # Date: 2019-09-24
- ########################################################################################################################
- from app.functions import *
- class _HookManager:
- def __init__(self):
- self._hooks = {}
- self._triggers = {}
- @property
- def hooks(self):
- return self._hooks
- @property
- def triggers(self):
- return self._triggers
- def add_hook(self, target, hook, callback):
- if target not in self._hooks:
- self._hooks[target] = {}
- if hook not in self._hooks[target]:
- self._hooks[target][hook] = {}
- if callback not in self._hooks[target][hook].values():
- key = target + '/' + hook + '/' + str(callback).strip('>').split(' ')[-1]
- self._hooks[target][hook][key] = callback
- return True
- return False
- def remove(self, target, hook, callback):
- key = None
- for _key, _callback in self._hooks[target][hook].items():
- if callback == _callback:
- key = _key
- break
- if key:
- del self._hooks[target][hook][key]
- if not self._hooks[target][hook]:
- del self._hooks[target][hook]
- return True
- return False
- def get_hook(self, target, hook):
- if hook in self._hooks[target]:
- return self._hooks[target][hook]
- return {}
- def get_hooks(self, target=None):
- if not target:
- return self._hooks
- if target in self._hooks:
- return self._hooks[target]
- return {}
- def event(self, target, hook):
- hooks = self.get_hooks(target)
- triggers = self.get_events(target)
- if hook in triggers and hook in hooks:
- for callback in hooks[hook].values():
- callback(self)
- def add_event(self, target, hook, callback):
- if target not in self._triggers:
- self._triggers[target] = {}
- if hook not in self._triggers[target]:
- self._triggers[target][hook] = {}
- if callback not in self._triggers[target][hook].values():
- key = target + '/' + hook + '/' + str(callback).strip('>').split(' ')[-1]
- self._triggers[target][hook][key] = callback
- return True
- return False
- def get_events(self, target=None):
- if not target:
- return self._triggers
- if target in self._triggers:
- return self._triggers[target]
- return {}
- class HookManager:
- instance = None
- def __new__(cls, **kwargs):
- if not cls.instance:
- cls.instance = super(HookManager, cls).__new__(cls)
- cls.instance.hook_manager = _HookManager()
- return cls.instance.hook_manager
- hook_manager = HookManager()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement