summaryrefslogtreecommitdiff
path: root/addons
diff options
context:
space:
mode:
authorDenis Ledoux <dle@odoo.com>2015-02-09 17:58:28 +0100
committerDenis Ledoux <dle@odoo.com>2015-02-09 17:58:28 +0100
commit534d4e3e07777dceeb756f0a5585e2f6cae99bac (patch)
treeb32ba5701f956e7a0fe2230fb7e714157a18fdad /addons
parent675357b7d7b1beaf146861d690af0f81b209f8ce (diff)
parenta8fdc60b88fa6908b24b4c61bc7759df49325be2 (diff)
[MERGE] forward port of branch saas-3 up to a8fdc60
Diffstat (limited to 'addons')
-rw-r--r--addons/fetchmail/fetchmail.py47
-rw-r--r--addons/web/controllers/main.py4
-rw-r--r--addons/web/static/src/js/view_form.js2
3 files changed, 29 insertions, 24 deletions
diff --git a/addons/fetchmail/fetchmail.py b/addons/fetchmail/fetchmail.py
index d0690520b0e..4caff929e07 100644
--- a/addons/fetchmail/fetchmail.py
+++ b/addons/fetchmail/fetchmail.py
@@ -39,6 +39,7 @@ from openerp import tools, api
from openerp.tools.translate import _
_logger = logging.getLogger(__name__)
+MAX_POP_MESSAGES = 50
class fetchmail_server(osv.osv):
"""Incoming POP/IMAP mail server account"""
@@ -222,27 +223,31 @@ openerp_mailgate: "|/path/to/openerp-mailgate.py --host=localhost -u %(uid)d -p
imap_server.logout()
elif server.type == 'pop':
try:
- pop_server = server.connect()
- (numMsgs, totalSize) = pop_server.stat()
- pop_server.list()
- for num in range(1, numMsgs + 1):
- (header, msges, octets) = pop_server.retr(num)
- msg = '\n'.join(msges)
- res_id = None
- try:
- res_id = mail_thread.message_process(cr, uid, server.object_id.model,
- msg,
- save_original=server.original,
- strip_attachments=(not server.attach),
- context=context)
- pop_server.dele(num)
- except Exception:
- _logger.exception('Failed to process mail from %s server %s.', server.type, server.name)
- failed += 1
- if res_id and server.action_id:
- action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids': [res_id], 'active_model': context.get("thread_model", server.object_id.model)})
- cr.commit()
- _logger.info("Fetched %d email(s) on %s server %s; %d succeeded, %d failed.", numMsgs, server.type, server.name, (numMsgs - failed), failed)
+ while True:
+ pop_server = server.connect()
+ (numMsgs, totalSize) = pop_server.stat()
+ pop_server.list()
+ for num in range(1, min(MAX_POP_MESSAGES, numMsgs) + 1):
+ (header, msges, octets) = pop_server.retr(num)
+ msg = '\n'.join(msges)
+ res_id = None
+ try:
+ res_id = mail_thread.message_process(cr, uid, server.object_id.model,
+ msg,
+ save_original=server.original,
+ strip_attachments=(not server.attach),
+ context=context)
+ pop_server.dele(num)
+ except Exception:
+ _logger.exception('Failed to process mail from %s server %s.', server.type, server.name)
+ failed += 1
+ if res_id and server.action_id:
+ action_pool.run(cr, uid, [server.action_id.id], {'active_id': res_id, 'active_ids': [res_id], 'active_model': context.get("thread_model", server.object_id.model)})
+ cr.commit()
+ if numMsgs < MAX_POP_MESSAGES:
+ break
+ pop_server.quit()
+ _logger.info("Fetched %d email(s) on %s server %s; %d succeeded, %d failed.", numMsgs, server.type, server.name, (numMsgs - failed), failed)
except Exception:
_logger.exception("General failure when trying to fetch mail from %s server %s.", server.type, server.name)
finally:
diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index c652e678a34..563d6a85084 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -1240,7 +1240,7 @@ class Action(http.Controller):
except Exception:
action_id = 0 # force failed read
- base_action = Actions.read([action_id], ['type'], request.context)
+ base_action = Actions.read([action_id], ['name', 'type'], request.context)
if base_action:
ctx = request.context
action_type = base_action[0]['type']
@@ -1250,7 +1250,7 @@ class Action(http.Controller):
ctx.update(additional_context)
action = request.session.model(action_type).read([action_id], False, ctx)
if action:
- value = clean_action(action[0])
+ value = clean_action(dict(action[0], **base_action[0]))
return value
@http.route('/web/action/run', type='json', auth="user")
diff --git a/addons/web/static/src/js/view_form.js b/addons/web/static/src/js/view_form.js
index da6605a08e9..6aba8c5dc50 100644
--- a/addons/web/static/src/js/view_form.js
+++ b/addons/web/static/src/js/view_form.js
@@ -1160,7 +1160,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
},
build_eval_context: function() {
var a_dataset = this.dataset;
- return new instance.web.CompoundContext(this._build_view_fields_values(), a_dataset.get_context());
+ return new instance.web.CompoundContext(a_dataset.get_context(), this._build_view_fields_values());
},
});