diff options
Diffstat (limited to 'django-simple-history/simple_history/manager.py')
-rwxr-xr-x | django-simple-history/simple_history/manager.py | 75 |
1 files changed, 0 insertions, 75 deletions
diff --git a/django-simple-history/simple_history/manager.py b/django-simple-history/simple_history/manager.py deleted file mode 100755 index 923b310eb..000000000 --- a/django-simple-history/simple_history/manager.py +++ /dev/null @@ -1,75 +0,0 @@ -from django.db import models - - -class HistoryDescriptor(object): - def __init__(self, model): - self.model = model - - def __get__(self, instance, owner): - if instance is None: - return HistoryManager(self.model) - return HistoryManager(self.model, instance) - - -class HistoryManager(models.Manager): - def __init__(self, model, instance=None): - super(HistoryManager, self).__init__() - self.model = model - self.instance = instance - - def get_query_set(self): - if self.instance is None: - return super(HistoryManager, self).get_query_set() - - if isinstance(self.instance._meta.pk, models.OneToOneField): - filter = {self.instance._meta.pk.name + "_id": self.instance.pk} - else: - filter = {self.instance._meta.pk.name: self.instance.pk} - return super(HistoryManager, self).get_query_set().filter(**filter) - - def most_recent(self): - """ - Returns the most recent copy of the instance available in the history. - """ - if not self.instance: - raise TypeError("Can't use most_recent() without a %s instance." % - self.instance._meta.object_name) - tmp = [] - for field in self.instance._meta.fields: - if isinstance(field, models.ForeignKey): - tmp.append(field.name + "_id") - else: - tmp.append(field.name) - fields = tuple(tmp) - try: - values = self.values_list(*fields)[0] - except IndexError: - raise self.instance.DoesNotExist("%s has no historical record." % - self.instance._meta.object_name) - return self.instance.__class__(*values) - - def as_of(self, date): - """ - Returns an instance of the original model with all the attributes set - according to what was present on the object on the date provided. - """ - if not self.instance: - raise TypeError("Can't use as_of() without a %s instance." % - self.instance._meta.object_name) - tmp = [] - for field in self.instance._meta.fields: - if isinstance(field, models.ForeignKey): - tmp.append(field.name + "_id") - else: - tmp.append(field.name) - fields = tuple(tmp) - qs = self.filter(history_date__lte=date) - try: - values = qs.values_list('history_type', *fields)[0] - except IndexError: - raise self.instance.DoesNotExist("%s had not yet been created." % - self.instance._meta.object_name) - if values[0] == '-': - raise self.instance.DoesNotExist("%s had already been deleted." % - self.instance._meta.object_name) - return self.instance.__class__(*values[1:]) |