__init__.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 self.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. plugin.id = plugin.name.replace(' ', '_')
  24. self.plugins.append(plugin)
  25. def call(self, plugin_type, request, *args, **kwargs):
  26. ret = True
  27. for plugin in request.user_plugins:
  28. if hasattr(plugin, plugin_type):
  29. ret = getattr(plugin, plugin_type)(request, *args, **kwargs)
  30. if not ret:
  31. break
  32. return ret
  33. plugins = PluginStore()
  34. plugins.register(self_ip)