__init__.py 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. from searx.plugins import self_ip
  2. from searx import logger
  3. from sys import exit
  4. logger = logger.getChild('plugins')
  5. required_attrs = ('name',
  6. 'description',
  7. 'default_on')
  8. class Plugin():
  9. default_on = False
  10. name = 'Default plugin'
  11. class PluginStore():
  12. def __init__(self):
  13. self.plugins = []
  14. def __iter__(self):
  15. for plugin in plugins:
  16. yield plugin
  17. def register(self, *plugins):
  18. for plugin in plugins:
  19. for plugin_attr in required_attrs:
  20. if not hasattr(plugin, plugin_attr):
  21. logger.critical('missing attribute "{0}", cannot load plugin: {1}'.format(plugin_attr, plugin))
  22. exit(3)
  23. self.plugins.append(plugin)
  24. def call(self, plugin_type, request, *args, **kwargs):
  25. ret = True
  26. for plugin in self.plugins:
  27. if hasattr(plugin, plugin_type):
  28. ret = getattr(plugin, plugin_type)(request, *args, **kwargs)
  29. if not ret:
  30. break
  31. return ret
  32. plugins = PluginStore()
  33. plugins.register(self_ip)