From 11bed5c077a673a28cc231238576b07983af93ea Mon Sep 17 00:00:00 2001 From: Guewen Baconnier Date: Wed, 8 Oct 2014 11:30:14 +0200 Subject: [PATCH] mail_eniroment misc improvements * Move mail_environment in root folder * Use absolute imports for openerp and new Model classes * Use cr argument instead of cursor, propagate context * Update fields, remove deprecated 'method' argument, change 'states' otherwise the fields are not readonly (seems that the 'states' of the original field is kept. * Activate the installable flag * Indentation of the view with 2 spaces * Remove only the attrs attribute instead of redefining the whole field * pep8 * crm is not a dependency for mail_environment * Fix typo in manifest --- mail_environment/__init__.py | 1 + mail_environment/__openerp__.py | 15 +- mail_environment/env_mail.py | 250 +++++++++++++++++--------------- mail_environment/mail_view.xml | 45 +++--- 4 files changed, 169 insertions(+), 142 deletions(-) diff --git a/mail_environment/__init__.py b/mail_environment/__init__.py index be0b4da..89dd147 100644 --- a/mail_environment/__init__.py +++ b/mail_environment/__init__.py @@ -1 +1,2 @@ +# -*- coding: utf-8 -*- from . import env_mail diff --git a/mail_environment/__openerp__.py b/mail_environment/__openerp__.py index fce396f..05efe57 100644 --- a/mail_environment/__openerp__.py +++ b/mail_environment/__openerp__.py @@ -26,15 +26,17 @@ 'description': """ Extend mail and fetch mail with server environment module. -In config files, sections outgoint_mail and incoming_mails are default values for all Outgoing Mail Servers and Fetchmail Servers. -For each server, you can (re)define values with a section named "outgoing_mail.resource_name" where resource_name is the name of your server. +In config files, sections outgoing_mail and incoming_mails are default values +for all Outgoing Mail Servers and Fetchmail Servers. +For each server, you can (re)define values with a section named +"outgoing_mail.resource_name" where resource_name is the name of your server. Exemple of config file : [outgoing_mail] smtp_host = smtp.myserver.com smtp_port = 587 -smtp_user = +smtp_user = smtp_pass = smtp_encryption = ssl @@ -57,11 +59,14 @@ password = openerp 'author': 'Camptocamp', 'license': 'AGPL-3', 'website': 'http://openerp.camptocamp.com', - 'depends': ['mail', 'fetchmail', 'server_environment', 'server_environment_files', 'crm'], + 'depends': ['mail', + 'fetchmail', + 'server_environment', + 'server_environment_files', + ], 'init_xml': [], 'update_xml': ['mail_view.xml'], 'demo_xml': [], 'installable': True, 'active': False, } -# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/mail_environment/env_mail.py b/mail_environment/env_mail.py index e5c8bb9..c402534 100644 --- a/mail_environment/env_mail.py +++ b/mail_environment/env_mail.py @@ -19,21 +19,20 @@ # ############################################################################## -from osv import fields -from osv import osv +from openerp.osv import orm, fields -from server_environment import serv_config +from openerp.addons.server_environment import serv_config -class IrMail(osv.osv): +class IrMail(orm.Model): _inherit = "ir.mail_server" - - def _get_smtp_conf(self, cursor, uid, ids, name, args, context=None): + + def _get_smtp_conf(self, cr, uid, ids, name, args, context=None): """ Return configuration """ res = {} - for mail_server in self.browse(cursor, uid, ids): + for mail_server in self.browse(cr, uid, ids, context=context): global_section_name = 'outgoing_mail' # default vals @@ -41,7 +40,8 @@ class IrMail(osv.osv): if serv_config.has_section(global_section_name): config_vals.update((serv_config.items(global_section_name))) - custom_section_name = '.'.join((global_section_name, mail_server.name)) + custom_section_name = '.'.join((global_section_name, + mail_server.name)) if serv_config.has_section(custom_section_name): config_vals.update(serv_config.items(custom_section_name)) @@ -52,73 +52,85 @@ class IrMail(osv.osv): return res _columns = { - 'smtp_host': fields.function(_get_smtp_conf, - method=True, - string='SMTP Server', - type="char", - multi='outgoing_mail_config', - size=128), - 'smtp_port': fields.function(_get_smtp_conf, - method=True, - string='SMTP Port', - type="integer", - multi='outgoing_mail_config', - help="SMTP Port. Usually 465 for SSL, and 25 or 587 for other cases.", - size=5), - 'smtp_user': fields.function(_get_smtp_conf, - method=True, - string='Username', - type="char", - multi='outgoing_mail_config', - help="Optional username for SMTP authentication", - size=64), - 'smtp_pass': fields.function(_get_smtp_conf, - method=True, - string='Password', - type="char", - multi='outgoing_mail_config', - help="Optional password for SMTP authentication", - size=64), - 'smtp_encryption' :fields.function(_get_smtp_conf, - method=True, - string='smtp_encryption', - type="char", - multi='outgoing_mail_config', - help="Choose the connection encryption scheme:\n" - "- none: SMTP sessions are done in cleartext.\n" - "- starttls: TLS encryption is requested at start of SMTP session (Recommended)\n" - "- ssl: SMTP sessions are encrypted with SSL/TLS through a dedicated port (default: 465)", - size=64)} - -IrMail() + 'smtp_host': fields.function( + _get_smtp_conf, + string='SMTP Server', + type="char", + multi='outgoing_mail_config', + states={'draft': [('readonly', True)]}, + help="Hostname or IP of SMTP server"), + 'smtp_port': fields.function( + _get_smtp_conf, + string='SMTP Port', + type="integer", + multi='outgoing_mail_config', + states={'draft': [('readonly', True)]}, + help="SMTP Port. Usually 465 for SSL, " + "and 25 or 587 for other cases.", + size=5), + 'smtp_user': fields.function( + _get_smtp_conf, + string='Username', + type="char", + multi='outgoing_mail_config', + states={'draft': [('readonly', True)]}, + help="Optional username for SMTP authentication", + size=64), + 'smtp_pass': fields.function( + _get_smtp_conf, + string='Password', + type="char", + multi='outgoing_mail_config', + states={'draft': [('readonly', True)]}, + help="Optional password for SMTP authentication", + size=64), + 'smtp_encryption': fields.function( + _get_smtp_conf, + string='smtp_encryption', + type="selection", + multi='outgoing_mail_config', + selection=[('none', 'None'), + ('starttls', 'TLS (STARTTLS)'), + ('ssl', 'SSL/TLS')], + states={'draft': [('readonly', True)]}, + help="Choose the connection encryption scheme:\n" + "- none: SMTP sessions are done in cleartext.\n" + "- starttls: TLS encryption is requested at start " + "of SMTP session (Recommended)\n" + "- ssl: SMTP sessions are encrypted with SSL/TLS " + "through a dedicated port (default: 465)") + } -class FetchmailServer(osv.osv): +class FetchmailServer(orm.Model): """Incoming POP/IMAP mail server account""" _inherit = 'fetchmail.server' - def _get_incom_conf(self, cursor, uid, ids, name, args, context=None): + def _get_incom_conf(self, cr, uid, ids, name, args, context=None): """ Return configuration """ res = {} - for fetchmail in self.browse(cursor, uid, ids): + for fetchmail in self.browse(cr, uid, ids, context=context): global_section_name = 'incoming_mail' key_types = {'port': int, 'is_ssl': lambda a: bool(int(a)), 'attach': lambda a: bool(int(a)), - 'original': lambda a: bool(int(a)),} + 'original': lambda a: bool(int(a)), + } # default vals config_vals = {'port': 993, 'is_ssl': 0, 'attach': 0, - 'original': 0} + 'original': 0, + } if serv_config.has_section(global_section_name): config_vals.update(serv_config.items(global_section_name)) - custom_section_name = '.'.join((global_section_name, fetchmail.name)) + custom_section_name = '.'.join((global_section_name, + fetchmail.name)) if serv_config.has_section(custom_section_name): config_vals.update(serv_config.items(custom_section_name)) @@ -128,81 +140,93 @@ class FetchmailServer(osv.osv): res[fetchmail.id] = config_vals return res - def _type_search(self, cr, uid, obj, name, args, context={}): + def _type_search(self, cr, uid, obj, name, args, context=None): result_ids = [] - # read all incomming servers values + # read all incoming servers values all_ids = self.search(cr, uid, [], context=context) - results = self.read(cr, uid, all_ids, ['id','type'], context=context) + results = self.read(cr, uid, all_ids, ['id', 'type'], context=context) args = args[:] i = 0 while i < len(args): operator = args[i][1] if operator == '=': for res in results: - if (res['type'] == args[i][2]) and (res['id'] not in result_ids): + if (res['type'] == args[i][2] and + res['id'] not in result_ids): result_ids.append(res['id']) elif operator == 'in': for search_vals in args[i][2]: for res in results: - if (res['type'] == search_vals) and (res['id'] not in result_ids): - result_ids.append(res['id']) + if (res['type'] == search_vals and + res['id'] not in result_ids): + result_ids.append(res['id']) else: continue i += 1 return [('id', 'in', result_ids)] _columns = { - 'server': fields.function(_get_incom_conf, - method=True, - string='Server', - type="char", - multi='income_mail_config', - size=256, help="Hostname or IP of the mail server"), - 'port': fields.function(_get_incom_conf, - method=True, - string='Port', - type="integer", - multi='income_mail_config', - help="Hostname or IP of the mail server"), - 'type': fields.function(_get_incom_conf, - method=True, - string='Type', - type="char", - multi='income_mail_config', - fnct_search=_type_search, - size=64, - help="pop, imap, local"), - 'is_ssl': fields.function(_get_incom_conf, - method=True, - string='Is SSL', - type="boolean", - multi='income_mail_config', - help='Connections are encrypted with SSL/TLS through' - ' a dedicated port (default: IMAPS=993, POP3S=995)'), - 'attach': fields.function(_get_incom_conf, - method=True, - string='Keep Attachments', - type="boolean", - multi='income_mail_config', - help="Whether attachments should be downloaded. " - "If not enabled, incoming emails will be stripped of any attachments before being processed"), - 'original': fields.function(_get_incom_conf, - method=True, - string='Keep Original', - type="boolean", - multi='income_mail_config', - help="Whether a full original copy of each email should be kept for reference" - "and attached to each processed message. This will usually double the size of your message database."), - 'user': fields.function(_get_incom_conf, - method=True, - string='Username', - type="char", - multi='income_mail_config', - size=64), - 'password': fields.function(_get_incom_conf, - method=True, - string='password', - type="char", - multi='income_mail_config', - size=64)} -FetchmailServer() + 'server': fields.function( + _get_incom_conf, + string='Server', + type="char", + multi='income_mail_config', + states={'draft': [('readonly', True)]}, + help="Hostname or IP of the mail server"), + 'port': fields.function( + _get_incom_conf, + string='Port', + type="integer", + states={'draft': [('readonly', True)]}, + multi='income_mail_config'), + 'type': fields.function( + _get_incom_conf, + string='Type', + type="selection", + selection=[('pop', 'POP Server'), + ('imap', 'IMAP Server'), + ('local', 'Local Server'), + ], + multi='income_mail_config', + fnct_search=_type_search, + states={'draft': [('readonly', True)]}, + help="pop, imap, local"), + 'is_ssl': fields.function( + _get_incom_conf, + string='Is SSL', + type="boolean", + multi='income_mail_config', + states={'draft': [('readonly', True)]}, + help='Connections are encrypted with SSL/TLS through' + ' a dedicated port (default: IMAPS=993, POP3S=995)'), + 'attach': fields.function( + _get_incom_conf, + string='Keep Attachments', + type="boolean", + multi='income_mail_config', + states={'draft': [('readonly', True)]}, + help="Whether attachments should be downloaded. " + "If not enabled, incoming emails will be stripped of any " + "attachments before being processed"), + 'original': fields.function( + _get_incom_conf, + string='Keep Original', + type="boolean", + multi='income_mail_config', + states={'draft': [('readonly', True)]}, + help="Whether a full original copy of each email should be kept " + "for reference and attached to each processed message. This " + "will usually double the size of your message database."), + 'user': fields.function( + _get_incom_conf, + string='Username', + type="char", + states={'draft': [('readonly', True)]}, + multi='income_mail_config'), + 'password': fields.function( + _get_incom_conf, + string='password', + type="char", + states={'draft': [('readonly', True)]}, + multi='income_mail_config') + } diff --git a/mail_environment/mail_view.xml b/mail_environment/mail_view.xml index 59577ed..505b952 100644 --- a/mail_environment/mail_view.xml +++ b/mail_environment/mail_view.xml @@ -1,27 +1,24 @@ - - - - inherit_fetchmail_for_env_support - fetchmail.server - - - - - - - - - - - - - - - - - - - + + + inherit_fetchmail_for_env_support + fetchmail.server + + + + + + + + + + + + + + + + +