-
-
Notifications
You must be signed in to change notification settings - Fork 1.5k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[9.0][ADD] server_environment_ir_config_parameter #617
Merged
Merged
Changes from all commits
Commits
Show all changes
5 commits
Select commit
Hold shift + click to select a range
5ed39e7
[ADD] server_environment_ir_config_parameter
sbidoul 06df99d
[FIX] server_environment_ir_config_parameter: work around double ormc…
sbidoul 126f83f
[IMP] server_environment_ir_config_parameter: handle empty values better
sbidoul f9d8462
[FIX] server_environment_ir_config_param: silently replace values by …
sbidoul 23949dd
[IMP] server_environment_ir_config_parameter: update roadmap
sbidoul File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
from . import models |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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': [ | ||
], | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
from . import ir_config_parameter |
54 changes: 54 additions & 0 deletions
54
server_environment_ir_config_parameter/models/ir_config_parameter.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
from . import test_server_environment_ircp |
81 changes: 81 additions & 0 deletions
81
server_environment_ir_config_parameter/tests/test_server_environment_ircp.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 change: 1 addition & 0 deletions
1
setup/server_environment_ir_config_parameter/odoo_addons/__init__.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
__import__('pkg_resources').declare_namespace(__name__) |
1 change: 1 addition & 0 deletions
1
...server_environment_ir_config_parameter/odoo_addons/server_environment_ir_config_parameter
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
../../../server_environment_ir_config_parameter |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
import setuptools | ||
|
||
setuptools.setup( | ||
setup_requires=['setuptools-odoo'], | ||
odoo_addon=True, | ||
) |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
default=default
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
default=None
is on purpose. The test for default value is at the end of the method.