Close file descriptor to avoid leaks
This commit is contained in:
@@ -62,15 +62,18 @@ class Document(models.Model):
|
|||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return '%s.%s' % (self.file_filename, self.file_extension)
|
return '%s.%s' % (self.file_filename, self.file_extension)
|
||||||
|
|
||||||
|
|
||||||
def save(self, *args, **kwargs):
|
def save(self, *args, **kwargs):
|
||||||
internal_save = kwargs.pop('internal_save', False)
|
new_document = not self.pk
|
||||||
|
|
||||||
super(Document, self).save(*args, **kwargs)
|
super(Document, self).save(*args, **kwargs)
|
||||||
if not internal_save:
|
|
||||||
|
if new_document:
|
||||||
|
#Only do this for new documents
|
||||||
self.update_checksum(save=False)
|
self.update_checksum(save=False)
|
||||||
self.update_mimetype(save=False)
|
self.update_mimetype(save=False)
|
||||||
|
self.save()
|
||||||
self.update_page_count(save=False)
|
self.update_page_count(save=False)
|
||||||
self.save(internal_save=True)
|
|
||||||
self.apply_default_transformations()
|
self.apply_default_transformations()
|
||||||
|
|
||||||
|
|
||||||
@@ -79,17 +82,23 @@ class Document(models.Model):
|
|||||||
|
|
||||||
|
|
||||||
def update_mimetype(self, save=True):
|
def update_mimetype(self, save=True):
|
||||||
try:
|
if self.exists():
|
||||||
mime = magic.Magic(mime=True)
|
try:
|
||||||
self.file_mimetype = mime.from_buffer(self.open().read())
|
source = self.open()
|
||||||
mime_encoding = magic.Magic(mime_encoding=True)
|
mime = magic.Magic(mime=True)
|
||||||
self.file_mime_encoding = mime_encoding.from_buffer(self.open().read())
|
self.file_mimetype = mime.from_buffer(source.read())
|
||||||
except:
|
source.seek(0)
|
||||||
self.file_mimetype = u'unknown'
|
mime_encoding = magic.Magic(mime_encoding=True)
|
||||||
self.file_mime_encoding = u'unknown'
|
self.file_mime_encoding = mime_encoding.from_buffer(source.read())
|
||||||
finally:
|
except:
|
||||||
if save:
|
#TODO: Should this be 'unknown' or simply ''?
|
||||||
self.save()
|
self.file_mimetype = u'unknown'
|
||||||
|
self.file_mime_encoding = u'unknown'
|
||||||
|
finally:
|
||||||
|
if source:
|
||||||
|
source.close()
|
||||||
|
if save:
|
||||||
|
self.save()
|
||||||
|
|
||||||
|
|
||||||
def open(self):
|
def open(self):
|
||||||
@@ -103,7 +112,9 @@ class Document(models.Model):
|
|||||||
|
|
||||||
def update_checksum(self, save=True):
|
def update_checksum(self, save=True):
|
||||||
if self.exists():
|
if self.exists():
|
||||||
self.checksum = unicode(CHECKSUM_FUNCTION(self.open().read()))
|
source = self.open()
|
||||||
|
self.checksum = unicode(CHECKSUM_FUNCTION(source.read()))
|
||||||
|
source.close()
|
||||||
if save:
|
if save:
|
||||||
self.save()
|
self.save()
|
||||||
|
|
||||||
@@ -128,6 +139,7 @@ class Document(models.Model):
|
|||||||
break
|
break
|
||||||
|
|
||||||
output_descriptor.close()
|
output_descriptor.close()
|
||||||
|
input_descriptor.close()
|
||||||
return filepath
|
return filepath
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user