from turbion.bits.utils import spot class FilterManager(spot.Manager): def load(self): from turbion.bits.utils.loading import get_sub_modules get_sub_modules("turbion.bits.markup", "filters") class BaseFilter(object): def is_safe(self): return True def to_html(self, value): raise NotImplementedError Filter = spot.create(BaseFilter, manager=FilterManager)
class FilterManager(spot.Manager): def load(self): for filter_name in settings.TURBION_ANTISPAM_FILTERS: mod = None try: mod = loading.get_module('turbion.bits.antispam.filters', filter_name) except loading.NoModuleError: if '.' in filter_name: try: mod = loading.get_module(filter_name.rsplit('.', 1)) except loading.NoModuleError: pass if not mod: raise ValueError("Cannot load filter '%s'" % filter_name) Filter = spot.create(BaseFilter, manager=FilterManager, cache=False) def process_form_init(request, form, parent=None): for name, filter in Filter.manager.all(): try: filter.process_form_init(request, form, parent) except NotImplementedError: pass def process_form_submit(request, form, child, parent=None): decisions = [] for name, filter in Filter.manager.all(): try: filter_decision = filter.process_form_submit(request, form, child, parent) if filter_decision:
from django.test import TestCase from turbion.bits.utils import spot class BasePlugin(object): def hello(self): return 'Hello from %s' % self.name class PluginManager(spot.Manager): def load(self): pass Plugin = spot.create(BasePlugin, manager=PluginManager, cache=False) class PlugA(Plugin): name = 'plug_a' class PlugB(Plugin): pass class SpotTest(TestCase): def setUp(self): pass def test_all_plugins(self): self.assertEqual( sorted([name for name, obj in Plugin.manager.all()]), ['plug_a', 'plug_b'] ) def test_get_plugin(self):