Issue #78, Don't cache values that may be updated by out of process code

This fix makes issue #49 worse; fix: cache page count and latest version
at form/widget and not at model.
This commit is contained in:
Roberto Rosario
2014-10-23 02:44:09 -04:00
parent a651921ca2
commit e131463f90

View File

@@ -79,7 +79,6 @@ class Document(models.Model):
"""
Defines a single document with it's fields and properties
"""
_latest_versions = {}
uuid = models.CharField(default=lambda: UUID_FUNCTION(), max_length=48, editable=False)
document_type = models.ForeignKey(DocumentType, verbose_name=_(u'Document type'), related_name='documents')
@@ -218,7 +217,6 @@ class Document(models.Model):
new_version.save()
logger.debug('new_version saved')
self.__class__._latest_versions[self.pk] = new_version
return new_version
@@ -283,10 +281,7 @@ class Document(models.Model):
@property
def latest_version(self):
if self.pk not in self.__class__._latest_versions:
self.__class__._latest_versions[self.pk] = self.versions.order_by('timestamp').last()
return self.__class__._latest_versions[self.pk]
return self.versions.order_by('timestamp').last()
def rename(self, new_name):
version = self.latest_version
@@ -313,7 +308,6 @@ class DocumentVersion(models.Model):
"""
_pre_open_hooks = {}
_post_save_hooks = {}
_page_counts = {}
@staticmethod
def get_version_update_choices(document_version):
@@ -403,6 +397,7 @@ class DocumentVersion(models.Model):
self.update_mimetype(save=False)
self.save()
self.update_page_count(save=False)
if transformations:
self.apply_default_transformations(transformations)
@@ -449,8 +444,6 @@ class DocumentVersion(models.Model):
if save:
self.save()
self.__class__._page_counts[self.pk] = self.pages.count()
return detected_pages
def apply_default_transformations(self, transformations):
@@ -491,11 +484,6 @@ class DocumentVersion(models.Model):
def delete(self, *args, **kwargs):
self.file.storage.delete(self.file.path)
# Invalidate page count cache
self.__class__._page_counts[self.pk] = None
# Invalidate parent document's latest version cache
Document._latest_versions[self.document.pk] = None
return super(DocumentVersion, self).delete(*args, **kwargs)
def exists(self):
@@ -557,10 +545,7 @@ class DocumentVersion(models.Model):
@property
def page_count(self):
if self.pk not in self.__class__._page_counts:
self.__class__._page_counts[self.pk] = self.pages.count()
return self.__class__._page_counts[self.pk]
return self.pages.count()
class DocumentTypeFilename(models.Model):