Advertisement
Uno-Dan

Hook Manager

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