Browse Source

server_environment_ir_config_parameter

pull/640/head
Stéphane Bidoul (ACSONE) 8 years ago
parent
commit
4da7d84c99
No known key found for this signature in database GPG Key ID: 866D394B4986F82D
  1. 3
      server_environment_files_sample/dev/base.conf
  2. 82
      server_environment_ir_config_parameter/README.rst
  3. 1
      server_environment_ir_config_parameter/__init__.py
  4. 20
      server_environment_ir_config_parameter/__openerp__.py
  5. 1
      server_environment_ir_config_parameter/models/__init__.py
  6. 59
      server_environment_ir_config_parameter/models/ir_config_parameter.py
  7. BIN
      server_environment_ir_config_parameter/static/description/icon.png
  8. 1
      server_environment_ir_config_parameter/tests/__init__.py
  9. 51
      server_environment_ir_config_parameter/tests/test_server_environment_ircp.py

3
server_environment_files_sample/dev/base.conf

@ -6,3 +6,6 @@ ged_folder = /tmp/ged/
[wkhtml2pdf] [wkhtml2pdf]
lib_path = /myHome/lib/wkhtmltopdf-linux-i386-0-9-9 lib_path = /myHome/lib/wkhtmltopdf-linux-i386-0-9-9
[ir.config_parameter]
ircp_from_config=config_value

82
server_environment_ir_config_parameter/README.rst

@ -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.

1
server_environment_ir_config_parameter/__init__.py

@ -0,0 +1 @@
from . import models

20
server_environment_ir_config_parameter/__openerp__.py

@ -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': [
],
}

1
server_environment_ir_config_parameter/models/__init__.py

@ -0,0 +1 @@
from . import ir_config_parameter

59
server_environment_ir_config_parameter/models/ir_config_parameter.py

@ -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()

BIN
server_environment_ir_config_parameter/static/description/icon.png

After

Width: 128  |  Height: 128  |  Size: 9.2 KiB

1
server_environment_ir_config_parameter/tests/__init__.py

@ -0,0 +1 @@
from . import test_server_environment_ircp

51
server_environment_ir_config_parameter/tests/test_server_environment_ircp.py

@ -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)
Loading…
Cancel
Save