summaryrefslogtreecommitdiff
path: root/lib/python2.7/site-packages/undelete
diff options
context:
space:
mode:
authorttt2017-05-13 00:29:47 +0530
committerttt2017-05-13 00:29:47 +0530
commit4336f5f06f61de30ae3fa54650fce63a9d5ef5be (patch)
tree23b4ee9b8e8f24bf732acf2f7ad22ed50cdd5670 /lib/python2.7/site-packages/undelete
downloadSBHS-2018-Rpi-4336f5f06f61de30ae3fa54650fce63a9d5ef5be.tar.gz
SBHS-2018-Rpi-4336f5f06f61de30ae3fa54650fce63a9d5ef5be.tar.bz2
SBHS-2018-Rpi-4336f5f06f61de30ae3fa54650fce63a9d5ef5be.zip
added all server files
Diffstat (limited to 'lib/python2.7/site-packages/undelete')
-rw-r--r--lib/python2.7/site-packages/undelete/__init__.py0
-rw-r--r--lib/python2.7/site-packages/undelete/managers.py40
-rw-r--r--lib/python2.7/site-packages/undelete/models.py30
3 files changed, 70 insertions, 0 deletions
diff --git a/lib/python2.7/site-packages/undelete/__init__.py b/lib/python2.7/site-packages/undelete/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lib/python2.7/site-packages/undelete/__init__.py
diff --git a/lib/python2.7/site-packages/undelete/managers.py b/lib/python2.7/site-packages/undelete/managers.py
new file mode 100644
index 0000000..e4712cd
--- /dev/null
+++ b/lib/python2.7/site-packages/undelete/managers.py
@@ -0,0 +1,40 @@
+from django.db import models
+
+class TrashableQuerySet(models.query.QuerySet):
+ """Special QuerySet that explicitly calls delete() method on each model.
+ If we don't do this, QuerySet delete() will bypass our TrashableMixin
+ delete().
+
+ This is only used for the NonTrashedManager. TrashedManager returns
+ trashed objects, which should be truly deleted when delete() is called.
+ Logic is the same for TrashableMixin at second delete().
+
+ @author: Charl P. Botha <cpbotha@timescapers.com>
+ """
+
+ def delete(self, trash=True):
+ """Overrides normal QuerySet delete to call explicitly object's
+ delete() method.
+ """
+ if trash:
+ for m in self:
+ m.delete()
+
+ else:
+ super(TrashableQuerySet, self).delete()
+
+class NonTrashedManager(models.Manager):
+ ''' Query only objects which have not been trashed. '''
+ def get_query_set(self):
+ # class Manager instantiates QuerySet() at every call of
+ # get_query_set() also. see django/db/models/manager.py
+ # we use special TrashableQuerySet which makes sure that
+ # model delete()s get called explicitly.
+ query_set = TrashableQuerySet(self.model, using=self._db)
+ return query_set.filter(trashed_at__isnull=True)
+
+class TrashedManager(models.Manager):
+ ''' Query only objects which have been trashed. '''
+ def get_query_set(self):
+ query_set = super(TrashedManager, self).get_query_set()
+ return query_set.filter(trashed_at__isnull=False)
diff --git a/lib/python2.7/site-packages/undelete/models.py b/lib/python2.7/site-packages/undelete/models.py
new file mode 100644
index 0000000..26c4c5f
--- /dev/null
+++ b/lib/python2.7/site-packages/undelete/models.py
@@ -0,0 +1,30 @@
+from datetime import datetime
+from django.db import models
+from django.utils.translation import ugettext_lazy as _
+
+from undelete.managers import TrashedManager, NonTrashedManager
+
+class TrashableMixin(models.Model):
+ trashed_at = models.DateTimeField(_('Trashed'), editable=False, blank=True, null=True)
+
+ objects = NonTrashedManager()
+ trash = TrashedManager()
+
+ def delete(self, *args, **kwargs):
+ # keyword argument trash has default value True
+ trash=kwargs.get('trash', True)
+ if not self.trashed_at and trash:
+ self.trashed_at = datetime.now()
+ self.save()
+ else:
+ super(TrashableMixin, self).delete(*args, **kwargs)
+
+ def restore(self, commit=True):
+ self.trashed_at = None
+ if commit:
+ self.save()
+
+ class Meta:
+ abstract = True
+
+