This commit is contained in:
Marcos Oitabén Fernández 2024-01-08 10:22:45 +01:00 committed by GitHub
commit 8546310d21
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
24 changed files with 1200 additions and 0 deletions

View File

@ -0,0 +1,121 @@
======================================
Server Environment Ir Config Parameter
======================================
..
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:29c97aeb304203d7c075a8ff1295720253ea06b1f8d4fc57ef0fa71b45f3a38b
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
:target: https://odoo-community.org/page/development-status
:alt: Beta
.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3
.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--env-lightgray.png?logo=github
:target: https://github.com/OCA/server-env/tree/17.0/server_environment_ir_config_parameter
:alt: OCA/server-env
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
:target: https://translation.odoo-community.org/projects/server-env-17-0/server-env-17-0-server_environment_ir_config_parameter
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
:target: https://runboat.odoo-community.org/builds?repo=OCA/server-env&target_branch=17.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
Override System Parameters from server environment file.
**Table of contents**
.. contents::
:local:
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:
::
[ir.config_parameter]
ribbon.name=DEV
Usage
=====
Before using this module, you must be familiar with the
server_environment module.
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-env/issues>`_.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
`feedback <https://github.com/OCA/server-env/issues/new?body=module:%20server_environment_ir_config_parameter%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**>`_.
Do not contact contributors directly about support or help with technical issues.
Credits
=======
Authors
-------
* ACSONE SA/NV
Contributors
------------
- Stéphane Bidoul <stephane.bidoul@acsone.eu> (https://acsone.eu)
- Thierry Ducrest <thierry.ducrest@camptocamp.com>
- Gilles Meyomesse <gilles.meyomesse@acsone.eu> (https://acsone.eu)
- Sylvain LE GAL (https://www.twitter.com/legalsylvain)
Other credits
-------------
This module is maintained by: \* Odoo Community Association
Maintainers
-----------
This module is maintained by the OCA.
.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org
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.
This module is part of the `OCA/server-env <https://github.com/OCA/server-env/tree/17.0/server_environment_ir_config_parameter>`_ project on GitHub.
You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

View File

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

View File

@ -0,0 +1,16 @@
# Copyright 2016-2018 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": "17.0.1.0.0",
"license": "AGPL-3",
"author": "ACSONE SA/NV, Odoo Community Association (OCA)",
"website": "https://github.com/OCA/server-env",
"depends": ["server_environment"],
"data": [
"views/view_ir_config_parameter.xml",
],
}

View File

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * server_environment_ir_config_parameter
#
# Translators:
# Niki Waibel <niki.waibel@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-22 01:12+0000\n"
"PO-Revision-Date: 2017-06-22 01:12+0000\n"
"Last-Translator: Niki Waibel <niki.waibel@gmail.com>, 2017\n"
"Language-Team: German (https://www.transifex.com/oca/teams/23907/de/)\n"
"Language: de\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,field_description:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid "Defined by environment"
msgstr ""
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,help:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid ""
"If check, the value in the database will be ignored and alternatively, the "
"system will use the key defined in your odoo.cfg environment file."
msgstr ""
#. module: server_environment_ir_config_parameter
#. odoo-python
#: code:addons/server_environment_ir_config_parameter/models/ir_config_parameter.py:0
#, python-format
msgid "Key %s is empty in server_environment_file"
msgstr ""
#. module: server_environment_ir_config_parameter
#: model:ir.model,name:server_environment_ir_config_parameter.model_ir_config_parameter
msgid "System Parameter"
msgstr ""
#~ msgid "ir.config_parameter"
#~ msgstr "ir.config_parameter"

View File

@ -0,0 +1,49 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * server_environment_ir_config_parameter
#
# Translators:
# Pedro M. Baeza <pedro.baeza@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-22 01:12+0000\n"
"PO-Revision-Date: 2023-07-25 13:10+0000\n"
"Last-Translator: Ivorra78 <informatica@totmaterial.es>\n"
"Language-Team: Spanish (https://www.transifex.com/oca/teams/23907/es/)\n"
"Language: es\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
"X-Generator: Weblate 4.17\n"
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,field_description:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid "Defined by environment"
msgstr "Definido por el entorno"
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,help:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid ""
"If check, the value in the database will be ignored and alternatively, the "
"system will use the key defined in your odoo.cfg environment file."
msgstr ""
"Si se marca, el valor en la base de datos será ignorado y alternativamente, "
"el sistema utilizará la clave definida en su archivo de entorno odoo.cfg."
#. module: server_environment_ir_config_parameter
#. odoo-python
#: code:addons/server_environment_ir_config_parameter/models/ir_config_parameter.py:0
#, python-format
msgid "Key %s is empty in server_environment_file"
msgstr "La clave %s está vacía en server_environment_file"
#. module: server_environment_ir_config_parameter
#: model:ir.model,name:server_environment_ir_config_parameter.model_ir_config_parameter
msgid "System Parameter"
msgstr "Parámetros del sistema"
#~ msgid "ir.config_parameter"
#~ msgstr "ir.config_parameter"

View File

@ -0,0 +1,46 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * server_environment_ir_config_parameter
#
# Translators:
# Paolo Valier <paolo.valier@hotmail.it>, 2018
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2018-01-06 02:25+0000\n"
"PO-Revision-Date: 2018-01-06 02:25+0000\n"
"Last-Translator: Paolo Valier <paolo.valier@hotmail.it>, 2018\n"
"Language-Team: Italian (https://www.transifex.com/oca/teams/23907/it/)\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,field_description:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid "Defined by environment"
msgstr ""
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,help:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid ""
"If check, the value in the database will be ignored and alternatively, the "
"system will use the key defined in your odoo.cfg environment file."
msgstr ""
#. module: server_environment_ir_config_parameter
#. odoo-python
#: code:addons/server_environment_ir_config_parameter/models/ir_config_parameter.py:0
#, python-format
msgid "Key %s is empty in server_environment_file"
msgstr ""
#. module: server_environment_ir_config_parameter
#: model:ir.model,name:server_environment_ir_config_parameter.model_ir_config_parameter
msgid "System Parameter"
msgstr ""
#~ msgid "ir.config_parameter"
#~ msgstr "ir.config_parameter"

View File

@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * server_environment_ir_config_parameter
#
# Translators:
# Peter Hageman <hageman.p@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-06-22 01:12+0000\n"
"PO-Revision-Date: 2017-06-22 01:12+0000\n"
"Last-Translator: Peter Hageman <hageman.p@gmail.com>, 2017\n"
"Language-Team: Dutch (Netherlands) (https://www.transifex.com/oca/"
"teams/23907/nl_NL/)\n"
"Language: nl_NL\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,field_description:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid "Defined by environment"
msgstr ""
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,help:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid ""
"If check, the value in the database will be ignored and alternatively, the "
"system will use the key defined in your odoo.cfg environment file."
msgstr ""
#. module: server_environment_ir_config_parameter
#. odoo-python
#: code:addons/server_environment_ir_config_parameter/models/ir_config_parameter.py:0
#, python-format
msgid "Key %s is empty in server_environment_file"
msgstr "sleutel %s is leeg in server_environment_file"
#. module: server_environment_ir_config_parameter
#: model:ir.model,name:server_environment_ir_config_parameter.model_ir_config_parameter
msgid "System Parameter"
msgstr ""
#~ msgid "ir.config_parameter"
#~ msgstr "ir.config_parameter"

View File

@ -0,0 +1,47 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * server_environment_ir_config_parameter
#
# Translators:
# Dorin Hongu <dhongu@gmail.com>, 2017
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 10.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2017-12-16 02:17+0000\n"
"PO-Revision-Date: 2017-12-16 02:17+0000\n"
"Last-Translator: Dorin Hongu <dhongu@gmail.com>, 2017\n"
"Language-Team: Romanian (https://www.transifex.com/oca/teams/23907/ro/)\n"
"Language: ro\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?"
"2:1));\n"
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,field_description:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid "Defined by environment"
msgstr ""
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,help:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid ""
"If check, the value in the database will be ignored and alternatively, the "
"system will use the key defined in your odoo.cfg environment file."
msgstr ""
#. module: server_environment_ir_config_parameter
#. odoo-python
#: code:addons/server_environment_ir_config_parameter/models/ir_config_parameter.py:0
#, python-format
msgid "Key %s is empty in server_environment_file"
msgstr ""
#. module: server_environment_ir_config_parameter
#: model:ir.model,name:server_environment_ir_config_parameter.model_ir_config_parameter
msgid "System Parameter"
msgstr ""
#~ msgid "ir.config_parameter"
#~ msgstr "ir.config_parameter"

View File

@ -0,0 +1,38 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * server_environment_ir_config_parameter
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 16.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,field_description:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid "Defined by environment"
msgstr ""
#. module: server_environment_ir_config_parameter
#: model:ir.model.fields,help:server_environment_ir_config_parameter.field_ir_config_parameter__is_environment
msgid ""
"If check, the value in the database will be ignored and alternatively, the "
"system will use the key defined in your odoo.cfg environment file."
msgstr ""
#. module: server_environment_ir_config_parameter
#. odoo-python
#: code:addons/server_environment_ir_config_parameter/models/ir_config_parameter.py:0
#, python-format
msgid "Key %s is empty in server_environment_file"
msgstr ""
#. module: server_environment_ir_config_parameter
#: model:ir.model,name:server_environment_ir_config_parameter.model_ir_config_parameter
msgid "System Parameter"
msgstr ""

View File

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

View File

@ -0,0 +1,75 @@
# Copyright 2016-2018 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from odoo import _, api, fields, models
from odoo.exceptions import UserError
from odoo.addons.server_environment.server_env import serv_config
SECTION = "ir.config_parameter"
class IrConfigParameter(models.Model):
_inherit = "ir.config_parameter"
is_environment = fields.Boolean(
string="Defined by environment",
compute="_compute_is_environment",
help="If check, the value in the database will be ignored"
" and alternatively, the system will use the key defined"
" in your odoo.cfg environment file.",
)
def _compute_is_environment(self):
for parameter in self:
parameter.is_environment = serv_config.has_option(SECTION, parameter.key)
@api.model
def get_param(self, key, default=False):
value = super().get_param(key, default=None)
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.
if not self.env.context.get("_from_get_param", 0):
# the check is to avoid recursion, for instance the mail
# addon has an override in ir.config_parameter::write which
# calls get_param if we are setting mail.catchall.alias and
# this will cause an infinite recursion. We cut that
# recursion by using the context check.
#
# The mail addon call to get_param expects to get the value
# *before* the change, so we have to return the database
# value in that case
self.sudo().with_context(_from_get_param=1).set_param(key, cvalue)
value = cvalue
if value is None:
return default
return value
@api.model_create_multi
def create(self, vals_list):
for vals in vals_list:
key = vals.get("key")
if key and serv_config.has_option(SECTION, key):
# enforce value from config file
vals.update(value=serv_config.get(SECTION, key))
return super().create(vals_list)
def write(self, vals):
for rec in self:
key = vals.get("key", 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)
return True

View File

@ -0,0 +1,3 @@
[build-system]
requires = ["whool"]
build-backend = "whool.buildapi"

View File

@ -0,0 +1,19 @@
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:
```
[ir.config_parameter]
ribbon.name=DEV
```

View File

@ -0,0 +1,5 @@
- Stéphane Bidoul \<<stephane.bidoul@acsone.eu>\> (<https://acsone.eu>)
- Thierry Ducrest \<<thierry.ducrest@camptocamp.com>\>
- Gilles Meyomesse \<<gilles.meyomesse@acsone.eu>\>
(<https://acsone.eu>)
- Sylvain LE GAL (<https://www.twitter.com/legalsylvain>)

View File

@ -0,0 +1 @@
This module is maintained by: \* Odoo Community Association

View File

@ -0,0 +1 @@
Override System Parameters from server environment file.

View File

@ -0,0 +1,4 @@
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.

View File

@ -0,0 +1,2 @@
Before using this module, you must be familiar with the
server_environment module.

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.2 KiB

View File

@ -0,0 +1,462 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="generator" content="Docutils: https://docutils.sourceforge.io/" />
<title>Server Environment Ir Config Parameter</title>
<style type="text/css">
/*
:Author: David Goodger (goodger@python.org)
:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
*/
/* used to remove borders from tables and images */
.borderless, table.borderless td, table.borderless th {
border: 0 }
table.borderless td, table.borderless th {
/* Override padding for "table.docutils td" with "! important".
The right padding separates the table cells. */
padding: 0 0.5em 0 0 ! important }
.first {
/* Override more specific margin styles with "! important". */
margin-top: 0 ! important }
.last, .with-subtitle {
margin-bottom: 0 ! important }
.hidden {
display: none }
.subscript {
vertical-align: sub;
font-size: smaller }
.superscript {
vertical-align: super;
font-size: smaller }
a.toc-backref {
text-decoration: none ;
color: black }
blockquote.epigraph {
margin: 2em 5em ; }
dl.docutils dd {
margin-bottom: 0.5em }
object[type="image/svg+xml"], object[type="application/x-shockwave-flash"] {
overflow: hidden;
}
/* Uncomment (and remove this text!) to get bold-faced definition list terms
dl.docutils dt {
font-weight: bold }
*/
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.admonition, div.attention, div.caution, div.danger, div.error,
div.hint, div.important, div.note, div.tip, div.warning {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.admonition p.admonition-title, div.hint p.admonition-title,
div.important p.admonition-title, div.note p.admonition-title,
div.tip p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title, .code .error {
color: red ;
font-weight: bold ;
font-family: sans-serif }
/* Uncomment (and remove this text!) to get reduced vertical space in
compound paragraphs.
div.compound .compound-first, div.compound .compound-middle {
margin-bottom: 0.5em }
div.compound .compound-last, div.compound .compound-middle {
margin-top: 0.5em }
*/
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em ;
margin-right: 2em }
div.footer, div.header {
clear: both;
font-size: smaller }
div.line-block {
display: block ;
margin-top: 1em ;
margin-bottom: 1em }
div.line-block div.line-block {
margin-top: 0 ;
margin-bottom: 0 ;
margin-left: 1.5em }
div.sidebar {
margin: 0 0 0.5em 1em ;
border: medium outset ;
padding: 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
margin-top: 0.4em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr.docutils {
width: 75% }
img.align-left, .figure.align-left, object.align-left, table.align-left {
clear: left ;
float: left ;
margin-right: 1em }
img.align-right, .figure.align-right, object.align-right, table.align-right {
clear: right ;
float: right ;
margin-left: 1em }
img.align-center, .figure.align-center, object.align-center {
display: block;
margin-left: auto;
margin-right: auto;
}
table.align-center {
margin-left: auto;
margin-right: auto;
}
.align-left {
text-align: left }
.align-center {
clear: both ;
text-align: center }
.align-right {
text-align: right }
/* reset inner alignment in figures */
div.align-right {
text-align: inherit }
/* div.align-center * { */
/* text-align: left } */
.align-top {
vertical-align: top }
.align-middle {
vertical-align: middle }
.align-bottom {
vertical-align: bottom }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font: inherit }
pre.literal-block, pre.doctest-block, pre.math, pre.code {
margin-left: 2em ;
margin-right: 2em }
pre.code .ln { color: grey; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
pre.code .literal.string, code .literal.string { color: #0C5404 }
pre.code .name.builtin, code .name.builtin { color: #352B84 }
pre.code .deleted, code .deleted { background-color: #DEB0A1}
pre.code .inserted, code .inserted { background-color: #A3D289}
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.pre {
white-space: pre }
span.problematic {
color: red }
span.section-subtitle {
/* font-size relative to parent (h1..h6 element) */
font-size: 80% }
table.citation {
border-left: solid 1px gray;
margin-left: 1px }
table.docinfo {
margin: 2em 4em }
table.docutils {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.footnote {
border-left: solid 1px black;
margin-left: 1px }
table.docutils td, table.docutils th,
table.docinfo td, table.docinfo th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
table.docutils th.field-name, table.docinfo th.docinfo-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap ;
padding-left: 0 }
/* "booktabs" style (no vertical lines) */
table.docutils.booktabs {
border: 0px;
border-top: 2px solid;
border-bottom: 2px solid;
border-collapse: collapse;
}
table.docutils.booktabs * {
border: 0px;
}
table.docutils.booktabs th {
border-bottom: thin solid;
text-align: left;
}
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
font-size: 100% }
ul.auto-toc {
list-style-type: none }
</style>
</head>
<body>
<div class="document" id="server-environment-ir-config-parameter">
<h1 class="title">Server Environment Ir Config Parameter</h1>
<!-- !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!! source digest: sha256:29c97aeb304203d7c075a8ff1295720253ea06b1f8d4fc57ef0fa71b45f3a38b
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Beta" src="https://img.shields.io/badge/maturity-Beta-yellow.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/agpl-3.0-standalone.html"><img alt="License: AGPL-3" src="https://img.shields.io/badge/licence-AGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/server-env/tree/17.0/server_environment_ir_config_parameter"><img alt="OCA/server-env" src="https://img.shields.io/badge/github-OCA%2Fserver--env-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-env-17-0/server-env-17-0-server_environment_ir_config_parameter"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/server-env&amp;target_branch=17.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
<p>Override System Parameters from server environment file.</p>
<p><strong>Table of contents</strong></p>
<div class="contents local topic" id="contents">
<ul class="simple">
<li><a class="reference internal" href="#configuration" id="toc-entry-1">Configuration</a></li>
<li><a class="reference internal" href="#usage" id="toc-entry-2">Usage</a></li>
<li><a class="reference internal" href="#known-issues-roadmap" id="toc-entry-3">Known issues / Roadmap</a></li>
<li><a class="reference internal" href="#bug-tracker" id="toc-entry-4">Bug Tracker</a></li>
<li><a class="reference internal" href="#credits" id="toc-entry-5">Credits</a><ul>
<li><a class="reference internal" href="#authors" id="toc-entry-6">Authors</a></li>
<li><a class="reference internal" href="#contributors" id="toc-entry-7">Contributors</a></li>
<li><a class="reference internal" href="#other-credits" id="toc-entry-8">Other credits</a></li>
<li><a class="reference internal" href="#maintainers" id="toc-entry-9">Maintainers</a></li>
</ul>
</li>
</ul>
</div>
<div class="section" id="configuration">
<h1><a class="toc-backref" href="#toc-entry-1">Configuration</a></h1>
<p>To configure this module, you need to add a section
<tt class="docutils literal">[ir.config_parameter]</tt> to you server_environment_files
configurations, where the keys are the same as would normally be set in
the Systems Parameter Odoo menu.</p>
<p>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.</p>
<p>When creating or modifying values that are in the configuration file,
the module replace changes, enforcing the configuration value.</p>
<p>For example you can use this module in combination with
web_environment_ribbon:</p>
<pre class="literal-block">
[ir.config_parameter]
ribbon.name=DEV
</pre>
</div>
<div class="section" id="usage">
<h1><a class="toc-backref" href="#toc-entry-2">Usage</a></h1>
<p>Before using this module, you must be familiar with the
server_environment module.</p>
</div>
<div class="section" id="known-issues-roadmap">
<h1><a class="toc-backref" href="#toc-entry-3">Known issues / Roadmap</a></h1>
<p>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.</p>
</div>
<div class="section" id="bug-tracker">
<h1><a class="toc-backref" href="#toc-entry-4">Bug Tracker</a></h1>
<p>Bugs are tracked on <a class="reference external" href="https://github.com/OCA/server-env/issues">GitHub Issues</a>.
In case of trouble, please check there if your issue has already been reported.
If you spotted it first, help us to smash it by providing a detailed and welcomed
<a class="reference external" href="https://github.com/OCA/server-env/issues/new?body=module:%20server_environment_ir_config_parameter%0Aversion:%2017.0%0A%0A**Steps%20to%20reproduce**%0A-%20...%0A%0A**Current%20behavior**%0A%0A**Expected%20behavior**">feedback</a>.</p>
<p>Do not contact contributors directly about support or help with technical issues.</p>
</div>
<div class="section" id="credits">
<h1><a class="toc-backref" href="#toc-entry-5">Credits</a></h1>
<div class="section" id="authors">
<h2><a class="toc-backref" href="#toc-entry-6">Authors</a></h2>
<ul class="simple">
<li>ACSONE SA/NV</li>
</ul>
</div>
<div class="section" id="contributors">
<h2><a class="toc-backref" href="#toc-entry-7">Contributors</a></h2>
<ul class="simple">
<li>Stéphane Bidoul &lt;<a class="reference external" href="mailto:stephane.bidoul&#64;acsone.eu">stephane.bidoul&#64;acsone.eu</a>&gt; (<a class="reference external" href="https://acsone.eu">https://acsone.eu</a>)</li>
<li>Thierry Ducrest &lt;<a class="reference external" href="mailto:thierry.ducrest&#64;camptocamp.com">thierry.ducrest&#64;camptocamp.com</a>&gt;</li>
<li>Gilles Meyomesse &lt;<a class="reference external" href="mailto:gilles.meyomesse&#64;acsone.eu">gilles.meyomesse&#64;acsone.eu</a>&gt; (<a class="reference external" href="https://acsone.eu">https://acsone.eu</a>)</li>
<li>Sylvain LE GAL (<a class="reference external" href="https://www.twitter.com/legalsylvain">https://www.twitter.com/legalsylvain</a>)</li>
</ul>
</div>
<div class="section" id="other-credits">
<h2><a class="toc-backref" href="#toc-entry-8">Other credits</a></h2>
<p>This module is maintained by: * Odoo Community Association</p>
</div>
<div class="section" id="maintainers">
<h2><a class="toc-backref" href="#toc-entry-9">Maintainers</a></h2>
<p>This module is maintained by the OCA.</p>
<a class="reference external image-reference" href="https://odoo-community.org"><img alt="Odoo Community Association" src="https://odoo-community.org/logo.png" /></a>
<p>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.</p>
<p>This module is part of the <a class="reference external" href="https://github.com/OCA/server-env/tree/17.0/server_environment_ir_config_parameter">OCA/server-env</a> project on GitHub.</p>
<p>You are welcome to contribute. To learn how please visit <a class="reference external" href="https://odoo-community.org/page/Contribute">https://odoo-community.org/page/Contribute</a>.</p>
</div>
</div>
</div>
</body>
</html>

View File

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

View File

@ -0,0 +1,11 @@
<odoo>
<record model="ir.config_parameter" id="some_record_id">
<field name="key">ircp_from_config</field>
<field name="value">value_from_xml</field>
</record>
<record model="ir.config_parameter" id="some_other_record_id">
<field name="key">other_ircp_from_config</field>
<field name="value">other_value_from_xml</field>
</record>
</odoo>

View File

@ -0,0 +1,169 @@
# Copyright 2016-2018 ACSONE SA/NV
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
from os import path
from odoo.exceptions import UserError
from odoo.tools import convert_file, file_path
from odoo.addons.server_environment.tests.common import ServerEnvironmentCase
from ..models import ir_config_parameter
CONFIG = """
[ir.config_parameter]
ircp_from_config=config_value
other_ircp_from_config=other_config_value
ircp_without_record=config_value_without_record
other_ircp_without_record=other_config_value_without_record
ircp_empty=
mail.catchall.alias=my_alias
"""
class TestEnv(ServerEnvironmentCase):
def setUp(self):
super().setUp()
self.ICP = self.env["ir.config_parameter"]
self.env_config = CONFIG
def _load_xml(self, module, filepath):
convert_file(
self.env,
module,
path.join(file_path(module), filepath),
{},
mode="init",
noupdate=False,
kind="test",
)
def test_get_param(self):
"""Get system parameter from config"""
with self.load_config(
public=self.env_config, serv_config_class=ir_config_parameter
):
# 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"""
with self.load_config(
public=self.env_config, serv_config_class=ir_config_parameter
):
# 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"""
with self.load_config(
public=self.env_config, serv_config_class=ir_config_parameter
):
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.load_config(
public=self.env_config, serv_config_class=ir_config_parameter
):
with self.assertRaises(UserError):
self.ICP.get_param("ircp_empty")
self.assertEqual(self.ICP.get_param("ircp_nonexistant"), False)
def test_override_xmldata(self):
with self.load_config(
public=self.env_config, serv_config_class=ir_config_parameter
):
self._load_xml(
"server_environment_ir_config_parameter", "tests/config_param_test.xml"
)
value = self.ICP.get_param("ircp_from_config")
self.assertEqual(value, "config_value")
def test_read_mail_catchall_alias(self):
"""read mail.catchall.alias from server env:
this must not break the mail addon's overload"""
with self.load_config(
public=self.env_config, serv_config_class=ir_config_parameter
):
value = self.ICP.get_param("mail.catchall.alias")
self.assertEqual(value, "my_alias")
res = self.ICP.search([("key", "=", "mail.catchall.alias")])
self.assertEqual(len(res), 1)
self.assertEqual(res.value, "my_alias")
def test_write(self):
# there's a write override, test it here
self._load_xml(
"server_environment_ir_config_parameter", "tests/config_param_test.xml"
)
with self.load_config(
public=self.env_config, serv_config_class=ir_config_parameter
):
ICP = self.ICP
icp1 = ICP.search([("key", "=", "ircp_from_config")])
self.assertEqual(icp1.value, "value_from_xml")
icp2 = ICP.search([("key", "=", "other_ircp_from_config")])
self.assertEqual(icp2.value, "other_value_from_xml")
# Ensures that each record has its own value at write
(icp1 | icp2).write({"value": "test"})
self.assertEqual(icp1.value, "config_value")
self.assertEqual(icp2.value, "other_config_value")
self.assertEqual(ICP.get_param(icp1.key), "config_value")
self.assertEqual(ICP.get_param(icp2.key), "other_config_value")
def test_create(self):
self._load_xml(
"server_environment_ir_config_parameter", "tests/config_param_test.xml"
)
with self.load_config(
public=self.env_config, serv_config_class=ir_config_parameter
):
vals = [
{
"key": "ircp_without_record",
"value": "NOPE",
},
{
"key": "other_ircp_without_record",
"value": "NOPE",
},
]
records = self.ICP.create(vals)
# Ensures each record has its own value at create
self.assertEqual(
records.mapped("value"),
["config_value_without_record", "other_config_value_without_record"],
)

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
Copyright (C) 2021 - Today: GRAP (http://www.grap.coop)
@author: Sylvain LE GAL (https://twitter.com/legalsylvain)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl.html).
-->
<odoo>
<record id="view_ir_config_parameter_tree" model="ir.ui.view">
<field name="model">ir.config_parameter</field>
<field name="inherit_id" ref="base.view_ir_config_list" />
<field name="arch" type="xml">
<field name="value" position="after">
<field name="is_environment" />
</field>
</field>
</record>
<record id="view_ir_config_parameter_form" model="ir.ui.view">
<field name="model">ir.config_parameter</field>
<field name="inherit_id" ref="base.view_ir_config_form" />
<field name="arch" type="xml">
<field name="value" position="after">
<field name="is_environment" />
</field>
<field name="key" position="attributes">
<attribute name="readonly">is_environment</attribute>
</field>
<field name="value" position="attributes">
<attribute name="readonly">is_environment</attribute>
</field>
</field>
</record>
</odoo>