summaryrefslogtreecommitdiff
path: root/addons/base_import/models.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2016-02-17 17:48:03 +0100
committerChristophe Simonis <chs@odoo.com>2016-02-17 17:48:03 +0100
commit5be43b8d9ae4485ac28e9afb7dd7cdecefb58abc (patch)
tree483b65cfc65fb4f57a32f841424812575ebdbc84 /addons/base_import/models.py
parent6999a862fdff34ea7d05ba90c2977f2c386cb506 (diff)
parent27058c4763b40c5ef9b2b81c9f8a2de8d68469af (diff)
[MERGE] forward port of branch 9.0 up to 27058c4
Diffstat (limited to 'addons/base_import/models.py')
-rw-r--r--addons/base_import/models.py28
1 files changed, 25 insertions, 3 deletions
diff --git a/addons/base_import/models.py b/addons/base_import/models.py
index 7cbd0d79e09..22b48967e65 100644
--- a/addons/base_import/models.py
+++ b/addons/base_import/models.py
@@ -6,6 +6,8 @@ import logging
import operator
import os
+from openerp.tools.mimetypes import guess_mimetype
+
try:
from cStringIO import StringIO
except ImportError:
@@ -158,16 +160,36 @@ class ir_import(orm.TransientModel):
return fields
def _read_file(self, file_type, record, options):
+ # guess mimetype from file content
+ mimetype = guess_mimetype(record.file)
+ (file_extension, handler, req) = FILE_TYPE_DICT.get(mimetype, (None, None, None))
+ if handler:
+ try:
+ return getattr(self, '_read_' + file_extension)(record, options)
+ except Exception:
+ _logger.warn("Failed to read file '%s' (transient id %d) using guessed mimetype %s",
+ record.file_name or '<unknown>', record.id, mimetype)
+
+ # try reading with user-provided mimetype
(file_extension, handler, req) = FILE_TYPE_DICT.get(file_type, (None, None, None))
if handler:
- return getattr(self, '_read_' + file_extension)(record, options)
+ try:
+ return getattr(self, '_read_' + file_extension)(record, options)
+ except Exception:
+ _logger.warn("Failed to read file '%s' (transient id %d) using user-provided mimetype %s",
+ record.file_name or '<unknown>', record.id, file_type)
+
# fallback on file extensions as mime types can be unreliable (e.g.
# software setting incorrect mime types, or non-installed software
# leading to browser not sending mime types)
if record.file_name:
p, ext = os.path.splitext(record.file_name)
- if ext and EXTENSIONS.get(ext):
- return getattr(self, '_read_' + ext[1:])(record, options)
+ if ext in EXTENSIONS:
+ try:
+ return getattr(self, '_read_' + ext[1:])(record, options)
+ except Exception:
+ _logger.warn("Failed to read file '%s' (transient id %s) using file extension",
+ record.file_name, record.id)
if req:
raise ImportError(_("Unable to load \"{extension}\" file: requires Python module \"{modname}\"").format(extension=file_extension, modname=req))