Skip to content

Instantly share code, notes, and snippets.

@blaise1003
Created January 4, 2012 10:21
Show Gist options
  • Save blaise1003/1559450 to your computer and use it in GitHub Desktop.
Save blaise1003/1559450 to your computer and use it in GitHub Desktop.
utils.py
import types
from signals_ahoy.signals import form_init
class ExtraBase(object):
def __init__(self, name, instance):
self.name = name
self.instance = instance
class ExtraField(ExtraBase):
def hook(self, form, form_class):
form.fields[self.name] = self.instance
class ExtraMethod(ExtraBase):
def hook(self, form, form_class):
form.__dict__[self.name] = types.MethodType(
self.instance,
form,
form_class
)
class ExtraHandler(object):
signal = None
@classmethod
def hook(cls, form_class):
cls.signal.connect(cls(), sender=form_class)
def __call__(self, **kwargs):
pass
def add_to_form(form_class, *args):
for arg in args:
if isinstance(arg, type) and issubclass(arg, ExtraHandler):
arg.hook(form_class)
def handler(sender, **kwargs):
for arg in args:
if not isinstance(arg, type):
arg.hook(kwargs['form'], form_class)
form_init.connect(handler, sender=form_class)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment