Advertisement
Uno-Dan

Hooker

Dec 1st, 2019
260
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 3.07 KB | None | 0 0
  1. ########################################################################################################################
  2. #    File: hooks.py
  3. #  Author: Dan Huckson, https://github.com/unodan
  4. #    Date: 2019-09-24
  5. ########################################################################################################################
  6.  
  7. from app.functions import *
  8.  
  9.  
  10. class _HookManager:
  11.     def __init__(self):
  12.         self._hooks = {}
  13.         self._triggers = {}
  14.  
  15.     @property
  16.     def hooks(self):
  17.         return self._hooks
  18.  
  19.     @property
  20.     def triggers(self):
  21.         return self._triggers
  22.  
  23.     def add_hook(self, target, hook, callback):
  24.  
  25.         if target not in self._hooks:
  26.             self._hooks[target] = {}
  27.  
  28.         if hook not in self._hooks[target]:
  29.             self._hooks[target][hook] = {}
  30.  
  31.         if callback not in self._hooks[target][hook].values():
  32.             key = target + '/' + hook + '/' + str(callback).strip('>').split(' ')[-1]
  33.             self._hooks[target][hook][key] = callback
  34.             return True
  35.  
  36.         return False
  37.  
  38.     def remove(self, target, hook, callback):
  39.         key = None
  40.         for _key, _callback in self._hooks[target][hook].items():
  41.             if callback == _callback:
  42.                 key = _key
  43.                 break
  44.  
  45.         if key:
  46.  
  47.             del self._hooks[target][hook][key]
  48.             if not self._hooks[target][hook]:
  49.                 del self._hooks[target][hook]
  50.             return True
  51.  
  52.         return False
  53.  
  54.     def get_hook(self, target, hook):
  55.         if hook in self._hooks[target]:
  56.             return self._hooks[target][hook]
  57.  
  58.         return {}
  59.  
  60.     def get_hooks(self, target=None):
  61.         if not target:
  62.             return self._hooks
  63.  
  64.         if target in self._hooks:
  65.             return self._hooks[target]
  66.  
  67.         return {}
  68.  
  69.     def event(self, target, hook):
  70.         hooks = self.get_hooks(target)
  71.         triggers = self.get_events(target)
  72.  
  73.         if hook in triggers and hook in hooks:
  74.             for callback in hooks[hook].values():
  75.                 callback(self)
  76.  
  77.     def add_event(self, target, hook, callback):
  78.         if target not in self._triggers:
  79.             self._triggers[target] = {}
  80.  
  81.         if hook not in self._triggers[target]:
  82.             self._triggers[target][hook] = {}
  83.  
  84.         if callback not in self._triggers[target][hook].values():
  85.             key = target + '/' + hook + '/' + str(callback).strip('>').split(' ')[-1]
  86.             self._triggers[target][hook][key] = callback
  87.             return True
  88.  
  89.         return False
  90.  
  91.     def get_events(self, target=None):
  92.         if not target:
  93.             return self._triggers
  94.  
  95.         if target in self._triggers:
  96.             return self._triggers[target]
  97.  
  98.         return {}
  99.  
  100.  
  101. class HookManager:
  102.     instance = None
  103.  
  104.     def __new__(cls, **kwargs):
  105.         if not cls.instance:
  106.             cls.instance = super(HookManager, cls).__new__(cls)
  107.             cls.instance.hook_manager = _HookManager()
  108.  
  109.         return cls.instance.hook_manager
  110.  
  111.  
  112. hook_manager = HookManager()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement