1 from django.db.models.signals import post_save
2 from django.dispatch import receiver
4 from dependency_walker import *
6 from util.logger import logger
7 from datetime import datetime
9 from core.models import *
10 from django.db.transaction import atomic
11 from django.db.models import F, Q
13 modelPolicyEnabled = True
15 def EnableModelPolicy(x):
16 global modelPolicyEnabled
17 modelPolicyEnabled = x
21 if (d.updated < o.updated):
22 d.save(update_fields=['updated'])
23 except AttributeError,e:
26 def delete_if_inactive(d, o):
27 #print "Deleting %s (%s)"%(d,d.__class__.__name__)
32 def execute_model_policy(instance, deleted):
34 walk_inv_deps(update_dep, instance)
36 sender_name = instance.__class__.__name__
37 policy_name = 'model_policy_%s'%sender_name
41 walk_inv_deps(delete_if_inactive, instance)
44 policy_handler = getattr(model_policies, policy_name, None)
45 logger.error("POLICY HANDLER: %s %s" % (policy_name, policy_handler))
46 if policy_handler is not None:
47 policy_handler.handle(instance)
49 logger.log_exc("Model Policy Error:")
50 print "Policy Exceution Error"
52 instance.policed=datetime.now()
53 instance.save(update_fields=['policed'])
56 from core.models import Slice,Controller,Network,User,SlicePrivilege,Site,SitePrivilege,Image,ControllerSlice
59 models = [Slice, Controller, Network, User, SlicePrivilege, Site, SitePrivilege, Image, ControllerSlice]
63 res = m.objects.filter(Q(policed__lt=F('updated')) | Q(policed=None))
67 print "Working on %r"%o
68 execute_model_policy(o, False)
71 if (time.time()-start<1):