Close file descriptor to avoid leaks

This commit is contained in:
Roberto Rosario
2011-03-12 04:02:41 -04:00
parent 8405c9408d
commit db95f06283

View File

@@ -64,13 +64,16 @@ class Document(models.Model):
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,15 +82,21 @@ class Document(models.Model):
def update_mimetype(self, save=True): def update_mimetype(self, save=True):
if self.exists():
try: try:
source = self.open()
mime = magic.Magic(mime=True) mime = magic.Magic(mime=True)
self.file_mimetype = mime.from_buffer(self.open().read()) self.file_mimetype = mime.from_buffer(source.read())
source.seek(0)
mime_encoding = magic.Magic(mime_encoding=True) mime_encoding = magic.Magic(mime_encoding=True)
self.file_mime_encoding = mime_encoding.from_buffer(self.open().read()) self.file_mime_encoding = mime_encoding.from_buffer(source.read())
except: except:
#TODO: Should this be 'unknown' or simply ''?
self.file_mimetype = u'unknown' self.file_mimetype = u'unknown'
self.file_mime_encoding = u'unknown' self.file_mime_encoding = u'unknown'
finally: finally:
if source:
source.close()
if save: if save:
self.save() self.save()
@@ -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