Browse Source
Merge pull request #617 from acsone/9.0-server_env_ir_c_p-sbi
Merge pull request #617 from acsone/9.0-server_env_ir_c_p-sbi
[9.0][ADD] server_environment_ir_config_parameterpull/666/head
Guewen Baconnier
8 years ago
committed by
GitHub
12 changed files with 255 additions and 0 deletions
-
4server_environment_files_sample/dev/base.conf
-
85server_environment_ir_config_parameter/README.rst
-
1server_environment_ir_config_parameter/__init__.py
-
20server_environment_ir_config_parameter/__openerp__.py
-
1server_environment_ir_config_parameter/models/__init__.py
-
54server_environment_ir_config_parameter/models/ir_config_parameter.py
-
BINserver_environment_ir_config_parameter/static/description/icon.png
-
1server_environment_ir_config_parameter/tests/__init__.py
-
81server_environment_ir_config_parameter/tests/test_server_environment_ircp.py
-
1setup/server_environment_ir_config_parameter/odoo_addons/__init__.py
-
1setup/server_environment_ir_config_parameter/odoo_addons/server_environment_ir_config_parameter
-
6setup/server_environment_ir_config_parameter/setup.py
@ -0,0 +1,85 @@ |
|||
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg |
|||
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html |
|||
:alt: License: AGPL-3 |
|||
|
|||
====================================== |
|||
Server Environment Ir Config Parameter |
|||
====================================== |
|||
|
|||
Override System Parameters from server environment file. |
|||
Before using this module, you must be familiar with the |
|||
server_environment module. |
|||
|
|||
Installation |
|||
============ |
|||
|
|||
There is no specific installation instruction for this module. |
|||
|
|||
Configuration |
|||
============= |
|||
|
|||
To configure this module, you need to add a section ``[ir.config_parameter]`` to |
|||
you server_environment_files configurations, where the keys are the same |
|||
as would normally be set in the Systems Parameter Odoo menu. |
|||
|
|||
When first using a value, the system will read it from the configuration file |
|||
and override any value that would be present in the database, so the configuration |
|||
file has precedence. |
|||
|
|||
When creating or modifying values that are in the configuration file, the |
|||
module replace changes, enforcing the configuration value. |
|||
|
|||
For example you can use this module in combination with web_environment_ribbon: |
|||
|
|||
.. code:: |
|||
|
|||
[ir.config_parameter] |
|||
ribbon.name=DEV |
|||
|
|||
.. image:: https://odoo-community.org/website/image/ir.attachment/5784_f2813bd/datas |
|||
:alt: Try me on Runbot |
|||
:target: https://runbot.odoo-community.org/runbot/149/9.0 |
|||
|
|||
Known issues / Roadmap |
|||
====================== |
|||
|
|||
* When the user modifies System Parameters that are defined in the config |
|||
file, the changes are ignored. It would be nice to display which system |
|||
parameters come from the config file and possibly make their key and value |
|||
readonly in the user interface. |
|||
|
|||
Bug Tracker |
|||
=========== |
|||
|
|||
Bugs are tracked on `GitHub Issues |
|||
<https://github.com/OCA/server-tools/issues>`_. In case of trouble, please |
|||
check there if your issue has already been reported. If you spotted it first, |
|||
help us smashing it by providing a detailed and welcomed feedback. |
|||
|
|||
Credits |
|||
======= |
|||
|
|||
Images |
|||
------ |
|||
|
|||
* Odoo Community Association: `Icon <https://github.com/OCA/maintainer-tools/blob/master/template/module/static/description/icon.svg>`_. |
|||
|
|||
Contributors |
|||
------------ |
|||
|
|||
* Stéphane Bidoul <stephane.bidoul@acsone.eu> |
|||
|
|||
Maintainer |
|||
---------- |
|||
|
|||
.. image:: https://odoo-community.org/logo.png |
|||
:alt: Odoo Community Association |
|||
:target: https://odoo-community.org |
|||
|
|||
This module is maintained by the OCA. |
|||
|
|||
OCA, or the Odoo Community Association, is a nonprofit organization whose |
|||
mission is to support the collaborative development of Odoo features and |
|||
promote its widespread use. |
|||
|
|||
To contribute to this module, please visit https://odoo-community.org. |
@ -0,0 +1 @@ |
|||
from . import models |
@ -0,0 +1,20 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2016 ACSONE SA/NV |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
{ |
|||
'name': 'Server Environment Ir Config Parameter', |
|||
'summary': """ |
|||
Override System Parameters from server environment file""", |
|||
'version': '9.0.1.0.0', |
|||
'license': 'AGPL-3', |
|||
'author': 'ACSONE SA/NV,Odoo Community Association (OCA)', |
|||
'website': 'https://odoo-community.org/', |
|||
'depends': [ |
|||
'server_environment', |
|||
], |
|||
'data': [ |
|||
], |
|||
'demo': [ |
|||
], |
|||
} |
@ -0,0 +1 @@ |
|||
from . import ir_config_parameter |
@ -0,0 +1,54 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2016 ACSONE SA/NV |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
from openerp import api, models, _, SUPERUSER_ID |
|||
from openerp.exceptions import UserError |
|||
from openerp.addons.server_environment import serv_config |
|||
|
|||
|
|||
SECTION = 'ir.config_parameter' |
|||
|
|||
|
|||
class IrConfigParameter(models.Model): |
|||
|
|||
_inherit = 'ir.config_parameter' |
|||
|
|||
def get_param(self, cr, uid, key, default=False, context=None): |
|||
value = super(IrConfigParameter, self).get_param( |
|||
cr, uid, key, default=None, context=context) |
|||
if serv_config.has_option(SECTION, key): |
|||
cvalue = serv_config.get(SECTION, key) |
|||
if not cvalue: |
|||
raise UserError(_("Key %s is empty in " |
|||
"server_environment_file") % |
|||
(key, )) |
|||
if cvalue != value: |
|||
# we write in db on first access; |
|||
# should we have preloaded values in database at, |
|||
# server startup, modules loading their parameters |
|||
# from data files would break on unique key error. |
|||
self.set_param(cr, SUPERUSER_ID, key, cvalue) |
|||
value = cvalue |
|||
if value is None: |
|||
return default |
|||
return value |
|||
|
|||
@api.model |
|||
def create(self, vals): |
|||
key = vals.get('key') |
|||
if serv_config.has_option(SECTION, key): |
|||
# enforce value from config file |
|||
vals = dict(vals, value=serv_config.get(SECTION, key)) |
|||
return super(IrConfigParameter, self).create(vals) |
|||
|
|||
@api.multi |
|||
def write(self, vals): |
|||
for rec in self: |
|||
key = vals.get('key') or rec.key |
|||
if serv_config.has_option(SECTION, key): |
|||
# enforce value from config file |
|||
newvals = dict(vals, value=serv_config.get(SECTION, key)) |
|||
else: |
|||
newvals = vals |
|||
super(IrConfigParameter, rec).write(newvals) |
After Width: 128 | Height: 128 | Size: 9.2 KiB |
@ -0,0 +1 @@ |
|||
from . import test_server_environment_ircp |
@ -0,0 +1,81 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2016 ACSONE SA/NV |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
from cStringIO import StringIO |
|||
|
|||
from openerp.exceptions import UserError |
|||
from openerp.tests import common |
|||
from openerp.tools import convert |
|||
|
|||
|
|||
class TestEnv(common.TransactionCase): |
|||
|
|||
def setUp(self): |
|||
super(TestEnv, self).setUp() |
|||
self.ICP = self.env['ir.config_parameter'] |
|||
|
|||
def test_get_param(self): |
|||
""" Get system parameter from config """ |
|||
# it's not in db |
|||
res = self.ICP.search([('key', '=', 'ircp_from_config')]) |
|||
self.assertFalse(res) |
|||
# read so it's created in db |
|||
value = self.ICP.get_param('ircp_from_config') |
|||
self.assertEqual(value, 'config_value') |
|||
# now it's in db |
|||
res = self.ICP.search([('key', '=', 'ircp_from_config')]) |
|||
self.assertEqual(len(res), 1) |
|||
self.assertEqual(res.value, 'config_value') |
|||
|
|||
def test_set_param_1(self): |
|||
""" We can't set parameters that are in config file """ |
|||
# when creating, the value is overridden by config file |
|||
self.ICP.set_param('ircp_from_config', 'new_value') |
|||
value = self.ICP.get_param('ircp_from_config') |
|||
self.assertEqual(value, 'config_value') |
|||
# when writing, the value is overridden by config file |
|||
res = self.ICP.search([('key', '=', 'ircp_from_config')]) |
|||
self.assertEqual(len(res), 1) |
|||
res.write({'value': 'new_value'}) |
|||
value = self.ICP.get_param('ircp_from_config') |
|||
self.assertEqual(value, 'config_value') |
|||
# unlink works normally... |
|||
res = self.ICP.search([('key', '=', 'ircp_from_config')]) |
|||
self.assertEqual(len(res), 1) |
|||
res.unlink() |
|||
res = self.ICP.search([('key', '=', 'ircp_from_config')]) |
|||
self.assertEqual(len(res), 0) |
|||
# but the value is recreated when getting param again |
|||
value = self.ICP.get_param('ircp_from_config') |
|||
self.assertEqual(value, 'config_value') |
|||
res = self.ICP.search([('key', '=', 'ircp_from_config')]) |
|||
self.assertEqual(len(res), 1) |
|||
|
|||
def test_set_param_2(self): |
|||
""" We can set parameters that are not in config file """ |
|||
self.ICP.set_param('some.param', 'new_value') |
|||
self.assertEqual(self.ICP.get_param('some.param'), 'new_value') |
|||
res = self.ICP.search([('key', '=', 'some.param')]) |
|||
res.unlink() |
|||
res = self.ICP.search([('key', '=', 'some.param')]) |
|||
self.assertFalse(res) |
|||
|
|||
def test_empty(self): |
|||
""" Empty config values cause error """ |
|||
with self.assertRaises(UserError): |
|||
self.ICP.get_param('ircp_empty') |
|||
self.assertEqual(self.ICP.get_param('ircp_nonexistant'), False) |
|||
|
|||
def test_override_xmldata(self): |
|||
xml = """<odoo> |
|||
<data> |
|||
<record model="ir.config_parameter" id="some_record_id"> |
|||
<field name="key">ircp_from_config</field> |
|||
<field name="value">value_from_xml</field> |
|||
</record> |
|||
</data> |
|||
</odoo>""" |
|||
convert.convert_xml_import(self.env.cr, 'testmodule', StringIO(xml)) |
|||
value = self.ICP.get_param('ircp_from_config') |
|||
self.assertEqual(value, 'config_value') |
@ -0,0 +1 @@ |
|||
__import__('pkg_resources').declare_namespace(__name__) |
@ -0,0 +1 @@ |
|||
../../../server_environment_ir_config_parameter |
@ -0,0 +1,6 @@ |
|||
import setuptools |
|||
|
|||
setuptools.setup( |
|||
setup_requires=['setuptools-odoo'], |
|||
odoo_addon=True, |
|||
) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue