X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fmodel_policy.py;h=7dc6ddaaad5a751a9f611e973dac0c69b8b8ed66;hb=cecc4a345baf985e03c266dab539f52a7fabbbc9;hp=fa558175b8658aa01af64a09b9912f454560c410;hpb=c9460f7a95b275ca482e57f3d6bb2a9780a4976d;p=plstackapi.git diff --git a/planetstack/model_policy.py b/planetstack/model_policy.py index fa55817..7dc6dda 100644 --- a/planetstack/model_policy.py +++ b/planetstack/model_policy.py @@ -2,14 +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 - try: - policy_handler = getattr(model_policies, policy_name) - policy_handler.handle(sender) - except: - pass + + 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) +