Reverted model policies to non-parallel version
[plstackapi.git] / planetstack / model_policy.py
1 from django.db.models.signals import post_save
2 from django.dispatch import receiver
3 import pdb
4 from core.models import *
5 from dependency_walker import *
6 import model_policies
7 from util.logger import logger
8
9
10 modelPolicyEnabled = True
11
12 def EnableModelPolicy(x):
13     global modelPolicyEnabled
14     modelPolicyEnabled = x
15
16 def update_dep(d, o):
17         try:
18                 if (d.updated < o.updated):
19                         d.save(update_fields=['updated'])
20         except AttributeError,e:
21                 raise e
22         
23 def delete_if_inactive(d, o):
24         #print "Deleting %s (%s)"%(d,d.__class__.__name__)
25         d.delete()      
26         return
27
28 def execute_model_policy(policy_name, instance, update_fields_empty, deleted):
29         if (update_fields_empty):
30                 # Automatic dirtying
31                 #walk_inv_deps(update_dep, instance)
32
33                 try:
34                         policy_handler = getattr(model_policies, policy_name, None)
35                         logger.error("POLICY HANDLER: %s %s" % (policy_name, policy_handler))                       
36                         if policy_handler is not None:
37                                 policy_handler.handle(instance)
38                 except:
39                         logger.log_exc("Model Policy Error:") 
40                         print "Policy Exceution Error"
41         elif deleted:
42                 walk_inv_deps(delete_if_inactive, instance)
43
44
45 @receiver(post_save)
46 def post_save_handler(sender, instance, **kwargs):
47         if not modelPolicyEnabled:
48             return
49
50         sender_name = sender.__name__
51         policy_name = 'model_policy_%s'%sender_name
52         if (not kwargs['update_fields']):
53                 noargs = True
54                 deleted = False
55         else:
56                 noargs = False
57                 deleted = True
58
59         execute_model_policy(policy_name, instance, noargs, deleted)
60         
61