summaryrefslogtreecommitdiff
path: root/addons/base_import/models.py
diff options
context:
space:
mode:
authorXavier Morel <xmo@openerp.com>2012-08-14 16:14:56 +0200
committerXavier Morel <xmo@openerp.com>2012-08-14 16:14:56 +0200
commit8fa23a95186edd2f5bf6f223337d34f3a4e55e70 (patch)
treeb5fb09b151d4b3d846b13f57e5e205cc263d7447 /addons/base_import/models.py
parent323b979146d6e0ba428a3e15e98f112cf9f80d43 (diff)
[ADD] actual importing, no fields matching yet
also no error pinpointing because API does not allow for it currently bzr revid: xmo@openerp.com-20120814141456-zh9kdbjy8wj1sxys
Diffstat (limited to 'addons/base_import/models.py')
-rw-r--r--addons/base_import/models.py29
1 files changed, 23 insertions, 6 deletions
diff --git a/addons/base_import/models.py b/addons/base_import/models.py
index 560a28f9067..a464649758d 100644
--- a/addons/base_import/models.py
+++ b/addons/base_import/models.py
@@ -11,6 +11,8 @@ try:
except ImportError:
from StringIO import StringIO
+import psycopg2
+
from openerp.osv import orm, fields
from openerp.tools.translate import _
@@ -300,24 +302,39 @@ class ir_import(orm.TransientModel):
record, fields, options, context=context)
try:
+ _logger.info('importing %d rows...', len(data))
(code, record, message, _wat) = self.pool[record.res_model].import_data(
cr, uid, import_fields, data, context=context)
+ _logger.info('done')
+
except Exception, e:
+ _logger.exception("Import failed")
# TODO: remove when exceptions stop being an "expected"
- # behavior of import_data on some invalid input.
+ # behavior of import_data on some (most) invalid
+ # input.
code, record, message = -1, None, str(e)
- if dryrun:
- cr.execute('ROLLBACK TO SAVEPOINT import')
- else:
- cr.execute('RELEASE SAVEPOINT import')
+ # If transaction aborted, RELEASE SAVEPOINT is going to raise
+ # an InternalError (ROLLBACK should work, maybe). Ignore that.
+ # TODO: to handle multiple errors, create savepoint around
+ # write and release it in case of write error (after
+ # adding error to errors array) => can keep on trying to
+ # import stuff, and rollback at the end if there is any
+ # error in the results.
+ try:
+ if dryrun:
+ cr.execute('ROLLBACK TO SAVEPOINT import')
+ else:
+ cr.execute('RELEASE SAVEPOINT import')
+ except psycopg2.InternalError:
+ pass
if code != -1:
return []
# TODO: add key for error location?
# TODO: error not within normal preview, how to display? Re-preview
- # with higher count?
+ # with higher ``count``?
return [{
'type': 'error',
'message': message,