X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=planetstack%2Fmodel_policy.py;h=7aef79307c59fcfa0bfea1959aae115710ac1d17;hb=a354d644f199bcebd5ec8d16c40ab42cec43d3e5;hp=38caf01bcbc26ccac40b350f1aa54b037bb3fea7;hpb=6bdf86d7b248c722134ab8fbb6e084cae4496fcd;p=plstackapi.git diff --git a/planetstack/model_policy.py b/planetstack/model_policy.py index 38caf01..7aef793 100644 --- a/planetstack/model_policy.py +++ b/planetstack/model_policy.py @@ -1,14 +1,61 @@ from django.db.models.signals import post_save from django.dispatch import receiver import pdb -from model_policies import * +from core.models import * +from dependency_walker import * +import model_policies +from util.logger import logger + + +modelPolicyEnabled = True + +def EnableModelPolicy(x): + global modelPolicyEnabled + modelPolicyEnabled = x + +def update_dep(d, o): + try: + if (d.updated < o.updated): + d.save(update_fields=['updated']) + except AttributeError,e: + raise e + +def delete_if_inactive(d, o): + #print "Deleting %s (%s)"%(d,d.__class__.__name__) + d.delete() + return + +def execute_model_policy(policy_name, instance, update_fields_empty, deleted): + if (update_fields_empty): + # Automatic dirtying + #walk_inv_deps(update_dep, instance) + + try: + policy_handler = getattr(model_policies, policy_name, None) + logger.error("POLICY HANDLER: %s %s" % (policy_name, policy_handler)) + if policy_handler is not None: + policy_handler.handle(instance) + except: + logger.log_exc("Model Policy Error:") + print "Policy Exceution Error" + elif deleted: + walk_inv_deps(delete_if_inactive, instance) + @receiver(post_save) -def post_save_handler(sender, **kwargs): +def post_save_handler(sender, instance, **kwargs): + if not modelPolicyEnabled: + return + sender_name = sender.__name__ policy_name = 'model_policy_%s'%sender_name - try: - policy_handler = globals[policy_name] - policy_handler(sender) - except: - pass + if (not kwargs['update_fields']): + noargs = True + deleted = False + else: + noargs = False + deleted = True + + execute_model_policy(policy_name, instance, noargs, deleted) + +