X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fmodel_policy.py;h=7dc6ddaaad5a751a9f611e973dac0c69b8b8ed66;hb=cecc4a345baf985e03c266dab539f52a7fabbbc9;hp=dbe8453bba545e4ccab8dcad205d223b38af8e31;hpb=3e97f6bdc43576a8519e94f4c3e4d5113cec96ac;p=plstackapi.git diff --git a/planetstack/model_policy.py b/planetstack/model_policy.py index dbe8453..7dc6dda 100644 --- a/planetstack/model_policy.py +++ b/planetstack/model_policy.py @@ -2,16 +2,35 @@ 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 +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, **kwargs): +def post_save_handler(sender, instance, **kwargs): 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) - policy_handler.handle(sender) + 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) +