Dirty objects that depend on dirtied objects up to one level
[plstackapi.git] / planetstack / model_policy.py
1 from django.db.models.signals import post_save
2 from django.dispatch import receiver
3 import pdb
4 from core.models import *
5 from dependency_walker import *
6 import model_policies
7
8 def update_dep(d, o):
9         print "Updating %s (%s)"%(d,d.__class__.__name__)
10         if (d.updated < o.updated):
11                 d.save(update_fields=['updated'])
12         
13 @receiver(post_save)
14 def post_save_handler(sender, instance, **kwargs):
15         sender_name = sender.__name__
16         policy_name = 'model_policy_%s'%sender_name
17         
18         if (not kwargs['update_fields']):
19                 # Automatic dirtying
20                 walk_inv_deps(update_dep, instance)
21
22                 try:
23                         policy_handler = getattr(model_policies, policy_name, None)
24                         if policy_handler is not None:
25                                 policy_handler.handle(instance)
26                         
27                         
28                 except:
29                         pass
30