from django.utils import timezone
from django.core.exceptions import PermissionDenied
import model_policy
+from model_autodeletion import ephemeral_models
try:
# This is a no-op if observer_disabled is set to 1 in the config file
def get_field_diff(self, field_name):
return self.diff.get(field_name, None)
-class PlCoreBase(models.Model, DiffModelMixIn):
+ #classmethod
+ def getValidators(cls):
+ """ primarily for REST API, return a dictionary of field names mapped
+ to lists of the type of validations that need to be applied to
+ those fields.
+ """
+ validators = {}
+ for field in cls._meta.fields:
+ l = []
+ if field.blank==False:
+ l.append("notBlank")
+ if field.__class__.__name__=="URLField":
+ l.append("url")
+ validators[field.name] = l
+ return validators
+
+class PlCoreBase(models.Model): # , DiffModelMixIn):
objects = PlCoreBaseManager()
deleted_objects = PlCoreBaseDeletionManager()
+ # ---- copy stuff from DiffModelMixin ----
+
+ # XXX Django fails miserably when trying to create initial migrations when
+ # DiffModelMixin is used. So, until we figure out what's wrong,
+ # just copied the guts of DiffModelMixIn here.
+
+ @property
+ def _dict(self):
+ return model_to_dict(self, fields=[field.name for field in
+ self._meta.fields])
+
+ @property
+ def diff(self):
+ d1 = self._initial
+ d2 = self._dict
+ diffs = [(k, (v, d2[k])) for k, v in d1.items() if v != d2[k]]
+ return dict(diffs)
+
+ @property
+ def has_changed(self):
+ return bool(self.diff)
+
+ @property
+ def changed_fields(self):
+ return self.diff.keys()
+
+ def has_field_changed(self, field_name):
+ return field_name in self.diff.keys()
+
+ def get_field_diff(self, field_name):
+ return self.diff.get(field_name, None)
+
+ #classmethod
+ def getValidators(cls):
+ """ primarily for REST API, return a dictionary of field names mapped
+ to lists of the type of validations that need to be applied to
+ those fields.
+ """
+ validators = {}
+ for field in cls._meta.fields:
+ l = []
+ if field.blank==False:
+ l.append("notBlank")
+ if field.__class__.__name__=="URLField":
+ l.append("url")
+ validators[field.name] = l
+ return validators
+
+ # ---- end copy stuff from DiffModelMixin ----
+
# default values for created and updated are only there to keep evolution
# from failing.
created = models.DateTimeField(auto_now_add=True, default=timezone.now)
updated = models.DateTimeField(auto_now=True, default=timezone.now)
- enacted = models.DateTimeField(null=True, default=None)
+ enacted = models.DateTimeField(null=True, blank=True, default=None)
+ policed = models.DateTimeField(null=True, blank=True, default=None)
backend_status = models.CharField(max_length=140,
- default="Provisioning in progress")
+ default="0 - Provisioning in progress")
deleted = models.BooleanField(default=False)
class Meta:
# filtering of visible objects by user.
return cls.objects.all()
+ @classmethod
+ def is_ephemeral(cls):
+ return cls in ephemeral_models
+
+
+