Execute a signal once

 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
from functools import wraps

def one(func=None):
    """decorates signals for executing only one time
    
    Exemple Usage --
    
    from django.core.mail import EmailMultiAlternatives
    from django.template.loader import render_to_string
    from django.contrib.auth.models import User
    
    @one
    def user_welcome(sender, instance, created, **kwargs):
        # Send a welcome email
        if created == True and isinstance(instance, User):
            instance.message_set.create(message=_(u"Ho, Welcome %s!" % instance))
            subject, from_email, to = 'Welcome !', 'from@example.com', instance.email
            text_content = render_to_string('mail/welcome.html', { 'user': instance })
            msg = EmailMultiAlternatives(subject, text_content, from_email, [to])
            msg.send()
    
    """
    
    E = '_exec_one_time'
    @wraps(func)
    def wrapper(*args, **kwargs):
        try:
            instance = kwargs['instance']
            e = getattr(instance, E, [])
            c = func.__name__
            if c not in e:
                e.append(c)
                setattr(instance, E, e)
                return func(*args, **kwargs)
        except:
            return func(*args, **kwargs)
    return wrapper

More like this

  1. Subclass EmailMultiAlternatives to add CC: option by adamlofts 3 years ago
  2. Take a django.core.mail email message and replace any MEDIA_URL-served images with attached images by agrossman@gmail.com 1 year, 4 months ago
  3. Expire page from cache by mattgrayson 4 years, 10 months ago
  4. Reset / Send account details email by Ciantic 2 years, 10 months ago
  5. Sending html emails with images using Django templates by sleytr 6 years ago

Comments

(Forgotten your password?)