Stéphane Bidoul (ACSONE)
8 years ago
No known key found for this signature in database
GPG Key ID: 866D394B4986F82D
9 changed files with 218 additions and 0 deletions
-
3server_environment_files_sample/dev/base.conf
-
82server_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
-
59server_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
-
51server_environment_ir_config_parameter/tests/test_server_environment_ircp.py
@ -0,0 +1,82 @@ |
|||
.. 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. |
|||
|
|||
The user cannot write, create, or delete System Parameters that are defined in the |
|||
configuration files. |
|||
|
|||
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 |
|||
====================== |
|||
|
|||
N/A |
|||
|
|||
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,59 @@ |
|||
# -*- 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.tools import ormcache |
|||
from openerp.addons.server_environment import serv_config |
|||
|
|||
|
|||
SECTION = 'ir.config_parameter' |
|||
CTX_NO_CHECK = 'icp_no_check' |
|||
|
|||
|
|||
class IrConfigParameter(models.Model): |
|||
|
|||
_inherit = 'ir.config_parameter' |
|||
|
|||
@ormcache('uid', 'key') |
|||
def _get_param(self, cr, uid, key): |
|||
value = super(IrConfigParameter, self)._get_param(cr, uid, key) |
|||
if serv_config.has_option(SECTION, key): |
|||
cvalue = serv_config.get(SECTION, 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, |
|||
context={CTX_NO_CHECK: True}) |
|||
return cvalue |
|||
return value |
|||
|
|||
def _check_not_in_config(self, keys): |
|||
if self.env.context.get(CTX_NO_CHECK): |
|||
return |
|||
if not serv_config.has_section(SECTION): |
|||
return |
|||
config_icp_keys = set(serv_config.options(SECTION)) & set(keys) |
|||
if config_icp_keys: |
|||
raise UserError(_("System Parameter(s) %s is/are defined " |
|||
"in server_environment_files.") % |
|||
(config_icp_keys, )) |
|||
|
|||
@api.model |
|||
def create(self, vals): |
|||
self._check_not_in_config([vals.get('key')]) |
|||
return super(IrConfigParameter, self).create(vals) |
|||
|
|||
@api.multi |
|||
def write(self, vals): |
|||
self._check_not_in_config(self.mapped('key')) |
|||
return super(IrConfigParameter, self).write(vals) |
|||
|
|||
@api.multi |
|||
def unlink(self): |
|||
self._check_not_in_config(self.mapped('key')) |
|||
return super(IrConfigParameter, self).unlink() |
After Width: 128 | Height: 128 | Size: 9.2 KiB |
@ -0,0 +1 @@ |
|||
from . import test_server_environment_ircp |
@ -0,0 +1,51 @@ |
|||
# -*- coding: utf-8 -*- |
|||
# Copyright 2016 ACSONE SA/NV |
|||
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). |
|||
|
|||
from openerp.exceptions import UserError |
|||
from openerp.tests import common |
|||
|
|||
|
|||
class TestEnv(common.SavepointCase): |
|||
|
|||
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 """ |
|||
# create |
|||
with self.assertRaises(UserError): |
|||
self.ICP.set_param('ircp_from_config', 'new_value') |
|||
# read so it's created in db |
|||
self.ICP.get_param('ircp_from_config') |
|||
# write |
|||
res = self.ICP.search([('key', '=', 'ircp_from_config')]) |
|||
self.assertEqual(len(res), 1) |
|||
with self.assertRaises(UserError): |
|||
res.write({'ircp_from_config': 'new_value'}) |
|||
# unlink |
|||
with self.assertRaises(UserError): |
|||
res.unlink() |
|||
|
|||
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) |
Write
Preview
Loading…
Cancel
Save
Reference in new issue