-
-
Notifications
You must be signed in to change notification settings - Fork 3.1k
/
plugin_pool.py
69 lines (58 loc) · 2.35 KB
/
plugin_pool.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
from cms.exceptions import PluginAllreadyRegistered
from django.conf import settings
from cms import settings as cms_settings
from cms.plugin_base import CMSPluginBase
class PluginPool(object):
def __init__(self):
self.plugins = {}
self.discovered = False
def discover_plugins(self):
if self.discovered:
return
for app in settings.INSTALLED_APPS:
__import__(app, {}, {}, ['cms_plugins'])
self.discovered = True
def register_plugin(self, plugin):
#from cms.plugins import CMSPluginBase
assert issubclass(plugin, CMSPluginBase)
if plugin.__name__ in self.plugins.keys():
raise PluginAllreadyRegistered, "[%s] a plugin with this name is already registered" % plugin.__name__
plugin.value = plugin.__name__
self.plugins[plugin.__name__] = plugin
if 'reversion' in settings.INSTALLED_APPS:
import reversion
try:
reversion.register(plugin.model, follow=["cmsplugin_ptr"])
except reversion.revisions.RegistrationError:
pass
def get_all_plugins(self, placeholder=None):
self.discover_plugins()
plugins = self.plugins.values()[:]
plugins.sort(key=lambda obj: unicode(obj.name))
if placeholder:
final_plugins = []
for plugin in plugins:
found = True
if cms_settings.CMS_PLACEHOLDER_CONF:
if placeholder in cms_settings.CMS_PLACEHOLDER_CONF:
if "plugins" in cms_settings.CMS_PLACEHOLDER_CONF[placeholder] \
and not plugin.__name__ in cms_settings.CMS_PLACEHOLDER_CONF[placeholder]["plugins"]:
found = False
if found:
final_plugins.append(plugin)
plugins = final_plugins
return plugins
def get_text_enabled_plugins(self, placeholder):
plugins = self.get_all_plugins(placeholder)
final = []
for plugin in plugins:
if plugin.text_enabled:
final.append(plugin)
return final
def get_plugin(self, name):
"""
Retrieve a plugin from the cache.
"""
self.discover_plugins()
return self.plugins[name]
plugin_pool = PluginPool()