Browse Source

Merge pull request #617 from acsone/9.0-server_env_ir_c_p-sbi

[9.0][ADD] server_environment_ir_config_parameter
pull/666/head
Guewen Baconnier 8 years ago
committed by GitHub
parent
commit
1aadfc7273
  1. 4
      server_environment_files_sample/dev/base.conf
  2. 85
      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. 54
      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. 81
      server_environment_ir_config_parameter/tests/test_server_environment_ircp.py
  10. 1
      setup/server_environment_ir_config_parameter/odoo_addons/__init__.py
  11. 1
      setup/server_environment_ir_config_parameter/odoo_addons/server_environment_ir_config_parameter
  12. 6
      setup/server_environment_ir_config_parameter/setup.py

4
server_environment_files_sample/dev/base.conf

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

85
server_environment_ir_config_parameter/README.rst

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

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

54
server_environment_ir_config_parameter/models/ir_config_parameter.py

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

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

81
server_environment_ir_config_parameter/tests/test_server_environment_ircp.py

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

1
setup/server_environment_ir_config_parameter/odoo_addons/__init__.py

@ -0,0 +1 @@
__import__('pkg_resources').declare_namespace(__name__)

1
setup/server_environment_ir_config_parameter/odoo_addons/server_environment_ir_config_parameter

@ -0,0 +1 @@
../../../server_environment_ir_config_parameter

6
setup/server_environment_ir_config_parameter/setup.py

@ -0,0 +1,6 @@
import setuptools
setuptools.setup(
setup_requires=['setuptools-odoo'],
odoo_addon=True,
)
Loading…
Cancel
Save