commit
c59f16ff09
|
@ -0,0 +1,21 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# Adapted by Nicolas Bessi. Copyright Camptocamp SA
|
||||||
|
# Based on Florent Xicluna original code. Copyright Wingo SA
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
from .serv_config import serv_config, setboolean
|
|
@ -0,0 +1,74 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# Adapted by Nicolas Bessi. Copyright Camptocamp SA
|
||||||
|
# Based on Florent Xicluna original code. Copyright Wingo SA
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "server configuration environment files",
|
||||||
|
"version": "1.0",
|
||||||
|
"depends": ["base", "server_environment_files"],
|
||||||
|
"author": "Camptocamp",
|
||||||
|
"description": """This module provides a classical configuration by environnement file pattern into OpenERP.
|
||||||
|
Based on code written by WinGo and Camptocamp.
|
||||||
|
|
||||||
|
This module allows you to use the classical environment file pattern by reading
|
||||||
|
a directive call running_env in config file or openerpc.
|
||||||
|
|
||||||
|
[options]
|
||||||
|
running_env=dev / prod / etc.
|
||||||
|
|
||||||
|
We intended to add a server command line but there is no correct way to do it.
|
||||||
|
|
||||||
|
This method allows you to have your settings into a module instead of using config file that might be mixed with openerprc or altered.
|
||||||
|
It is an alternative way to config the base config file.
|
||||||
|
All your configurations will be read_only and accessible under the admin menu.
|
||||||
|
If you are not in the 'dev' environment you will not be able to see the values containing 'passw' in key.
|
||||||
|
|
||||||
|
At the current time, the module does not allow to set low level attributes such as database server, etc. .
|
||||||
|
|
||||||
|
The first goal of the module is to ensure that OpenERP will never mess up the external system.
|
||||||
|
Once installed, profile is mandatory. We do not want to launch an instance in the dev environment on a production server.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
The configuration files are to put in the module server_environment_files ; they are using the config parser module syntax.
|
||||||
|
Look at the module to get some sexamples.
|
||||||
|
The default configuration are to put in the default folder. All config defined in other environment will be overwritten or added to default one.
|
||||||
|
Then, you can add a folder by used environment with the name of the environment
|
||||||
|
If your attibutes contain passw it will only be shown in dev environment.
|
||||||
|
|
||||||
|
Usage samples:
|
||||||
|
|
||||||
|
from server_environment import serv_config
|
||||||
|
for key, value in serv_config.items('external_service.ftp'):
|
||||||
|
print (key, value)
|
||||||
|
|
||||||
|
|
||||||
|
serv_config.get('external_service.ftp', 'tls')
|
||||||
|
""",
|
||||||
|
"website": "http://www.camptocamp.com",
|
||||||
|
"category": "Tools",
|
||||||
|
"init_xml": [],
|
||||||
|
"demo_xml": [],
|
||||||
|
"update_xml": [
|
||||||
|
'serv_config.xml',
|
||||||
|
],
|
||||||
|
"installable": True,
|
||||||
|
"active": False,
|
||||||
|
}
|
|
@ -0,0 +1,184 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# Adapted by Nicolas Bessi. Copyright Camptocamp SA
|
||||||
|
# Based on Florent Xicluna original code. Copyright Wingo SA
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
import os
|
||||||
|
import ConfigParser
|
||||||
|
|
||||||
|
from lxml import etree
|
||||||
|
|
||||||
|
from osv import osv, fields
|
||||||
|
from tools.config import config as system_base_config
|
||||||
|
|
||||||
|
from .system_info import get_server_environment
|
||||||
|
|
||||||
|
import server_environment_files
|
||||||
|
_dir = os.path.dirname(server_environment_files.__file__)
|
||||||
|
|
||||||
|
# Same dict as RawConfigParser._boolean_states
|
||||||
|
_boolean_states = {'1': True, 'yes': True, 'true': True, 'on': True,
|
||||||
|
'0': False, 'no': False, 'false': False, 'off': False}
|
||||||
|
|
||||||
|
if not system_base_config.get('running_env', False):
|
||||||
|
raise Exception(
|
||||||
|
("The parameter 'running_env' has not be set neither in base config file option -c or in openerprc.\n"
|
||||||
|
"We strongly recommand you not to use the rc file but instead use an explicite config file with this content : \n"
|
||||||
|
"[options] \nrunning_env = dev")
|
||||||
|
)
|
||||||
|
|
||||||
|
ck_path = os.path.join(_dir, system_base_config['running_env'])
|
||||||
|
|
||||||
|
if not os.path.exists(ck_path) :
|
||||||
|
raise Exception(
|
||||||
|
"Provided server environment does not exists please add a folder %s"%s(ck_path)
|
||||||
|
)
|
||||||
|
|
||||||
|
def setboolean(obj, attr, _bool=_boolean_states):
|
||||||
|
"""Replace the attribute with a boolean."""
|
||||||
|
res = _bool[getattr(obj, attr).lower()]
|
||||||
|
setattr(obj, attr, res)
|
||||||
|
return res
|
||||||
|
|
||||||
|
|
||||||
|
# Borrowed from MarkupSafe
|
||||||
|
def _escape(s):
|
||||||
|
"""Convert the characters &<>'" in string s to HTML-safe sequences."""
|
||||||
|
return (str(s).replace('&', '&')
|
||||||
|
.replace('>', '>')
|
||||||
|
.replace('<', '<')
|
||||||
|
.replace("'", ''')
|
||||||
|
.replace('"', '"'))
|
||||||
|
|
||||||
|
|
||||||
|
def _listconf(env_path):
|
||||||
|
"""List configuration files in a folder."""
|
||||||
|
files = [os.path.join(env_path, name)
|
||||||
|
for name in sorted(os.listdir(env_path))
|
||||||
|
if name.endswith('.conf')]
|
||||||
|
return files
|
||||||
|
|
||||||
|
|
||||||
|
def _load_config():
|
||||||
|
"""Load the configuration and return a ConfigParser instance."""
|
||||||
|
default = os.path.join(_dir, 'default')
|
||||||
|
running_env = os.path.join(_dir, system_base_config['running_env'])
|
||||||
|
if os.path.isdir(default):
|
||||||
|
conf_files = _listconf(default) + _listconf(running_env)
|
||||||
|
else:
|
||||||
|
conf_files = _listconf(running_env)
|
||||||
|
|
||||||
|
config_p = ConfigParser.SafeConfigParser()
|
||||||
|
# options are case-sensitive
|
||||||
|
config_p.optionxform = str
|
||||||
|
try:
|
||||||
|
config_p.read(conf_files)
|
||||||
|
except Exception, e:
|
||||||
|
raise Exception('Cannot read config files "%s": %s' % (conf_files, e))
|
||||||
|
|
||||||
|
return config_p
|
||||||
|
|
||||||
|
serv_config = _load_config()
|
||||||
|
|
||||||
|
|
||||||
|
class _Defaults(dict):
|
||||||
|
__slots__ = ()
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
func = lambda *a: str(value)
|
||||||
|
return dict.__setitem__(self, key, func)
|
||||||
|
|
||||||
|
|
||||||
|
class ServerConfiguration(osv.osv_memory):
|
||||||
|
"""Display server configuration."""
|
||||||
|
_name = 'server.config'
|
||||||
|
_columns = {}
|
||||||
|
_defaults = _Defaults()
|
||||||
|
|
||||||
|
def __init__(self, pool, cr):
|
||||||
|
res = super(ServerConfiguration, self).__init__(pool, cr)
|
||||||
|
self.running_env = system_base_config['running_env']
|
||||||
|
# Only show passwords in development
|
||||||
|
self.show_passwords = self.running_env in ('dev',)
|
||||||
|
self._build_osv()
|
||||||
|
return res
|
||||||
|
|
||||||
|
def _group(self, items, prefix):
|
||||||
|
"""Return an XML chunk which represents a group of fields."""
|
||||||
|
names = []
|
||||||
|
for k, v in items:
|
||||||
|
key = '%s\\%s' % (prefix, k)
|
||||||
|
# Mask passwords
|
||||||
|
if 'passw' in k and not self.show_passwords:
|
||||||
|
v = '**********'
|
||||||
|
# for the GTK display, we need to replace '_' with '__'.
|
||||||
|
# XXX: remove this hack when we switch to the web client.
|
||||||
|
k = k.replace('_', '__')
|
||||||
|
self._columns[key] = fields.char(k, size=1024)
|
||||||
|
self._defaults[key] = v
|
||||||
|
names.append(key)
|
||||||
|
|
||||||
|
return ('<group col="2" colspan="4">' +
|
||||||
|
''.join(['<field name="%s" readonly="1"/>' %
|
||||||
|
_escape(name) for name in names]) +
|
||||||
|
'</group>')
|
||||||
|
|
||||||
|
def _build_osv(self):
|
||||||
|
"""Build the view for the current configuration."""
|
||||||
|
arch = ('<?xml version="1.0" encoding="utf-8"?>'
|
||||||
|
'<form string="Configuration Form">'
|
||||||
|
'<notebook colspan="4">')
|
||||||
|
|
||||||
|
# OpenERP server configuration
|
||||||
|
rcfile = system_base_config.rcfile
|
||||||
|
items = sorted(system_base_config.options.items())
|
||||||
|
arch += '<page string="OpenERP">'
|
||||||
|
arch += '<separator string="%s" colspan="4"/>' % _escape(rcfile)
|
||||||
|
arch += self._group(items, prefix='openerp')
|
||||||
|
arch += '<separator colspan="4"/></page>'
|
||||||
|
|
||||||
|
arch += '<page string="Environment based configurations">'
|
||||||
|
for section in sorted(serv_config.sections()):
|
||||||
|
items = sorted(serv_config.items(section))
|
||||||
|
arch += '<separator string="[%s]" colspan="4"/>' % _escape(section)
|
||||||
|
arch += self._group(items, prefix=section)
|
||||||
|
arch += '<separator colspan="4"/></page>'
|
||||||
|
|
||||||
|
# System information
|
||||||
|
arch += '<page string="System">'
|
||||||
|
arch += '<separator string="Server Environment" colspan="4"/>'
|
||||||
|
arch += self._group(get_server_environment(), prefix='system')
|
||||||
|
arch += '<separator colspan="4"/></page>'
|
||||||
|
|
||||||
|
arch += '</notebook></form>'
|
||||||
|
self._arch = etree.fromstring(arch)
|
||||||
|
|
||||||
|
def fields_view_get(self, cr, uid, view_id=None, view_type='form', context=None, toolbar=False):
|
||||||
|
"""Overwrite the default method to render the custom view."""
|
||||||
|
res = super(ServerConfiguration, self).fields_view_get(cr, uid, view_id, view_type, context, toolbar)
|
||||||
|
if view_type == 'form':
|
||||||
|
arch_node = self._arch
|
||||||
|
xarch, xfields = self._view_look_dom_arch(cr, uid, arch_node, view_id, context=context)
|
||||||
|
res['arch'] = xarch
|
||||||
|
res['fields'] = xfields
|
||||||
|
return res
|
||||||
|
|
||||||
|
# TODO: button action_reload
|
||||||
|
|
||||||
|
ServerConfiguration()
|
|
@ -0,0 +1,19 @@
|
||||||
|
<?xml version="1.0"?>
|
||||||
|
<openerp>
|
||||||
|
<data>
|
||||||
|
|
||||||
|
<act_window id="act_show_config_window"
|
||||||
|
name="Server Environment"
|
||||||
|
res_model="server.config"
|
||||||
|
view_type="form"
|
||||||
|
view_mode="form"/>
|
||||||
|
|
||||||
|
<menuitem
|
||||||
|
parent="base.menu_config"
|
||||||
|
icon="STOCK_PROPERTIES"
|
||||||
|
sequence="90"
|
||||||
|
action="act_show_config_window"
|
||||||
|
id="menu_server_show_config"/>
|
||||||
|
|
||||||
|
</data>
|
||||||
|
</openerp>
|
|
@ -0,0 +1,62 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# Adapted by Nicolas Bessi. Copyright Camptocamp SA
|
||||||
|
# Based on Florent Xicluna original code. Copyright Wingo SA
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
import locale
|
||||||
|
import os
|
||||||
|
import platform
|
||||||
|
import subprocess
|
||||||
|
|
||||||
|
import release
|
||||||
|
from tools.config import config
|
||||||
|
|
||||||
|
|
||||||
|
def _get_output(cmd):
|
||||||
|
bindir = config['root_path']
|
||||||
|
p = subprocess.Popen(cmd, shell=True, cwd=bindir, stdout=subprocess.PIPE)
|
||||||
|
return p.communicate()[0].rstrip()
|
||||||
|
|
||||||
|
|
||||||
|
def get_server_environment():
|
||||||
|
# inspired by server/bin/service/web_services.py
|
||||||
|
try:
|
||||||
|
rev_id = _get_output('bzr revision-info')
|
||||||
|
except Exception, e:
|
||||||
|
rev_id = 'Exception: %s' % (e,)
|
||||||
|
|
||||||
|
os_lang = '.'.join([x for x in locale.getdefaultlocale() if x])
|
||||||
|
if not os_lang:
|
||||||
|
os_lang = 'NOT SET'
|
||||||
|
if os.name == 'posix' and platform.system() == 'Linux':
|
||||||
|
lsbinfo = _get_output('lsb_release -a')
|
||||||
|
else:
|
||||||
|
lsbinfo = 'not lsb compliant'
|
||||||
|
return (
|
||||||
|
('platform', platform.platform()),
|
||||||
|
('os.name', os.name),
|
||||||
|
('lsb_release', lsbinfo),
|
||||||
|
('release', platform.release()),
|
||||||
|
('version', platform.version()),
|
||||||
|
('architecture', platform.architecture()[0]),
|
||||||
|
('locale', os_lang),
|
||||||
|
('python', platform.python_version()),
|
||||||
|
('openerp', release.version),
|
||||||
|
('revision', rev_id),
|
||||||
|
)
|
|
@ -0,0 +1,20 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# Author Nicolas Bessi. Copyright Camptocamp SA
|
||||||
|
# Author Florent Xicluna. Copyright Wingo SA
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
##############################################################################
|
|
@ -0,0 +1,37 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
##############################################################################
|
||||||
|
#
|
||||||
|
# Adapted by Nicolas Bessi. Copyright Camptocamp SA
|
||||||
|
# Based on Florent Xicluna original code. Copyright Wingo SA
|
||||||
|
#
|
||||||
|
# This program is free software: you can redistribute it and/or modify
|
||||||
|
# it under the terms of the GNU General Public License as published by
|
||||||
|
# the Free Software Foundation, either version 3 of the License, or
|
||||||
|
# (at your option) any later version.
|
||||||
|
#
|
||||||
|
# This program is distributed in the hope that it will be useful,
|
||||||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
# GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
# You should have received a copy of the GNU General Public License
|
||||||
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
#
|
||||||
|
##############################################################################
|
||||||
|
|
||||||
|
{
|
||||||
|
"name": "server configuration environment files repository module",
|
||||||
|
"version": "1.0",
|
||||||
|
"depends": ["base"],
|
||||||
|
"author": "Camptocamp",
|
||||||
|
"description": """This module provides a file store for classical configuration by environnement file pattern into OpenERP provided by server_environment.
|
||||||
|
It is ment to be used by server_environment module. Please look at this module for more info and doc.
|
||||||
|
""",
|
||||||
|
"website": "http://www.camptocamp.com",
|
||||||
|
"category": "Tools",
|
||||||
|
"init_xml": [],
|
||||||
|
"demo_xml": [],
|
||||||
|
"update_xml": [],
|
||||||
|
"installable": True,
|
||||||
|
"active": False,
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
[misc]
|
||||||
|
completed_state = 13
|
||||||
|
smtp_server = xxx.xxx.ch
|
||||||
|
|
||||||
|
[custom_ged]
|
||||||
|
ged_folder = /my_mounting_point/ged/
|
||||||
|
|
||||||
|
[wkhtml2pdf]
|
||||||
|
lib_path = /xxx/xxx/lib/wkhtmltopdf-linux-i386-0-9-9
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
[external_service]
|
||||||
|
CONSTA = D01
|
||||||
|
CONSTB = 1
|
||||||
|
CONSTC = -23
|
||||||
|
|
||||||
|
|
||||||
|
[external_service.ftp]
|
||||||
|
server = 127.0.0.1
|
||||||
|
in_path = /in/
|
||||||
|
out_path= /out/
|
||||||
|
user = toto
|
||||||
|
password = my_dev_password
|
||||||
|
tls = 0
|
||||||
|
port = 8074
|
||||||
|
|
|
@ -0,0 +1,8 @@
|
||||||
|
[misc]
|
||||||
|
smtp_server = dev.xxx.xxx.ch
|
||||||
|
|
||||||
|
[custom_ged]
|
||||||
|
ged_folder = /tmp/ged/
|
||||||
|
|
||||||
|
[wkhtml2pdf]
|
||||||
|
lib_path = /myHome/lib/wkhtmltopdf-linux-i386-0-9-9
|
|
@ -0,0 +1,9 @@
|
||||||
|
[external_service]
|
||||||
|
CONSTC = -25
|
||||||
|
|
||||||
|
|
||||||
|
[external_service.ftp]
|
||||||
|
user = toto
|
||||||
|
password = toto
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
[external_service]
|
||||||
|
CONSTC = -25
|
||||||
|
|
||||||
|
|
||||||
|
[external_service.ftp]
|
||||||
|
user = toto
|
||||||
|
password = preprod_toto
|
|
@ -0,0 +1,8 @@
|
||||||
|
[misc]
|
||||||
|
smtp_server = prod.xxx.xxx.ch
|
||||||
|
|
||||||
|
[custom_ged]
|
||||||
|
ged_folder = /my_mounting_point/ged/
|
||||||
|
|
||||||
|
[wkhtml2pdf]
|
||||||
|
lib_path = /xxx/xxx/lib/wkhtmltopdf-linux-i386-0-9-9
|
|
@ -0,0 +1,14 @@
|
||||||
|
[external_service]
|
||||||
|
CONSTA = D01
|
||||||
|
CONSTB = 1
|
||||||
|
CONSTC = -23
|
||||||
|
|
||||||
|
|
||||||
|
[external_service.ftp]
|
||||||
|
server = my_prod_server
|
||||||
|
in_path = /in/
|
||||||
|
out_path= /out/
|
||||||
|
user = prod_user
|
||||||
|
password = my_prod_password
|
||||||
|
tls = 0
|
||||||
|
port = 21
|
Loading…
Reference in New Issue