Merge branch 'feature/simplify_mimetype_api' into development

This commit is contained in:
Roberto Rosario
2011-11-07 00:10:53 -04:00
4 changed files with 14 additions and 47 deletions

View File

@@ -25,7 +25,7 @@ class ConverterClass(ConverterBase):
def get_page_count(self, input_filepath):
page_count = 1
mimetype, encoding = get_mimetype(input_filepath)
mimetype, encoding = get_mimetype(open(input_filepath, 'rb'), input_filepath)
if mimetype == 'application/pdf':
# If file is a PDF open it with slate to determine the page
# count
@@ -50,7 +50,7 @@ class ConverterClass(ConverterBase):
def convert_file(self, input_filepath, output_filepath, transformations=None, page=DEFAULT_PAGE_NUMBER, file_format=DEFAULT_FILE_FORMAT):
tmpfile = None
mimetype, encoding = get_mimetype(input_filepath)
mimetype, encoding = get_mimetype(open(input_filepath, 'rb'), input_filepath)
if mimetype == 'application/pdf' and USE_GHOSTSCRIPT:
# If file is a PDF open it with ghostscript and convert it to
# TIFF

View File

@@ -17,7 +17,7 @@ from converter.api import get_page_count
from converter.api import get_available_transformations_choices
from converter.api import convert
from converter.exceptions import UnknownFileFormat, UnkownConvertError
from mimetype.api import get_document_mimetype, get_icon_file_path, \
from mimetype.api import get_mimetype, get_icon_file_path, \
get_error_icon_file_path
from documents.conf.settings import CHECKSUM_FUNCTION
@@ -135,7 +135,7 @@ class Document(models.Model):
"""
if self.exists():
try:
self.file_mimetype, self.mime_encoding = get_document_mimetype(self)
self.file_mimetype, self.mime_encoding = get_mimetype(self.open(), self.get_fullname())
except:
self.file_mimetype = u''
self.file_mime_encoding = u''

View File

@@ -82,9 +82,9 @@ def get_error_icon_file_path():
return os.path.join(settings.PROJECT_ROOT, 'apps', 'mimetype', 'static', MIMETYPE_ICONS_DIRECTORY_NAME, ERROR_FILE_NAME)
else:
return os.path.join(settings.STATIC_ROOT, MIMETYPE_ICONS_DIRECTORY_NAME, ERROR_FILE_NAME)
def get_mimetype(filepath):
def get_mimetype(file_description, filepath):
"""
Determine a file's mimetype by calling the system's libmagic
library via python-magic or fallback to use python's mimetypes
@@ -92,50 +92,16 @@ def get_mimetype(filepath):
"""
file_mimetype = u''
file_mime_encoding = u''
source = None
if USE_PYTHON_MAGIC:
if os.path.exists(filepath):
try:
source = open(filepath, 'rb')
mime = magic.Magic(mime=True)
file_mimetype = mime.from_buffer(source.read())
source.seek(0)
mime_encoding = magic.Magic(mime_encoding=True)
file_mime_encoding = mime_encoding.from_buffer(source.read())
finally:
if source:
source.close()
mime = magic.Magic(mime=True)
file_mimetype = mime.from_buffer(file_description.read())
file_description.seek(0)
mime_encoding = magic.Magic(mime_encoding=True)
file_mime_encoding = mime_encoding.from_buffer(file_description.read())
else:
path, filename = os.path.split(filepath)
file_mimetype, file_mime_encoding = mimetypes.guess_type(filename)
return file_mimetype, file_mime_encoding
def get_document_mimetype(document):
"""
Determine a documents mimetype by calling the system's libmagic
library via python-magic or fallback to use python's mimetypes
library
"""
file_mimetype = u''
file_mime_encoding = u''
source = None
if USE_PYTHON_MAGIC:
if document.exists():
try:
source = document.open()
mime = magic.Magic(mime=True)
file_mimetype = mime.from_buffer(source.read())
source.seek(0)
mime_encoding = magic.Magic(mime_encoding=True)
file_mime_encoding = mime_encoding.from_buffer(source.read())
finally:
if source:
source.close()
else:
file_mimetype, file_mime_encoding = mimetypes.guess_type(document.get_fullname())
file_description.close()
return file_mimetype, file_mime_encoding

View File

@@ -138,6 +138,7 @@ class StagingFile(object):
try:
return convert(self.filepath, size=size, cleanup_files=False, transformations=transformations)
except UnknownFileFormat:
return get_icon_file_path(get_mimetype(self.filepath))
mimetype, encoding = get_mimetype(open(self.filepath, 'rb'), self.filepath)
return get_icon_file_path(mimetype)
except UnkownConvertError:
return get_error_icon_file_path()