X-Git-Url: http://git.onelab.eu/?p=plstackapi.git;a=blobdiff_plain;f=planetstack%2Fmodel_policy.py;h=7aef79307c59fcfa0bfea1959aae115710ac1d17;hp=e12b15cb8bc61a1c876bce2c19ee409763c347da;hb=80c9c27857a2b464366dfda88e43e536ad515602;hpb=72cec1833201cbae364dbd0e639d96d5ebdb0c3d diff --git a/planetstack/model_policy.py b/planetstack/model_policy.py index e12b15c..7aef793 100644 --- a/planetstack/model_policy.py +++ b/planetstack/model_policy.py @@ -6,6 +6,7 @@ from dependency_walker import * import model_policies from util.logger import logger + modelPolicyEnabled = True def EnableModelPolicy(x): @@ -17,7 +18,6 @@ def update_dep(d, o): if (d.updated < o.updated): d.save(update_fields=['updated']) except AttributeError,e: - pdb.set_trace() raise e def delete_if_inactive(d, o): @@ -25,24 +25,37 @@ def delete_if_inactive(d, o): 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']): +def execute_model_policy(policy_name, instance, update_fields_empty, deleted): + if (update_fields_empty): # Automatic dirtying - walk_inv_deps(update_dep, instance) + #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:") - elif 'deleted' in kwargs['update_fields']: + print "Policy Exceution Error" + elif deleted: walk_inv_deps(delete_if_inactive, instance) + + +@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']): + noargs = True + deleted = False + else: + noargs = False + deleted = True + + execute_model_policy(policy_name, instance, noargs, deleted) +