cms.plugin_pool: 77 total statements, 0.0% covered

Generated: Wed 2013-03-13 10:33 CET

Source file: /media/Envs/Envs/filer-gallery/lib/python2.7/site-packages/cms/plugin_pool.py

Stats: 0 executed, 67 missed, 10 excluded, 41 ignored

  1. # -*- coding: utf-8 -*-
  2. from cms.exceptions import PluginAlreadyRegistered, PluginNotRegistered
  3. from cms.plugin_base import CMSPluginBase
  4. from cms.utils.django_load import load
  5. from cms.utils.helpers import reversion_register
  6. from cms.utils.placeholder import get_placeholder_conf
  7. from django.conf import settings
  8. from django.core.exceptions import ImproperlyConfigured
  9. import warnings
  10. class PluginPool(object):
  11. def __init__(self):
  12. self.plugins = {}
  13. self.discovered = False
  14. def discover_plugins(self):
  15. if self.discovered:
  16. return
  17. self.discovered = True
  18. load('cms_plugins')
  19. def register_plugin(self, plugin):
  20. """
  21. Registers the given plugin(s).
  22. If a plugin is already registered, this will raise PluginAlreadyRegistered.
  23. """
  24. if not issubclass(plugin, CMSPluginBase):
  25. raise ImproperlyConfigured(
  26. "CMS Plugins must be subclasses of CMSPluginBase, %r is not."
  27. % plugin
  28. )
  29. plugin_name = plugin.__name__
  30. if plugin_name in self.plugins:
  31. raise PluginAlreadyRegistered(
  32. "Cannot register %r, a plugin with this name (%r) is already "
  33. "registered." % (plugin, plugin_name)
  34. )
  35. plugin.value = plugin_name
  36. self.plugins[plugin_name] = plugin
  37. if 'reversion' in settings.INSTALLED_APPS:
  38. try:
  39. from reversion.registration import RegistrationError
  40. except ImportError:
  41. from reversion.revisions import RegistrationError
  42. try:
  43. reversion_register(plugin.model)
  44. except RegistrationError:
  45. pass
  46. def unregister_plugin(self, plugin):
  47. """
  48. Unregisters the given plugin(s).
  49. If a plugin isn't already registered, this will raise PluginNotRegistered.
  50. """
  51. plugin_name = plugin.__name__
  52. if plugin_name not in self.plugins:
  53. raise PluginNotRegistered(
  54. 'The plugin %r is not registered' % plugin
  55. )
  56. del self.plugins[plugin_name]
  57. def get_all_plugins(self, placeholder=None, page=None, setting_key="plugins", include_page_only=True):
  58. self.discover_plugins()
  59. plugins = self.plugins.values()[:]
  60. plugins.sort(key=lambda obj: unicode(obj.name))
  61. final_plugins = []
  62. if page:
  63. template = page.get_template()
  64. else:
  65. template = None
  66. allowed_plugins = get_placeholder_conf(
  67. setting_key,
  68. placeholder,
  69. template,
  70. )
  71. for plugin in plugins:
  72. include_plugin = False
  73. if placeholder:
  74. if allowed_plugins:
  75. if plugin.__name__ in allowed_plugins:
  76. include_plugin = True
  77. elif setting_key == "plugins":
  78. include_plugin = True
  79. if plugin.page_only and not include_page_only:
  80. include_plugin = False
  81. if include_plugin:
  82. final_plugins.append(plugin)
  83. if final_plugins:
  84. plugins = final_plugins
  85. # plugins sorted by modules
  86. plugins = sorted(plugins, key=lambda obj: unicode(obj.module))
  87. return plugins
  88. def get_text_enabled_plugins(self, placeholder, page):
  89. plugins = self.get_all_plugins(placeholder, page)
  90. plugins +=self.get_all_plugins(placeholder, page, 'text_only_plugins')
  91. final = []
  92. for plugin in plugins:
  93. if plugin.text_enabled:
  94. if plugin not in final:
  95. final.append(plugin)
  96. return final
  97. def get_plugin(self, name):
  98. """
  99. Retrieve a plugin from the cache.
  100. """
  101. self.discover_plugins()
  102. return self.plugins[name]
  103. plugin_pool = PluginPool()