from django.db.models.signals import post_save from django.dispatch import receiver import pdb from core.models import * from dependency_walker import * import model_policies modelPolicyEnabled = True def EnableModelPolicy(x): global modelPolicyEnabled modelPolicyEnabled = x def update_dep(d, o): if (d.updated < o.updated): d.save(update_fields=['updated']) def delete_if_inactive(d, o): #print "Deleting %s (%s)"%(d,d.__class__.__name__) d.delete() return @receiver(post_save) def post_save_handler(sender, instance, **kwargs): if not modelPolicyEnabled: return sender_name = sender.__name__ policy_name = 'model_policy_%s'%sender_name if (not kwargs['update_fields']): # Automatic dirtying walk_inv_deps(update_dep, instance) try: policy_handler = getattr(model_policies, policy_name, None) if policy_handler is not None: policy_handler.handle(instance) except: pass elif 'deleted' in kwargs['update_fields']: walk_inv_deps(delete_if_inactive, instance)