diff options
author | ttt | 2017-05-13 00:29:47 +0530 |
---|---|---|
committer | ttt | 2017-05-13 00:29:47 +0530 |
commit | 4336f5f06f61de30ae3fa54650fce63a9d5ef5be (patch) | |
tree | 23b4ee9b8e8f24bf732acf2f7ad22ed50cdd5670 /lib/python2.7/site-packages/undelete | |
download | SBHS-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__.py | 0 | ||||
-rw-r--r-- | lib/python2.7/site-packages/undelete/managers.py | 40 | ||||
-rw-r--r-- | lib/python2.7/site-packages/undelete/models.py | 30 |
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 + + |