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
This commit is contained in:
parent
c39ccff7f1
commit
9953a5ad54
|
|
@ -1 +1,2 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from . import env_mail
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,27 +1,24 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="inherit_fetchmail">
|
||||
<!-- must be unique in this module. -->
|
||||
<field name="name">inherit_fetchmail_for_env_support</field>
|
||||
<field name="model">fetchmail.server</field>
|
||||
<!--parent python entity -->
|
||||
<field name="inherit_id" ref="fetchmail.view_email_server_form"/>
|
||||
<!-- modulename.view -->
|
||||
<field name="arch" type="xml">
|
||||
<field name="server" attrs="{'required' : [('type', '!=', 'local')]}" position="replace">
|
||||
<field name="server" />
|
||||
</field>
|
||||
<field name="port" attrs="{'required' : [('type', '!=', 'local')]}" position="replace">
|
||||
<field name="port" />
|
||||
</field>
|
||||
<field name="user" attrs="{'required' : [('type', '!=', 'local')]}" position="replace">
|
||||
<field name="user" />
|
||||
</field>
|
||||
<field name="password" attrs="{'required' : [('type', '!=', 'local')]}" position="replace">
|
||||
<field name="password" />
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
<data>
|
||||
<record model="ir.ui.view" id="inherit_fetchmail">
|
||||
<field name="name">inherit_fetchmail_for_env_support</field>
|
||||
<field name="model">fetchmail.server</field>
|
||||
<field name="inherit_id" ref="fetchmail.view_email_server_form"/>
|
||||
<field name="arch" type="xml">
|
||||
<field name="server" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
<field name="port" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
<field name="user" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
<field name="password" position="attributes">
|
||||
<attribute name="attrs" eval="False"/>
|
||||
</field>
|
||||
</field>
|
||||
</record>
|
||||
</data>
|
||||
</openerp>
|
||||
|
|
|
|||
Loading…
Reference in New Issue