From 61c1e1902001e8acb9e272d0b264171e3f0f399f Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Mon, 2 Nov 2015 16:15:52 +0100 Subject: [PATCH 1/2] [IMP] Allow for context on fetchmail folder configurations to set default values --- .../model/fetchmail_server.py | 13 ++++++++++++- .../model/fetchmail_server_folder.py | 4 ++++ .../view/fetchmail_server.xml | 1 + 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/fetchmail_attach_from_folder/model/fetchmail_server.py b/fetchmail_attach_from_folder/model/fetchmail_server.py index fc6c709f3..a7dfe2f1f 100644 --- a/fetchmail_attach_from_folder/model/fetchmail_server.py +++ b/fetchmail_attach_from_folder/model/fetchmail_server.py @@ -24,6 +24,7 @@ import base64 import simplejson from lxml import etree from openerp import models, fields, api, exceptions +from openerp.tools.safe_eval import safe_eval from openerp.tools.translate import _ from openerp.tools.misc import UnquoteEvalContext _logger = logging.getLogger(__name__) @@ -69,7 +70,8 @@ class fetchmail_server(models.Model): connection = this.connect() for folder in this.folder_ids.filtered('active'): - this.handle_folder(connection, folder) + this.with_context(safe_eval(folder.context or {}))\ + .handle_folder(connection, folder) connection.close() return super(fetchmail_server, self).fetch_mail( @@ -218,6 +220,15 @@ class fetchmail_server(models.Model): connection = this.connect() connection.select() for folder in this.folder_ids.filtered('active'): + try: + folder_context = safe_eval(folder.context or {}) + except Exception, e: + raise exceptions.ValidationError( + _('Invalid context \"%s\": %s') % (folder.context, e)) + if not isinstance(folder_context, dict): + raise exceptions.ValidationError( + _('Context \"%s\" is not a dictionary.') % + folder.context) if connection.select(folder.path)[0] != 'OK': raise exceptions.ValidationError( _('Mailbox %s not found!') % folder.path) diff --git a/fetchmail_attach_from_folder/model/fetchmail_server_folder.py b/fetchmail_attach_from_folder/model/fetchmail_server_folder.py index 7ea7ef3bb..035e203a6 100644 --- a/fetchmail_attach_from_folder/model/fetchmail_server_folder.py +++ b/fetchmail_attach_from_folder/model/fetchmail_server_folder.py @@ -86,6 +86,10 @@ class fetchmail_server_folder(models.Model): domain = fields.Char( 'Domain', help='Fill in a search filter to narrow down objects to match') + context = fields.Char( + 'Context', + help=('Context that is passed during mail processing. Can be used to ' + 'set default values.')) msg_state = fields.Selection( [ ('sent', 'Sent'), diff --git a/fetchmail_attach_from_folder/view/fetchmail_server.xml b/fetchmail_attach_from_folder/view/fetchmail_server.xml index e5160cc8a..09bcd8a77 100644 --- a/fetchmail_attach_from_folder/view/fetchmail_server.xml +++ b/fetchmail_attach_from_folder/view/fetchmail_server.xml @@ -45,6 +45,7 @@ + From 755bf2bf1591852f11f7e346a6ff15d7060de0fd Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Mon, 2 Nov 2015 16:43:29 +0100 Subject: [PATCH 2/2] [FIX] Unnecessary escaping --- fetchmail_attach_from_folder/model/fetchmail_server.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fetchmail_attach_from_folder/model/fetchmail_server.py b/fetchmail_attach_from_folder/model/fetchmail_server.py index a7dfe2f1f..f584f44fe 100644 --- a/fetchmail_attach_from_folder/model/fetchmail_server.py +++ b/fetchmail_attach_from_folder/model/fetchmail_server.py @@ -70,7 +70,7 @@ class fetchmail_server(models.Model): connection = this.connect() for folder in this.folder_ids.filtered('active'): - this.with_context(safe_eval(folder.context or {}))\ + this.with_context(safe_eval(folder.context or '{}'))\ .handle_folder(connection, folder) connection.close() @@ -221,13 +221,13 @@ class fetchmail_server(models.Model): connection.select() for folder in this.folder_ids.filtered('active'): try: - folder_context = safe_eval(folder.context or {}) + folder_context = safe_eval(folder.context or '{}') except Exception, e: raise exceptions.ValidationError( - _('Invalid context \"%s\": %s') % (folder.context, e)) + _('Invalid context "%s": %s') % (folder.context, e)) if not isinstance(folder_context, dict): raise exceptions.ValidationError( - _('Context \"%s\" is not a dictionary.') % + _('Context "%s" is not a dictionary.') % folder.context) if connection.select(folder.path)[0] != 'OK': raise exceptions.ValidationError(