from durian.models import Listener from django import forms from durian.forms import HookConfigForm from durian.event import Hook from durian.registry import hooks # SIMPLE HOOK class MyHook(Hook): name = "myhook" hooks.register(MyHook()) def install_listener(): l = Listener(url="http://localhost:8000/durian/debug/", hook=MyHook.name) l.save() # HOOK SENT EVERY TIME USER "ask" COMMITS A CHANGE # This form is needed to add a listener, so the correct username/password # is sent when sending updates to twitter. class TwitterCommitHookConfigForm(HookConfigForm): username = forms.CharField(label=_(u"username")) password = forms.CharField(label=_(u"password"), required=True, widget=forms.PasswordInput()) digest = forms.BooleanField(widget=forms.CheckboxInput()) active = forms.BooleanField(widget=forms.CheckboxInput())
from django.db import models from django.db.models import signals from django.utils.translation import ugettext_lazy as _ from durian.event import ModelHook from durian.registry import hooks class Person(models.Model): name = models.CharField(_(u"name"), blank=False, max_length=200) address = models.CharField(_(u"address"), max_length=200) secret = models.CharField(_(u"secret"), max_length=200) class PersonHook(ModelHook): name = "person" model = Person signal = signals.post_save provides_args = ["name", "address"] async = False hooks.register(PersonHook)
class TestWebhookSignal(WebhookSignal): name = "__durian__.unittest.TestWebhookSignal" ignore_result = True scratchpad = {} def run(self, url, payload, **kwargs): self.__class__.scratchpad[url] = payload testhook = Hook(name="__durian__.unittest.testhook", provides_args=["name", "address", "phone", "email"], task_cls=TestWebhookSignal, async=False) hooks.register(testhook) testmhook = ModelHook(model=User, signal=signals.post_save, name="__durian__.unittest.testmhook", provides_args=["username", "email", "first_name", "last_name"], task_cls=TestWebhookSignal, async=False) hooks.register(testmhook) class TestHook(unittest.TestCase): def test_in_registry(self): in_reg = hooks.get("__durian__.unittest.testhook") self.assertTrue(in_reg)