No Description
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

core_hooks.py 2.1KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. #-*- coding: utf-8 -*-
  2. from lodel.plugin import LodelHook
  3. from lodel.settings import Settings
  4. from lodel import logger
  5. ##@package lodel.plugin.core_hooks
  6. #@brief Lodel2 internal hooks declaration
  7. #@ingroup lodel2_plugins
  8. ##@brief Bootstrap hook to check datasources configuration
  9. @LodelHook('lodel2_bootstraped')
  10. def datasources_bootstrap_hook(hook_name, caller, payload):
  11. for ds_name in Settings.datasources._fields:
  12. ds_conf = getattr(Settings.datasources, ds_name)
  13. identifier = getattr(ds_conf, 'identifier')
  14. # Now we are trying to fetch the datasource given the identifier
  15. ds_family_name, ds_name = identifier.split('.',1)
  16. try:
  17. ds_fam = getattr(Settings.datasource, ds_family_name)
  18. except AttributeError:
  19. msg = "No datasource family named '%s' found"
  20. msg %= ds_family_name
  21. raise NameError(msg)
  22. try:
  23. ds = getattr(ds_fam, ds_name)
  24. except AttributeError:
  25. msg = "No datasource configured for identifier '%s' found"
  26. msg %= identifier
  27. raise NameError(msg)
  28. log_msg = "Found a datasource named '%s' identified by '%s'"
  29. log_msg %= (ds_name, identifier)
  30. logger.debug(log_msg)
  31. ##@brief Bootstrap hook that print debug infos about registered hooks
  32. @LodelHook('lodel2_bootstraped')
  33. def list_hook_debug_hook(name, caller, payload):
  34. from lodel import logger
  35. hlist = LodelHook.hook_list()
  36. for name, reg_hooks in hlist.items():
  37. for hook, priority in reg_hooks:
  38. logger.debug("{modname}.{funname} is registered as hook \
  39. {hookname} with priority {priority}".format(
  40. modname = hook.__module__,
  41. funname = hook.__name__,
  42. priority = priority,
  43. hookname = name))
  44. ##@brief Hooks that trigger custom methods injection in dynmic classes
  45. @LodelHook("lodel2_dyncode_loaded")
  46. def lodel2_plugins_custom_methods(self, caller, dynclasses):
  47. from lodel.plugin.plugins import CustomMethod
  48. CustomMethod.set_registered(dynclasses)