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

@@ -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