From 2fec2295aca2960bfd856258a124ea206432d39d Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Fri, 18 Feb 2022 16:16:59 +0100 Subject: [PATCH 01/18] Add rpc_helper --- rpc_helper/README.rst | 1 + rpc_helper/__init__.py | 1 + rpc_helper/__manifest__.py | 15 +++++++ rpc_helper/decorator.py | 19 +++++++++ rpc_helper/hooks.py | 22 ++++++++++ rpc_helper/patch.py | 26 ++++++++++++ rpc_helper/readme/CONTRIBUTORS.rst | 1 + rpc_helper/readme/DESCRIPTION.rst | 1 + rpc_helper/readme/USAGE.rst | 15 +++++++ rpc_helper/rpc_test_example.py | 15 +++++++ rpc_helper/static/description/icon.png | Bin 0 -> 9455 bytes rpc_helper/tests/__init__.py | 2 + rpc_helper/tests/test_decorator.py | 34 ++++++++++++++++ rpc_helper/tests/test_xmlrpc.py | 53 +++++++++++++++++++++++++ 14 files changed, 205 insertions(+) create mode 100644 rpc_helper/README.rst create mode 100644 rpc_helper/__init__.py create mode 100644 rpc_helper/__manifest__.py create mode 100644 rpc_helper/decorator.py create mode 100644 rpc_helper/hooks.py create mode 100644 rpc_helper/patch.py create mode 100644 rpc_helper/readme/CONTRIBUTORS.rst create mode 100644 rpc_helper/readme/DESCRIPTION.rst create mode 100644 rpc_helper/readme/USAGE.rst create mode 100644 rpc_helper/rpc_test_example.py create mode 100644 rpc_helper/static/description/icon.png create mode 100644 rpc_helper/tests/__init__.py create mode 100644 rpc_helper/tests/test_decorator.py create mode 100644 rpc_helper/tests/test_xmlrpc.py diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst new file mode 100644 index 00000000000..89bcd6c21c3 --- /dev/null +++ b/rpc_helper/README.rst @@ -0,0 +1 @@ +wait for the bot ;) diff --git a/rpc_helper/__init__.py b/rpc_helper/__init__.py new file mode 100644 index 00000000000..99ac2b54fa9 --- /dev/null +++ b/rpc_helper/__init__.py @@ -0,0 +1 @@ +from .hooks import post_load_hook diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py new file mode 100644 index 00000000000..f5b774941b7 --- /dev/null +++ b/rpc_helper/__manifest__.py @@ -0,0 +1,15 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +{ + "name": "Disable RPC", + "summary": """Helpers for disabling RPC calls""", + "version": "14.0.1.0.0", + "development_status": "Alpha", + "license": "LGPL-3", + "website": "https://github.com/OCA/server-tools", + "author": "Camptocamp, Odoo Community Association (OCA)", + "maintainers": ["simahawk"], + "post_load": "post_load_hook", +} diff --git a/rpc_helper/decorator.py b/rpc_helper/decorator.py new file mode 100644 index 00000000000..99c875c90a9 --- /dev/null +++ b/rpc_helper/decorator.py @@ -0,0 +1,19 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +def disable_rpc(*config): + """Decorate classes to disable RPC calls. + + Possible values: + + * none, block all methods + * *("$method_name1", "$method_name2"), blocks calls to specific methods + """ + + def _decorator(target): + target._disable_rpc = ("all",) if len(config) == 0 else config + return target + + return _decorator diff --git a/rpc_helper/hooks.py b/rpc_helper/hooks.py new file mode 100644 index 00000000000..e6dbad6dac6 --- /dev/null +++ b/rpc_helper/hooks.py @@ -0,0 +1,22 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import logging + +from odoo.service import model + +from .patch import protected__execute_cr + +_logger = logging.getLogger(__name__) + + +def patch__model_execute_cr(): + """Patch rpc model handler.""" + protected__execute_cr._orig__execute_cr = model.execute_cr + model.execute_cr = protected__execute_cr + _logger.info("PATCHED odoo.service.model.execute") + + +def post_load_hook(): + patch__model_execute_cr() diff --git a/rpc_helper/patch.py b/rpc_helper/patch.py new file mode 100644 index 00000000000..b939b06c782 --- /dev/null +++ b/rpc_helper/patch.py @@ -0,0 +1,26 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import odoo +from odoo.exceptions import UserError +from odoo.tools.translate import _ + + +def protected__execute_cr(cr, uid, obj, method, *args, **kw): + # Same as original func in odoo.service.model.execute_cr + odoo.api.Environment.reset() # clean cache etc if we retry the same transaction + recs = odoo.api.Environment(cr, uid, {}).get(obj) + if recs is None: + raise UserError(_("Object %s doesn't exist", obj)) + # custom code starts here + if not _rpc_allowed(recs, method): + raise UserError(_("RPC call on %s is not allowed", obj)) + return protected__execute_cr._orig__execute_cr(cr, uid, obj, method, *args, **kw) + + +def _rpc_allowed(recordset, method): + config = getattr(recordset, "_disable_rpc", None) + if config is None: + return True + return "all" not in config and method not in config diff --git a/rpc_helper/readme/CONTRIBUTORS.rst b/rpc_helper/readme/CONTRIBUTORS.rst new file mode 100644 index 00000000000..f1c71bce186 --- /dev/null +++ b/rpc_helper/readme/CONTRIBUTORS.rst @@ -0,0 +1 @@ +* Simone Orsi diff --git a/rpc_helper/readme/DESCRIPTION.rst b/rpc_helper/readme/DESCRIPTION.rst new file mode 100644 index 00000000000..e5078d95216 --- /dev/null +++ b/rpc_helper/readme/DESCRIPTION.rst @@ -0,0 +1 @@ +Provide helpers to authorize RPC calls. diff --git a/rpc_helper/readme/USAGE.rst b/rpc_helper/readme/USAGE.rst new file mode 100644 index 00000000000..56cfd7de27e --- /dev/null +++ b/rpc_helper/readme/USAGE.rst @@ -0,0 +1,15 @@ +Decorate an Odoo model class like this:: + + from odoo.addons.rpc_helper.decorator import disable_rpc + + @disable_rpc() + class AverageModel(models.Model): + _inherit = "avg.model" + +This will disable ALL calls. + +To selectively disable only some methods:: + + @disable_rpc("create", "write", "any_method") + class AverageModel(models.Model): + _inherit = "avg.model" diff --git a/rpc_helper/rpc_test_example.py b/rpc_helper/rpc_test_example.py new file mode 100644 index 00000000000..35680bd0b7b --- /dev/null +++ b/rpc_helper/rpc_test_example.py @@ -0,0 +1,15 @@ +"""Basic example script you can use to test your own models for real. +""" +from xmlrpc import client + +HOST = "127.0.0.1" +PORT = 8069 +DB_NAME = "ododdb" + +url = "http://%s:%d/xmlrpc/2/" % (HOST, PORT) +xmlrpc_common = client.ServerProxy(url + "common") +xmlrpc_db = client.ServerProxy(url + "db") +xmlrpc_object = client.ServerProxy(url + "object") + +uid = xmlrpc_common.login(DB_NAME, "admin", "admin") +res = xmlrpc_object.execute(DB_NAME, uid, "admin", "res.partner", "search", []) diff --git a/rpc_helper/static/description/icon.png b/rpc_helper/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d GIT binary patch literal 9455 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 z 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 Xviia!U7SGha1wx#SCgwmn*{w2TRX*I literal 0 HcmV?d00001 diff --git a/rpc_helper/tests/__init__.py b/rpc_helper/tests/__init__.py new file mode 100644 index 00000000000..c60563b6ab5 --- /dev/null +++ b/rpc_helper/tests/__init__.py @@ -0,0 +1,2 @@ +from . import test_xmlrpc +from . import test_decorator diff --git a/rpc_helper/tests/test_decorator.py b/rpc_helper/tests/test_decorator.py new file mode 100644 index 00000000000..1ee3ee54f68 --- /dev/null +++ b/rpc_helper/tests/test_decorator.py @@ -0,0 +1,34 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +import unittest + +from ..decorator import disable_rpc + + +@disable_rpc() +class All: + pass + + +@disable_rpc("create") +class One: + pass + + +@disable_rpc("create", "write") +class Multi: + pass + + +class TestDecorator(unittest.TestCase): + def test_all(self): + self.assertEqual(All._disable_rpc, ("all",)) + + def test_one(self): + self.assertEqual(One._disable_rpc, ("create",)) + + def test_multi(self): + self.assertEqual(Multi._disable_rpc, ("create", "write")) diff --git a/rpc_helper/tests/test_xmlrpc.py b/rpc_helper/tests/test_xmlrpc.py new file mode 100644 index 00000000000..bc51f52ca07 --- /dev/null +++ b/rpc_helper/tests/test_xmlrpc.py @@ -0,0 +1,53 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + + +import xmlrpc + +from odoo.tests import common + + +@common.tagged("post_install", "-at_install") +class TestXMLRPC(common.HttpSavepointCase): + @classmethod + def setUpClass(cls): + super().setUpClass() + cls.admin_uid = cls.env.ref("base.user_admin").id + + def _set_disable(self, val): + type(self.env["res.partner"])._disable_rpc = val + + def tearDown(self): + klass = type(self.env["res.partner"]) + if hasattr(klass, "_disable_rpc"): + delattr(klass, "_disable_rpc") + super().tearDown() + + def _rpc_call(self, method, vals=None): + o = self.xmlrpc_object + db_name = common.get_db_name() + return o.execute( + db_name, self.admin_uid, "admin", "res.partner", method, vals or [] + ) + + def test_xmlrpc_search_normal(self): + res = self._rpc_call("search") + self.assertTrue(isinstance(res, list)) + + def test_xmlrpc_all_blocked(self): + self._set_disable(("all",)) + msg = "RPC call on res.partner is not allowed" + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("search") + + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("create", vals=[{"name": "Foo"}]) + + def test_xmlrpc_can_search_create_blocked(self): + self._set_disable(("create",)) + self._rpc_call("search") + + msg = "RPC call on res.partner is not allowed" + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("create", vals=[{"name": "Foo"}]) From a95c8da59cae4b2849fdbd38b06b5b380400cce2 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Mon, 21 Feb 2022 09:52:51 +0100 Subject: [PATCH 02/18] rpc_helper: add config via UI --- rpc_helper/__init__.py | 1 + rpc_helper/__manifest__.py | 2 ++ rpc_helper/models/__init__.py | 1 + rpc_helper/models/ir_model.py | 44 +++++++++++++++++++++++++++++ rpc_helper/patch.py | 4 +++ rpc_helper/readme/CONFIGURATION.rst | 23 +++++++++++++++ rpc_helper/readme/USAGE.rst | 9 ++++++ rpc_helper/rpc_test_example.py | 2 +- rpc_helper/tests/test_xmlrpc.py | 24 ++++++++++++++++ rpc_helper/views/ir_model_views.xml | 23 +++++++++++++++ 10 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 rpc_helper/models/__init__.py create mode 100644 rpc_helper/models/ir_model.py create mode 100644 rpc_helper/readme/CONFIGURATION.rst create mode 100644 rpc_helper/views/ir_model_views.xml diff --git a/rpc_helper/__init__.py b/rpc_helper/__init__.py index 99ac2b54fa9..5bf67492bc8 100644 --- a/rpc_helper/__init__.py +++ b/rpc_helper/__init__.py @@ -1 +1,2 @@ +from . import models from .hooks import post_load_hook diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index f5b774941b7..f2d6ec4278b 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -11,5 +11,7 @@ "website": "https://github.com/OCA/server-tools", "author": "Camptocamp, Odoo Community Association (OCA)", "maintainers": ["simahawk"], + "depends": ["base_sparse_field"], + "data": ["views/ir_model_views.xml"], "post_load": "post_load_hook", } diff --git a/rpc_helper/models/__init__.py b/rpc_helper/models/__init__.py new file mode 100644 index 00000000000..413bb238014 --- /dev/null +++ b/rpc_helper/models/__init__.py @@ -0,0 +1 @@ +from . import ir_model diff --git a/rpc_helper/models/ir_model.py b/rpc_helper/models/ir_model.py new file mode 100644 index 00000000000..6913b33bc1f --- /dev/null +++ b/rpc_helper/models/ir_model.py @@ -0,0 +1,44 @@ +# Copyright 2022 Camptocamp SA +# @author: Simone Orsi +# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). + +import json + +from odoo import api, fields, models, tools + +from odoo.addons.base_sparse_field.models.fields import Serialized + + +class IrModel(models.Model): + _inherit = "ir.model" + + rpc_config = Serialized(compute="_compute_rpc_config", default={}) + # Allow editing via UI + rpc_config_edit = fields.Text( + help="Configure RPC config via JSON. " + "Value must be a list of methods to disable " + "wrapped by a dict with key `disable`. " + "Eg: {'disable': ['search', 'do_this']}" + "To disable all methods, use `{'disable: ['all']}`", + inverse="_inverse_rpc_config_edit", + ) + + @api.depends("rpc_config_edit") + def _compute_rpc_config(self): + for rec in self: + rec.rpc_config = rec._load_rpc_config() + + def _inverse_rpc_config_edit(self): + for rec in self: + # Make sure options_edit is always readable + rec.rpc_config_edit = json.dumps( + rec.rpc_config or {}, indent=4, sort_keys=True + ) + + def _load_rpc_config(self): + return json.loads(self.rpc_config_edit or "{}") + + @tools.ormcache("model") + def _get_rpc_config(self, model): + rec = self._get(model) + return rec.rpc_config or {} diff --git a/rpc_helper/patch.py b/rpc_helper/patch.py index b939b06c782..3eb987da891 100644 --- a/rpc_helper/patch.py +++ b/rpc_helper/patch.py @@ -21,6 +21,10 @@ def protected__execute_cr(cr, uid, obj, method, *args, **kw): def _rpc_allowed(recordset, method): config = getattr(recordset, "_disable_rpc", None) + if config is None: + config = ( + recordset.env["ir.model"]._get_rpc_config(recordset._name).get("disable") + ) if config is None: return True return "all" not in config and method not in config diff --git a/rpc_helper/readme/CONFIGURATION.rst b/rpc_helper/readme/CONFIGURATION.rst new file mode 100644 index 00000000000..84347b529f3 --- /dev/null +++ b/rpc_helper/readme/CONFIGURATION.rst @@ -0,0 +1,23 @@ +Enable debug mode and go to "Technical -> Database Structure -> Models". + +Open the model that you like to configure and go to the tab "RPC config". + +There you see a text field which supports JSON configuration. + +The configuration is the same you can pass via decorator. +The only difference is that you have to wrap values in a dictionary +like `{"disable": [...values...]}`. + +To disable all calls:: + + { + "disable": ["all"], + } + +To disable only some methods:: + + { + "disable": ["create", "write", "another_method"], + } + +NOTE: on the resulting JSON will be automatically formatted on save for better readability. diff --git a/rpc_helper/readme/USAGE.rst b/rpc_helper/readme/USAGE.rst index 56cfd7de27e..ff675247629 100644 --- a/rpc_helper/readme/USAGE.rst +++ b/rpc_helper/readme/USAGE.rst @@ -1,3 +1,6 @@ +Via code +~~~~~~~~ + Decorate an Odoo model class like this:: from odoo.addons.rpc_helper.decorator import disable_rpc @@ -13,3 +16,9 @@ To selectively disable only some methods:: @disable_rpc("create", "write", "any_method") class AverageModel(models.Model): _inherit = "avg.model" + + +Via `ir.model` configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See "Configuration" section. diff --git a/rpc_helper/rpc_test_example.py b/rpc_helper/rpc_test_example.py index 35680bd0b7b..d48b9a73da3 100644 --- a/rpc_helper/rpc_test_example.py +++ b/rpc_helper/rpc_test_example.py @@ -4,7 +4,7 @@ HOST = "127.0.0.1" PORT = 8069 -DB_NAME = "ododdb" +DB_NAME = "odoodb" url = "http://%s:%d/xmlrpc/2/" % (HOST, PORT) xmlrpc_common = client.ServerProxy(url + "common") diff --git a/rpc_helper/tests/test_xmlrpc.py b/rpc_helper/tests/test_xmlrpc.py index bc51f52ca07..e442fbe2a44 100644 --- a/rpc_helper/tests/test_xmlrpc.py +++ b/rpc_helper/tests/test_xmlrpc.py @@ -3,6 +3,7 @@ # License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl). +import json import xmlrpc from odoo.tests import common @@ -18,6 +19,12 @@ def setUpClass(cls): def _set_disable(self, val): type(self.env["res.partner"])._disable_rpc = val + def _set_disable_on_model(self, val): + self.env["ir.model"]._get("res.partner").rpc_config_edit = json.dumps( + {"disable": val} + ) + self.env["ir.model"].flush() + def tearDown(self): klass = type(self.env["res.partner"]) if hasattr(klass, "_disable_rpc"): @@ -51,3 +58,20 @@ def test_xmlrpc_can_search_create_blocked(self): msg = "RPC call on res.partner is not allowed" with self.assertRaisesRegex(xmlrpc.client.Fault, msg): self._rpc_call("create", vals=[{"name": "Foo"}]) + + def test_xmlrpc_all_blocked__ir_model(self): + self._set_disable_on_model(("all",)) + msg = "RPC call on res.partner is not allowed" + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("search") + + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("create", vals=[{"name": "Foo"}]) + + def test_xmlrpc_can_search_create_blocked__ir_model(self): + self._set_disable_on_model(("create",)) + self._rpc_call("search") + + msg = "RPC call on res.partner is not allowed" + with self.assertRaisesRegex(xmlrpc.client.Fault, msg): + self._rpc_call("create", vals=[{"name": "Foo"}]) diff --git a/rpc_helper/views/ir_model_views.xml b/rpc_helper/views/ir_model_views.xml new file mode 100644 index 00000000000..d98b45c82e2 --- /dev/null +++ b/rpc_helper/views/ir_model_views.xml @@ -0,0 +1,23 @@ + + + + + rpc_helper view_model_form + ir.model + + + + + + + + + + From 54fa48b3e1f992652fba35ac64b559a94f1de7f5 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 4 Mar 2022 17:18:38 +0000 Subject: [PATCH 03/18] rpc_helper 14.0.1.1.0 --- rpc_helper/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index f2d6ec4278b..2896e40a9ac 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", - "version": "14.0.1.0.0", + "version": "14.0.1.1.0", "development_status": "Alpha", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", From 4f5e4c3f59ed55fbca71ae0e9949fbd341cebe39 Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Fri, 2 Sep 2022 13:40:07 +0000 Subject: [PATCH 04/18] Added translation using Weblate (Spanish (Argentina)) Currently translated at 100.0% (16 of 16 strings) Translation: server-tools-14.0/server-tools-14.0-rpc_helper Translate-URL: https://translation.odoo-community.org/projects/server-tools-14-0/server-tools-14-0-rpc_helper/es_AR/ --- rpc_helper/i18n/es_AR.po | 106 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 106 insertions(+) create mode 100644 rpc_helper/i18n/es_AR.po diff --git a/rpc_helper/i18n/es_AR.po b/rpc_helper/i18n/es_AR.po new file mode 100644 index 00000000000..edbd12f852b --- /dev/null +++ b/rpc_helper/i18n/es_AR.po @@ -0,0 +1,106 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * rpc_helper +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2022-09-02 16:07+0000\n" +"Last-Translator: Ignacio Buioli \n" +"Language-Team: none\n" +"Language: es_AR\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.3.2\n" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids +msgid "Changeset Changes" +msgstr "Cambios del Conjunto de Cambios" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids +msgid "Changesets" +msgstr "Conjunto de Cambios" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit +msgid "" +"Configure RPC config via JSON. Value must be a list of methods to disable " +"wrapped by a dict with key `disable`. Eg: {'disable': ['search', " +"'do_this']}To disable all methods, use `{'disable: ['all']}`" +msgstr "" +"Configure los ajustes de RPC a través de JSON. El valor debe ser una lista " +"de métodos para deshabilitar envueltos por un dict con la clave " +"`deshabilitar`. Por ejemplo: {'disable': ['search', 'do_this']} Para " +"deshabilitar todos los métodos, use `{'disable: ['all']}`" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes +msgid "Count Pending Changeset Changes" +msgstr "Cuenta de los Cambios Pendientes de los Conjuntos de Cambios" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets +msgid "Count Pending Changesets" +msgstr "Cuenta de los Conjuntos de Cambios Pendientes" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__display_name +msgid "Display Name" +msgstr "Mostrar Nombre" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__id +msgid "ID" +msgstr "ID" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model____last_update +msgid "Last Modified on" +msgstr "Última modificación en" + +#. module: rpc_helper +#: model:ir.model,name:rpc_helper.model_ir_model +msgid "Models" +msgstr "Modelos" + +#. module: rpc_helper +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "Object %s doesn't exist" +msgstr "El Objeto %s no existe" + +#. module: rpc_helper +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "RPC call on %s is not allowed" +msgstr "Las llamadas RPC en %s no están permitidas" + +#. module: rpc_helper +#: model_terms:ir.ui.view,arch_db:rpc_helper.view_model_form +msgid "RPC config" +msgstr "Configuración RPC" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config +msgid "Rpc Config" +msgstr "Configuración Rpc" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config_edit +msgid "Rpc Config Edit" +msgstr "Editar la Configuración Rpc" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search +msgid "Smart Search" +msgstr "Búsqueda Inteligente" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset +msgid "User Can See Changeset" +msgstr "El Usuario Puede ver Conjuntos de Cambios" From 0a9ed0037293b4d87a2dedb9a330edc017d0940e Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Tue, 7 Mar 2023 18:19:07 +0100 Subject: [PATCH 05/18] rpc_helper: fix readme --- rpc_helper/readme/{CONFIGURATION.rst => CONFIGURE.rst} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename rpc_helper/readme/{CONFIGURATION.rst => CONFIGURE.rst} (100%) diff --git a/rpc_helper/readme/CONFIGURATION.rst b/rpc_helper/readme/CONFIGURE.rst similarity index 100% rename from rpc_helper/readme/CONFIGURATION.rst rename to rpc_helper/readme/CONFIGURE.rst From 742d9234ca0ad31e285af28176a9428a9a4eaede Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 7 Mar 2023 17:37:53 +0000 Subject: [PATCH 06/18] rpc_helper 14.0.1.1.1 --- rpc_helper/__manifest__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index 2896e40a9ac..11f86dd3295 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", - "version": "14.0.1.1.0", + "version": "14.0.1.1.1", "development_status": "Alpha", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", From 99f775bb51ba65e64637206287f20835d21340ac Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Thu, 16 Feb 2023 17:57:40 +0100 Subject: [PATCH 07/18] rpc_helper: migrate to v16 --- rpc_helper/__manifest__.py | 4 ++-- rpc_helper/patch.py | 2 +- rpc_helper/tests/test_xmlrpc.py | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index 11f86dd3295..b20a92031cd 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -5,8 +5,8 @@ { "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", - "version": "14.0.1.1.1", - "development_status": "Alpha", + "version": "16.0.1.0.0", + "development_status": "Beta", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", "author": "Camptocamp, Odoo Community Association (OCA)", diff --git a/rpc_helper/patch.py b/rpc_helper/patch.py index 3eb987da891..c3a05691b9b 100644 --- a/rpc_helper/patch.py +++ b/rpc_helper/patch.py @@ -9,7 +9,7 @@ def protected__execute_cr(cr, uid, obj, method, *args, **kw): # Same as original func in odoo.service.model.execute_cr - odoo.api.Environment.reset() # clean cache etc if we retry the same transaction + cr.reset() recs = odoo.api.Environment(cr, uid, {}).get(obj) if recs is None: raise UserError(_("Object %s doesn't exist", obj)) diff --git a/rpc_helper/tests/test_xmlrpc.py b/rpc_helper/tests/test_xmlrpc.py index e442fbe2a44..bf18ea26fa3 100644 --- a/rpc_helper/tests/test_xmlrpc.py +++ b/rpc_helper/tests/test_xmlrpc.py @@ -10,7 +10,7 @@ @common.tagged("post_install", "-at_install") -class TestXMLRPC(common.HttpSavepointCase): +class TestXMLRPC(common.HttpCase): @classmethod def setUpClass(cls): super().setUpClass() @@ -23,7 +23,7 @@ def _set_disable_on_model(self, val): self.env["ir.model"]._get("res.partner").rpc_config_edit = json.dumps( {"disable": val} ) - self.env["ir.model"].flush() + self.env.flush_all() def tearDown(self): klass = type(self.env["res.partner"]) From 707cc11eb864c73d18300a6b2025320852e0b238 Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Sun, 27 Aug 2023 07:50:49 +0000 Subject: [PATCH 08/18] Translated using Weblate (Spanish) Currently translated at 100.0% (8 of 8 strings) Translation: server-tools-16.0/server-tools-16.0-rpc_helper Translate-URL: https://translation.odoo-community.org/projects/server-tools-16-0/server-tools-16-0-rpc_helper/es/ Added translation using Weblate (Spanish) --- rpc_helper/README.rst | 140 ++++++- rpc_helper/i18n/es.po | 68 ++++ rpc_helper/static/description/index.html | 476 +++++++++++++++++++++++ 3 files changed, 683 insertions(+), 1 deletion(-) create mode 100644 rpc_helper/i18n/es.po create mode 100644 rpc_helper/static/description/index.html diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 89bcd6c21c3..dcd8d231303 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -1 +1,139 @@ -wait for the bot ;) +=========== +Disable RPC +=========== + +.. + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! source digest: sha256:3e95cc80fbae1cb569a46d799e19ecc6edf4f605f8d131a25bed6daf5057b512 + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |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-LGPL--3-blue.png + :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html + :alt: License: LGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github + :target: https://github.com/OCA/server-tools/tree/16.0/rpc_helper + :alt: OCA/server-tools +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/server-tools-16-0/server-tools-16-0-rpc_helper + :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-tools&target_branch=16.0 + :alt: Try me on Runboat + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Provide helpers to authorize RPC calls. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +Enable debug mode and go to "Technical -> Database Structure -> Models". + +Open the model that you like to configure and go to the tab "RPC config". + +There you see a text field which supports JSON configuration. + +The configuration is the same you can pass via decorator. +The only difference is that you have to wrap values in a dictionary +like `{"disable": [...values...]}`. + +To disable all calls:: + + { + "disable": ["all"], + } + +To disable only some methods:: + + { + "disable": ["create", "write", "another_method"], + } + +NOTE: on the resulting JSON will be automatically formatted on save for better readability. + +Usage +===== + +Via code +~~~~~~~~ + +Decorate an Odoo model class like this:: + + from odoo.addons.rpc_helper.decorator import disable_rpc + + @disable_rpc() + class AverageModel(models.Model): + _inherit = "avg.model" + +This will disable ALL calls. + +To selectively disable only some methods:: + + @disable_rpc("create", "write", "any_method") + class AverageModel(models.Model): + _inherit = "avg.model" + + +Via `ir.model` configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See "Configuration" section. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub 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 `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Camptocamp + +Contributors +~~~~~~~~~~~~ + +* Simone Orsi + +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. + +.. |maintainer-simahawk| image:: https://github.com/simahawk.png?size=40px + :target: https://github.com/simahawk + :alt: simahawk + +Current `maintainer `__: + +|maintainer-simahawk| + +This module is part of the `OCA/server-tools `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/rpc_helper/i18n/es.po b/rpc_helper/i18n/es.po new file mode 100644 index 00000000000..98ceba6dec4 --- /dev/null +++ b/rpc_helper/i18n/es.po @@ -0,0 +1,68 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * rpc_helper +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2023-09-03 00:15+0000\n" +"Last-Translator: Ivorra78 \n" +"Language-Team: none\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: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit +msgid "" +"Configure RPC config via JSON. Value must be a list of methods to disable " +"wrapped by a dict with key `disable`. Eg: {'disable': ['search', " +"'do_this']}To disable all methods, use `{'disable: ['all']}`" +msgstr "" +"Configurar RPC vía JSON. El valor debe ser una lista de métodos a " +"deshabilitar envueltos por un dict con la clave `disable`. Ej: {'disable': [" +"'search', 'do_this']}Para deshabilitar todos los métodos, usa `{'disable: " +"['all']}`" + +#. module: rpc_helper +#: model:ir.model,name:rpc_helper.model_ir_model +msgid "Models" +msgstr "Modelos" + +#. module: rpc_helper +#. odoo-python +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "Object %s doesn't exist" +msgstr "El objeto %s no existe" + +#. module: rpc_helper +#. odoo-python +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "RPC call on %s is not allowed" +msgstr "La llamada RPC en %s no está permitida" + +#. module: rpc_helper +#: model_terms:ir.ui.view,arch_db:rpc_helper.view_model_form +msgid "RPC config" +msgstr "Configuración RPC" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config +msgid "Rpc Config" +msgstr "Configuración Rpc" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config_edit +msgid "Rpc Config Edit" +msgstr "Editar configuración Rpc" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search +msgid "Smart Search" +msgstr "Búsqueda inteligente" diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html new file mode 100644 index 00000000000..db421446aff --- /dev/null +++ b/rpc_helper/static/description/index.html @@ -0,0 +1,476 @@ + + + + + + +Disable RPC + + + +
+

Disable RPC

+ + +

Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

+

Provide helpers to authorize RPC calls.

+

Table of contents

+ +
+

Configuration

+

Enable debug mode and go to “Technical -> Database Structure -> Models”.

+

Open the model that you like to configure and go to the tab “RPC config”.

+

There you see a text field which supports JSON configuration.

+

The configuration is the same you can pass via decorator. +The only difference is that you have to wrap values in a dictionary +like {“disable”: […values…]}.

+

To disable all calls:

+
+{
+    "disable": ["all"],
+}
+
+

To disable only some methods:

+
+{
+    "disable": ["create", "write", "another_method"],
+}
+
+

NOTE: on the resulting JSON will be automatically formatted on save for better readability.

+
+
+

Usage

+
+

Via code

+

Decorate an Odoo model class like this:

+
+from odoo.addons.rpc_helper.decorator import disable_rpc
+
+@disable_rpc()
+class AverageModel(models.Model):
+    _inherit = "avg.model"
+
+

This will disable ALL calls.

+

To selectively disable only some methods:

+
+@disable_rpc("create", "write", "any_method")
+class AverageModel(models.Model):
+    _inherit = "avg.model"
+
+
+
+

Via ir.model configuration

+

See “Configuration” section.

+
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub 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.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Camptocamp
  • +
+
+ +
+

Maintainers

+

This module is maintained by the OCA.

+Odoo Community Association +

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.

+

Current maintainer:

+

simahawk

+

This module is part of the OCA/server-tools project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+ + From 309ff8ff8b8f67fd20f6fa5655e64b2cd0dcb750 Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 2 Jan 2024 11:13:34 +0000 Subject: [PATCH 09/18] Translated using Weblate (Italian) Currently translated at 100.0% (8 of 8 strings) Translation: server-tools-16.0/server-tools-16.0-rpc_helper Translate-URL: https://translation.odoo-community.org/projects/server-tools-16-0/server-tools-16-0-rpc_helper/it/ --- rpc_helper/i18n/es.po | 53 ++++++++++++++-- rpc_helper/i18n/es_AR.po | 50 ++++++++++----- rpc_helper/i18n/it.po | 113 +++++++++++++++++++++++++++++++++ rpc_helper/i18n/rpc_helper.pot | 106 +++++++++++++++++++++++++++++++ 4 files changed, 301 insertions(+), 21 deletions(-) create mode 100644 rpc_helper/i18n/it.po create mode 100644 rpc_helper/i18n/rpc_helper.pot diff --git a/rpc_helper/i18n/es.po b/rpc_helper/i18n/es.po index 98ceba6dec4..e3fba1817fa 100644 --- a/rpc_helper/i18n/es.po +++ b/rpc_helper/i18n/es.po @@ -16,18 +16,43 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids +msgid "Changeset Changes" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids +msgid "Changesets" +msgstr "" + #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit msgid "" "Configure RPC config via JSON. Value must be a list of methods to disable " -"wrapped by a dict with key `disable`. Eg: {'disable': ['search', " -"'do_this']}To disable all methods, use `{'disable: ['all']}`" +"wrapped by a dict with key `disable`. Eg: {'disable': ['search', 'do_this']}" +"To disable all methods, use `{'disable: ['all']}`" msgstr "" "Configurar RPC vía JSON. El valor debe ser una lista de métodos a " -"deshabilitar envueltos por un dict con la clave `disable`. Ej: {'disable': [" -"'search', 'do_this']}Para deshabilitar todos los métodos, usa `{'disable: " +"deshabilitar envueltos por un dict con la clave `disable`. Ej: {'disable': " +"['search', 'do_this']}Para deshabilitar todos los métodos, usa `{'disable: " "['all']}`" +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_changesets +msgid "Count Changesets" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes +msgid "Count Pending Changeset Changes" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets +msgid "Count Pending Changesets" +msgstr "" + #. module: rpc_helper #: model:ir.model,name:rpc_helper.model_ir_model msgid "Models" @@ -66,3 +91,23 @@ msgstr "Editar configuración Rpc" #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search msgid "Smart Search" msgstr "Búsqueda inteligente" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changeset_changes +msgid "The number of pending changes of this record" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changesets +msgid "The number of pending changesets of this record" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_changesets +msgid "The overall number of changesets of this record" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset +msgid "User Can See Changeset" +msgstr "" diff --git a/rpc_helper/i18n/es_AR.po b/rpc_helper/i18n/es_AR.po index edbd12f852b..4d239ca117f 100644 --- a/rpc_helper/i18n/es_AR.po +++ b/rpc_helper/i18n/es_AR.po @@ -30,14 +30,19 @@ msgstr "Conjunto de Cambios" #: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit msgid "" "Configure RPC config via JSON. Value must be a list of methods to disable " -"wrapped by a dict with key `disable`. Eg: {'disable': ['search', " -"'do_this']}To disable all methods, use `{'disable: ['all']}`" +"wrapped by a dict with key `disable`. Eg: {'disable': ['search', 'do_this']}" +"To disable all methods, use `{'disable: ['all']}`" msgstr "" "Configure los ajustes de RPC a través de JSON. El valor debe ser una lista " "de métodos para deshabilitar envueltos por un dict con la clave " "`deshabilitar`. Por ejemplo: {'disable': ['search', 'do_this']} Para " "deshabilitar todos los métodos, use `{'disable: ['all']}`" +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_changesets +msgid "Count Changesets" +msgstr "" + #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes msgid "Count Pending Changeset Changes" @@ -48,33 +53,20 @@ msgstr "Cuenta de los Cambios Pendientes de los Conjuntos de Cambios" msgid "Count Pending Changesets" msgstr "Cuenta de los Conjuntos de Cambios Pendientes" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__display_name -msgid "Display Name" -msgstr "Mostrar Nombre" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__id -msgid "ID" -msgstr "ID" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model____last_update -msgid "Last Modified on" -msgstr "Última modificación en" - #. module: rpc_helper #: model:ir.model,name:rpc_helper.model_ir_model msgid "Models" msgstr "Modelos" #. module: rpc_helper +#. odoo-python #: code:addons/rpc_helper/patch.py:0 #, python-format msgid "Object %s doesn't exist" msgstr "El Objeto %s no existe" #. module: rpc_helper +#. odoo-python #: code:addons/rpc_helper/patch.py:0 #, python-format msgid "RPC call on %s is not allowed" @@ -100,7 +92,31 @@ msgstr "Editar la Configuración Rpc" msgid "Smart Search" msgstr "Búsqueda Inteligente" +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changeset_changes +msgid "The number of pending changes of this record" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changesets +msgid "The number of pending changesets of this record" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_changesets +msgid "The overall number of changesets of this record" +msgstr "" + #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset msgid "User Can See Changeset" msgstr "El Usuario Puede ver Conjuntos de Cambios" + +#~ msgid "Display Name" +#~ msgstr "Mostrar Nombre" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" diff --git a/rpc_helper/i18n/it.po b/rpc_helper/i18n/it.po new file mode 100644 index 00000000000..6eb459e70da --- /dev/null +++ b/rpc_helper/i18n/it.po @@ -0,0 +1,113 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * rpc_helper +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 16.0\n" +"Report-Msgid-Bugs-To: \n" +"PO-Revision-Date: 2024-04-04 11:35+0000\n" +"Last-Translator: mymage \n" +"Language-Team: none\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" +"X-Generator: Weblate 4.17\n" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids +msgid "Changeset Changes" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids +msgid "Changesets" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit +msgid "" +"Configure RPC config via JSON. Value must be a list of methods to disable " +"wrapped by a dict with key `disable`. Eg: {'disable': ['search', 'do_this']}" +"To disable all methods, use `{'disable: ['all']}`" +msgstr "" +"Impostare configurazione RPC con JSON. Il valore deve essere un elenco di " +"metodi da disabilitare inseriti in un dizionario con chiave `disable`. Es. " +"{'disable': ['search', 'do_this']} Pr disabilitare tutti i metodi usare " +"`{'disable: ['all']}`" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_changesets +msgid "Count Changesets" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes +msgid "Count Pending Changeset Changes" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets +msgid "Count Pending Changesets" +msgstr "" + +#. module: rpc_helper +#: model:ir.model,name:rpc_helper.model_ir_model +msgid "Models" +msgstr "Modelli" + +#. module: rpc_helper +#. odoo-python +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "Object %s doesn't exist" +msgstr "L'oggetto %s non esiste" + +#. module: rpc_helper +#. odoo-python +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "RPC call on %s is not allowed" +msgstr "La chiamata RPC su %s non è consentita" + +#. module: rpc_helper +#: model_terms:ir.ui.view,arch_db:rpc_helper.view_model_form +msgid "RPC config" +msgstr "Configurazione RPC" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config +msgid "Rpc Config" +msgstr "Configurazione RPC" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config_edit +msgid "Rpc Config Edit" +msgstr "Mdifica configurazione RPC" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search +msgid "Smart Search" +msgstr "Ricerca intelligente" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changeset_changes +msgid "The number of pending changes of this record" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changesets +msgid "The number of pending changesets of this record" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_changesets +msgid "The overall number of changesets of this record" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset +msgid "User Can See Changeset" +msgstr "" diff --git a/rpc_helper/i18n/rpc_helper.pot b/rpc_helper/i18n/rpc_helper.pot new file mode 100644 index 00000000000..2d6b7e2709e --- /dev/null +++ b/rpc_helper/i18n/rpc_helper.pot @@ -0,0 +1,106 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * rpc_helper +# +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: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids +msgid "Changeset Changes" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids +msgid "Changesets" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit +msgid "" +"Configure RPC config via JSON. Value must be a list of methods to disable " +"wrapped by a dict with key `disable`. Eg: {'disable': ['search', " +"'do_this']}To disable all methods, use `{'disable: ['all']}`" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_changesets +msgid "Count Changesets" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes +msgid "Count Pending Changeset Changes" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets +msgid "Count Pending Changesets" +msgstr "" + +#. module: rpc_helper +#: model:ir.model,name:rpc_helper.model_ir_model +msgid "Models" +msgstr "" + +#. module: rpc_helper +#. odoo-python +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "Object %s doesn't exist" +msgstr "" + +#. module: rpc_helper +#. odoo-python +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "RPC call on %s is not allowed" +msgstr "" + +#. module: rpc_helper +#: model_terms:ir.ui.view,arch_db:rpc_helper.view_model_form +msgid "RPC config" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config +msgid "Rpc Config" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config_edit +msgid "Rpc Config Edit" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search +msgid "Smart Search" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changeset_changes +msgid "The number of pending changes of this record" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changesets +msgid "The number of pending changesets of this record" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_changesets +msgid "The overall number of changesets of this record" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset +msgid "User Can See Changeset" +msgstr "" From ef4ecd130f6d61698f868b61dbb99d445c98866c Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Tue, 13 Aug 2024 01:59:57 +0000 Subject: [PATCH 10/18] Translated using Weblate (Spanish (Argentina)) Currently translated at 100.0% (17 of 17 strings) Translation: server-tools-16.0/server-tools-16.0-rpc_helper Translate-URL: https://translation.odoo-community.org/projects/server-tools-16-0/server-tools-16-0-rpc_helper/es_AR/ --- rpc_helper/i18n/es_AR.po | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/rpc_helper/i18n/es_AR.po b/rpc_helper/i18n/es_AR.po index 4d239ca117f..aa2b409b1e6 100644 --- a/rpc_helper/i18n/es_AR.po +++ b/rpc_helper/i18n/es_AR.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2022-09-02 16:07+0000\n" +"PO-Revision-Date: 2024-08-13 04:58+0000\n" "Last-Translator: Ignacio Buioli \n" "Language-Team: none\n" "Language: es_AR\n" @@ -14,7 +14,7 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: \n" "Plural-Forms: nplurals=2; plural=n != 1;\n" -"X-Generator: Weblate 4.3.2\n" +"X-Generator: Weblate 5.6.2\n" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids @@ -41,7 +41,7 @@ msgstr "" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_changesets msgid "Count Changesets" -msgstr "" +msgstr "Cuenta de Configuración de Cambios" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes @@ -95,17 +95,17 @@ msgstr "Búsqueda Inteligente" #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changeset_changes msgid "The number of pending changes of this record" -msgstr "" +msgstr "El número de los cambios pendientes de este registro" #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changesets msgid "The number of pending changesets of this record" -msgstr "" +msgstr "El número de las configuraciones de cambios pendientes de este registro" #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__count_changesets msgid "The overall number of changesets of this record" -msgstr "" +msgstr "El número total de conjuntos de cambios de este registro" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset From 47db0130ba37caf186ae7ca2e56dd515d3869d70 Mon Sep 17 00:00:00 2001 From: mymage Date: Tue, 28 May 2024 07:29:06 +0000 Subject: [PATCH 11/18] Translated using Weblate (Italian) Currently translated at 100.0% (17 of 17 strings) Translation: server-tools-16.0/server-tools-16.0-rpc_helper Translate-URL: https://translation.odoo-community.org/projects/server-tools-16-0/server-tools-16-0-rpc_helper/it/ --- rpc_helper/i18n/it.po | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/rpc_helper/i18n/it.po b/rpc_helper/i18n/it.po index 6eb459e70da..3d8d9c93a75 100644 --- a/rpc_helper/i18n/it.po +++ b/rpc_helper/i18n/it.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"PO-Revision-Date: 2024-04-04 11:35+0000\n" +"PO-Revision-Date: 2024-08-17 10:58+0000\n" "Last-Translator: mymage \n" "Language-Team: none\n" "Language: it\n" @@ -14,17 +14,17 @@ msgstr "" "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" +"X-Generator: Weblate 5.6.2\n" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids msgid "Changeset Changes" -msgstr "" +msgstr "Modifiche dell'insieme di modifiche" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids msgid "Changesets" -msgstr "" +msgstr "Insiemi di modifiche" #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit @@ -41,17 +41,17 @@ msgstr "" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_changesets msgid "Count Changesets" -msgstr "" +msgstr "Conta insiemi di modifiche" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes msgid "Count Pending Changeset Changes" -msgstr "" +msgstr "Conteggio modifiche dell'insieme di modifiche in attesa" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets msgid "Count Pending Changesets" -msgstr "" +msgstr "Conta insiemi di modifiche in attesa" #. module: rpc_helper #: model:ir.model,name:rpc_helper.model_ir_model @@ -95,19 +95,19 @@ msgstr "Ricerca intelligente" #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changeset_changes msgid "The number of pending changes of this record" -msgstr "" +msgstr "Numero di modifiche di questo record in attesa" #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changesets msgid "The number of pending changesets of this record" -msgstr "" +msgstr "Numero di insiemi di modifiche in attesa di questo record" #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__count_changesets msgid "The overall number of changesets of this record" -msgstr "" +msgstr "Numero totale di insiemi di modifiche di questo record" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset msgid "User Can See Changeset" -msgstr "" +msgstr "L'utente può vedere l'insieme delle modifiche" From 9bbabea202c4b5651f3c7d3e1986952b96262c2d Mon Sep 17 00:00:00 2001 From: natuan9 Date: Wed, 20 Nov 2024 09:59:08 +0700 Subject: [PATCH 12/18] [IMP] rpc_helper: pre-commit auto fixes --- rpc_helper/README.rst | 77 +++++++++++-------- rpc_helper/pyproject.toml | 3 + rpc_helper/readme/CONFIGURE.md | 26 +++++++ rpc_helper/readme/CONFIGURE.rst | 23 ------ rpc_helper/readme/CONTRIBUTORS.md | 1 + rpc_helper/readme/CONTRIBUTORS.rst | 1 - .../{DESCRIPTION.rst => DESCRIPTION.md} | 0 rpc_helper/readme/{USAGE.rst => USAGE.md} | 11 +-- rpc_helper/rpc_test_example.py | 4 +- rpc_helper/static/description/index.html | 34 ++++---- rpc_helper/views/ir_model_views.xml | 2 +- 11 files changed, 99 insertions(+), 83 deletions(-) create mode 100644 rpc_helper/pyproject.toml create mode 100644 rpc_helper/readme/CONFIGURE.md delete mode 100644 rpc_helper/readme/CONFIGURE.rst create mode 100644 rpc_helper/readme/CONTRIBUTORS.md delete mode 100644 rpc_helper/readme/CONTRIBUTORS.rst rename rpc_helper/readme/{DESCRIPTION.rst => DESCRIPTION.md} (100%) rename rpc_helper/readme/{USAGE.rst => USAGE.md} (67%) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index dcd8d231303..28dc4b3e458 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -17,13 +17,13 @@ Disable RPC :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github - :target: https://github.com/OCA/server-tools/tree/16.0/rpc_helper + :target: https://github.com/OCA/server-tools/tree/18.0/rpc_helper :alt: OCA/server-tools .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/server-tools-16-0/server-tools-16-0-rpc_helper + :target: https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-rpc_helper :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-tools&target_branch=16.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/server-tools&target_branch=18.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -40,53 +40,62 @@ Configuration Enable debug mode and go to "Technical -> Database Structure -> Models". -Open the model that you like to configure and go to the tab "RPC config". +Open the model that you like to configure and go to the tab "RPC +config". There you see a text field which supports JSON configuration. -The configuration is the same you can pass via decorator. -The only difference is that you have to wrap values in a dictionary -like `{"disable": [...values...]}`. +The configuration is the same you can pass via decorator. The only +difference is that you have to wrap values in a dictionary like +{"disable": [...values...]}. -To disable all calls:: +To disable all calls: - { - "disable": ["all"], - } +:: -To disable only some methods:: + { + "disable": ["all"], + } - { - "disable": ["create", "write", "another_method"], - } +To disable only some methods: -NOTE: on the resulting JSON will be automatically formatted on save for better readability. +:: + + { + "disable": ["create", "write", "another_method"], + } + +NOTE: on the resulting JSON will be automatically formatted on save for +better readability. Usage ===== Via code -~~~~~~~~ +-------- + +Decorate an Odoo model class like this: -Decorate an Odoo model class like this:: +:: - from odoo.addons.rpc_helper.decorator import disable_rpc + from odoo.addons.rpc_helper.decorator import disable_rpc - @disable_rpc() - class AverageModel(models.Model): - _inherit = "avg.model" + @disable_rpc() + class AverageModel(models.Model): + _inherit = "avg.model" This will disable ALL calls. -To selectively disable only some methods:: +To selectively disable only some methods: - @disable_rpc("create", "write", "any_method") - class AverageModel(models.Model): - _inherit = "avg.model" +:: + @disable_rpc("create", "write", "any_method") + class AverageModel(models.Model): + _inherit = "avg.model" -Via `ir.model` configuration -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Via ir.model configuration +-------------------------- See "Configuration" section. @@ -96,7 +105,7 @@ Bug Tracker Bugs are tracked on `GitHub 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -104,17 +113,17 @@ Credits ======= Authors -~~~~~~~ +------- * Camptocamp Contributors -~~~~~~~~~~~~ +------------ -* Simone Orsi +- Simone Orsi Maintainers -~~~~~~~~~~~ +----------- This module is maintained by the OCA. @@ -134,6 +143,6 @@ Current `maintainer `__: |maintainer-simahawk| -This module is part of the `OCA/server-tools `_ project on GitHub. +This module is part of the `OCA/server-tools `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/rpc_helper/pyproject.toml b/rpc_helper/pyproject.toml new file mode 100644 index 00000000000..4231d0cccb3 --- /dev/null +++ b/rpc_helper/pyproject.toml @@ -0,0 +1,3 @@ +[build-system] +requires = ["whool"] +build-backend = "whool.buildapi" diff --git a/rpc_helper/readme/CONFIGURE.md b/rpc_helper/readme/CONFIGURE.md new file mode 100644 index 00000000000..f50dcfd1af9 --- /dev/null +++ b/rpc_helper/readme/CONFIGURE.md @@ -0,0 +1,26 @@ +Enable debug mode and go to "Technical -\> Database Structure -\> +Models". + +Open the model that you like to configure and go to the tab "RPC +config". + +There you see a text field which supports JSON configuration. + +The configuration is the same you can pass via decorator. The only +difference is that you have to wrap values in a dictionary like +{"disable": \[...values...\]}. + +To disable all calls: + + { + "disable": ["all"], + } + +To disable only some methods: + + { + "disable": ["create", "write", "another_method"], + } + +NOTE: on the resulting JSON will be automatically formatted on save for +better readability. diff --git a/rpc_helper/readme/CONFIGURE.rst b/rpc_helper/readme/CONFIGURE.rst deleted file mode 100644 index 84347b529f3..00000000000 --- a/rpc_helper/readme/CONFIGURE.rst +++ /dev/null @@ -1,23 +0,0 @@ -Enable debug mode and go to "Technical -> Database Structure -> Models". - -Open the model that you like to configure and go to the tab "RPC config". - -There you see a text field which supports JSON configuration. - -The configuration is the same you can pass via decorator. -The only difference is that you have to wrap values in a dictionary -like `{"disable": [...values...]}`. - -To disable all calls:: - - { - "disable": ["all"], - } - -To disable only some methods:: - - { - "disable": ["create", "write", "another_method"], - } - -NOTE: on the resulting JSON will be automatically formatted on save for better readability. diff --git a/rpc_helper/readme/CONTRIBUTORS.md b/rpc_helper/readme/CONTRIBUTORS.md new file mode 100644 index 00000000000..2b66303ae2d --- /dev/null +++ b/rpc_helper/readme/CONTRIBUTORS.md @@ -0,0 +1 @@ +- Simone Orsi \<\> diff --git a/rpc_helper/readme/CONTRIBUTORS.rst b/rpc_helper/readme/CONTRIBUTORS.rst deleted file mode 100644 index f1c71bce186..00000000000 --- a/rpc_helper/readme/CONTRIBUTORS.rst +++ /dev/null @@ -1 +0,0 @@ -* Simone Orsi diff --git a/rpc_helper/readme/DESCRIPTION.rst b/rpc_helper/readme/DESCRIPTION.md similarity index 100% rename from rpc_helper/readme/DESCRIPTION.rst rename to rpc_helper/readme/DESCRIPTION.md diff --git a/rpc_helper/readme/USAGE.rst b/rpc_helper/readme/USAGE.md similarity index 67% rename from rpc_helper/readme/USAGE.rst rename to rpc_helper/readme/USAGE.md index ff675247629..f62682ba6bd 100644 --- a/rpc_helper/readme/USAGE.rst +++ b/rpc_helper/readme/USAGE.md @@ -1,7 +1,6 @@ -Via code -~~~~~~~~ +## Via code -Decorate an Odoo model class like this:: +Decorate an Odoo model class like this: from odoo.addons.rpc_helper.decorator import disable_rpc @@ -11,14 +10,12 @@ Decorate an Odoo model class like this:: This will disable ALL calls. -To selectively disable only some methods:: +To selectively disable only some methods: @disable_rpc("create", "write", "any_method") class AverageModel(models.Model): _inherit = "avg.model" - -Via `ir.model` configuration -~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +## Via ir.model configuration See "Configuration" section. diff --git a/rpc_helper/rpc_test_example.py b/rpc_helper/rpc_test_example.py index d48b9a73da3..68b1152dcf3 100644 --- a/rpc_helper/rpc_test_example.py +++ b/rpc_helper/rpc_test_example.py @@ -1,5 +1,5 @@ -"""Basic example script you can use to test your own models for real. -""" +"""Basic example script you can use to test your own models for real.""" + from xmlrpc import client HOST = "127.0.0.1" diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index db421446aff..687c2a3e39b 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -1,4 +1,3 @@ - @@ -9,10 +8,11 @@ /* :Author: David Goodger (goodger@python.org) -:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $ +:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $ :Copyright: This stylesheet has been placed in the public domain. Default cascading style sheet for the HTML output of Docutils. +Despite the name, some widely supported CSS2 features are used. See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to customize this style sheet. @@ -275,7 +275,7 @@ margin-left: 2em ; margin-right: 2em } -pre.code .ln { color: grey; } /* line numbers */ +pre.code .ln { color: gray; } /* 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 } @@ -301,7 +301,7 @@ span.pre { white-space: pre } -span.problematic { +span.problematic, pre.problematic { color: red } span.section-subtitle { @@ -369,7 +369,7 @@

Disable RPC

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:3e95cc80fbae1cb569a46d799e19ecc6edf4f605f8d131a25bed6daf5057b512 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

+

Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

Provide helpers to authorize RPC calls.

Table of contents

@@ -377,7 +377,7 @@

Disable RPC

  • Configuration
  • Usage
  • Bug Tracker
  • @@ -392,11 +392,12 @@

    Disable RPC

    Configuration

    Enable debug mode and go to “Technical -> Database Structure -> Models”.

    -

    Open the model that you like to configure and go to the tab “RPC config”.

    +

    Open the model that you like to configure and go to the tab “RPC +config”.

    There you see a text field which supports JSON configuration.

    -

    The configuration is the same you can pass via decorator. -The only difference is that you have to wrap values in a dictionary -like {“disable”: […values…]}.

    +

    The configuration is the same you can pass via decorator. The only +difference is that you have to wrap values in a dictionary like +{“disable”: […values…]}.

    To disable all calls:

     {
    @@ -409,7 +410,8 @@ 

    Configuration

    "disable": ["create", "write", "another_method"], }
    -

    NOTE: on the resulting JSON will be automatically formatted on save for better readability.

    +

    NOTE: on the resulting JSON will be automatically formatted on save for +better readability.

    Usage

    @@ -432,7 +434,7 @@

    Via code

    -

    Via ir.model configuration

    +

    Via ir.model configuration

    See “Configuration” section.

    @@ -441,7 +443,7 @@

    Bug Tracker

    Bugs are tracked on GitHub 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.

    +feedback.

    Do not contact contributors directly about support or help with technical issues.

    @@ -461,13 +463,15 @@

    Contributors

    Maintainers

    This module is maintained by the OCA.

    -Odoo Community Association + +Odoo Community Association +

    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.

    Current maintainer:

    simahawk

    -

    This module is part of the OCA/server-tools project on GitHub.

    +

    This module is part of the OCA/server-tools project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    diff --git a/rpc_helper/views/ir_model_views.xml b/rpc_helper/views/ir_model_views.xml index d98b45c82e2..ab513647abf 100644 --- a/rpc_helper/views/ir_model_views.xml +++ b/rpc_helper/views/ir_model_views.xml @@ -11,7 +11,7 @@ - Date: Wed, 20 Nov 2024 11:20:04 +0700 Subject: [PATCH 13/18] [MIG] rpc_helper: Migration to 18.0 --- rpc_helper/README.rst | 16 +++++- rpc_helper/__manifest__.py | 2 +- rpc_helper/i18n/es.po | 53 +---------------- rpc_helper/i18n/es_AR.po | 73 +++++++++--------------- rpc_helper/i18n/it.po | 72 ++++++++--------------- rpc_helper/i18n/rpc_helper.pot | 54 +----------------- rpc_helper/patch.py | 8 +-- rpc_helper/readme/CONFIGURE.md | 4 +- rpc_helper/readme/CONTRIBUTORS.md | 3 + rpc_helper/readme/CREDITS.md | 1 + rpc_helper/static/description/index.html | 20 +++++-- rpc_helper/views/ir_model_views.xml | 2 +- 12 files changed, 94 insertions(+), 214 deletions(-) create mode 100644 rpc_helper/readme/CREDITS.md diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 28dc4b3e458..c4903f4aeb7 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -7,7 +7,7 @@ Disable RPC !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:3e95cc80fbae1cb569a46d799e19ecc6edf4f605f8d131a25bed6daf5057b512 + !! source digest: sha256:3f16adf8833c58d64fd85ebe695de4757240613295bd553286ecfc6420f75efe !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png @@ -54,7 +54,7 @@ To disable all calls: :: { - "disable": ["all"], + "disable": ["all"] } To disable only some methods: @@ -62,7 +62,7 @@ To disable only some methods: :: { - "disable": ["create", "write", "another_method"], + "disable": ["create", "write", "another_method"] } NOTE: on the resulting JSON will be automatically formatted on save for @@ -122,6 +122,16 @@ Contributors - Simone Orsi +Trobz + +- Tuan Nguyen + +Other credits +------------- + +The migration of this module from 16.0 to 18.0 was financially supported +by Camptocamp. + Maintainers ----------- diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index b20a92031cd..eed0c691686 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", - "version": "16.0.1.0.0", + "version": "18.0.1.0.0", "development_status": "Beta", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", diff --git a/rpc_helper/i18n/es.po b/rpc_helper/i18n/es.po index e3fba1817fa..833e741f042 100644 --- a/rpc_helper/i18n/es.po +++ b/rpc_helper/i18n/es.po @@ -16,16 +16,6 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 4.17\n" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids -msgid "Changeset Changes" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids -msgid "Changesets" -msgstr "" - #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit msgid "" @@ -38,21 +28,6 @@ msgstr "" "['search', 'do_this']}Para deshabilitar todos los métodos, usa `{'disable: " "['all']}`" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_changesets -msgid "Count Changesets" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes -msgid "Count Pending Changeset Changes" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets -msgid "Count Pending Changesets" -msgstr "" - #. module: rpc_helper #: model:ir.model,name:rpc_helper.model_ir_model msgid "Models" @@ -61,14 +36,12 @@ msgstr "Modelos" #. module: rpc_helper #. odoo-python #: code:addons/rpc_helper/patch.py:0 -#, python-format msgid "Object %s doesn't exist" msgstr "El objeto %s no existe" #. module: rpc_helper #. odoo-python #: code:addons/rpc_helper/patch.py:0 -#, python-format msgid "RPC call on %s is not allowed" msgstr "La llamada RPC en %s no está permitida" @@ -87,27 +60,5 @@ msgstr "Configuración Rpc" msgid "Rpc Config Edit" msgstr "Editar configuración Rpc" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search -msgid "Smart Search" -msgstr "Búsqueda inteligente" - -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changeset_changes -msgid "The number of pending changes of this record" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changesets -msgid "The number of pending changesets of this record" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_changesets -msgid "The overall number of changesets of this record" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset -msgid "User Can See Changeset" -msgstr "" +#~ msgid "Smart Search" +#~ msgstr "Búsqueda inteligente" diff --git a/rpc_helper/i18n/es_AR.po b/rpc_helper/i18n/es_AR.po index aa2b409b1e6..32c3af22ddb 100644 --- a/rpc_helper/i18n/es_AR.po +++ b/rpc_helper/i18n/es_AR.po @@ -16,16 +16,6 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.6.2\n" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids -msgid "Changeset Changes" -msgstr "Cambios del Conjunto de Cambios" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids -msgid "Changesets" -msgstr "Conjunto de Cambios" - #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit msgid "" @@ -38,21 +28,6 @@ msgstr "" "`deshabilitar`. Por ejemplo: {'disable': ['search', 'do_this']} Para " "deshabilitar todos los métodos, use `{'disable: ['all']}`" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_changesets -msgid "Count Changesets" -msgstr "Cuenta de Configuración de Cambios" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes -msgid "Count Pending Changeset Changes" -msgstr "Cuenta de los Cambios Pendientes de los Conjuntos de Cambios" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets -msgid "Count Pending Changesets" -msgstr "Cuenta de los Conjuntos de Cambios Pendientes" - #. module: rpc_helper #: model:ir.model,name:rpc_helper.model_ir_model msgid "Models" @@ -61,14 +36,12 @@ msgstr "Modelos" #. module: rpc_helper #. odoo-python #: code:addons/rpc_helper/patch.py:0 -#, python-format msgid "Object %s doesn't exist" msgstr "El Objeto %s no existe" #. module: rpc_helper #. odoo-python #: code:addons/rpc_helper/patch.py:0 -#, python-format msgid "RPC call on %s is not allowed" msgstr "Las llamadas RPC en %s no están permitidas" @@ -87,30 +60,36 @@ msgstr "Configuración Rpc" msgid "Rpc Config Edit" msgstr "Editar la Configuración Rpc" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search -msgid "Smart Search" -msgstr "Búsqueda Inteligente" +#~ msgid "Changeset Changes" +#~ msgstr "Cambios del Conjunto de Cambios" -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changeset_changes -msgid "The number of pending changes of this record" -msgstr "El número de los cambios pendientes de este registro" +#~ msgid "Changesets" +#~ msgstr "Conjunto de Cambios" -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changesets -msgid "The number of pending changesets of this record" -msgstr "El número de las configuraciones de cambios pendientes de este registro" +#~ msgid "Count Changesets" +#~ msgstr "Cuenta de Configuración de Cambios" -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_changesets -msgid "The overall number of changesets of this record" -msgstr "El número total de conjuntos de cambios de este registro" +#~ msgid "Count Pending Changeset Changes" +#~ msgstr "Cuenta de los Cambios Pendientes de los Conjuntos de Cambios" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset -msgid "User Can See Changeset" -msgstr "El Usuario Puede ver Conjuntos de Cambios" +#~ msgid "Count Pending Changesets" +#~ msgstr "Cuenta de los Conjuntos de Cambios Pendientes" + +#~ msgid "Smart Search" +#~ msgstr "Búsqueda Inteligente" + +#~ msgid "The number of pending changes of this record" +#~ msgstr "El número de los cambios pendientes de este registro" + +#~ msgid "The number of pending changesets of this record" +#~ msgstr "" +#~ "El número de las configuraciones de cambios pendientes de este registro" + +#~ msgid "The overall number of changesets of this record" +#~ msgstr "El número total de conjuntos de cambios de este registro" + +#~ msgid "User Can See Changeset" +#~ msgstr "El Usuario Puede ver Conjuntos de Cambios" #~ msgid "Display Name" #~ msgstr "Mostrar Nombre" diff --git a/rpc_helper/i18n/it.po b/rpc_helper/i18n/it.po index 3d8d9c93a75..9e180473953 100644 --- a/rpc_helper/i18n/it.po +++ b/rpc_helper/i18n/it.po @@ -16,16 +16,6 @@ msgstr "" "Plural-Forms: nplurals=2; plural=n != 1;\n" "X-Generator: Weblate 5.6.2\n" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids -msgid "Changeset Changes" -msgstr "Modifiche dell'insieme di modifiche" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids -msgid "Changesets" -msgstr "Insiemi di modifiche" - #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit msgid "" @@ -38,21 +28,6 @@ msgstr "" "{'disable': ['search', 'do_this']} Pr disabilitare tutti i metodi usare " "`{'disable: ['all']}`" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_changesets -msgid "Count Changesets" -msgstr "Conta insiemi di modifiche" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes -msgid "Count Pending Changeset Changes" -msgstr "Conteggio modifiche dell'insieme di modifiche in attesa" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets -msgid "Count Pending Changesets" -msgstr "Conta insiemi di modifiche in attesa" - #. module: rpc_helper #: model:ir.model,name:rpc_helper.model_ir_model msgid "Models" @@ -61,14 +36,12 @@ msgstr "Modelli" #. module: rpc_helper #. odoo-python #: code:addons/rpc_helper/patch.py:0 -#, python-format msgid "Object %s doesn't exist" msgstr "L'oggetto %s non esiste" #. module: rpc_helper #. odoo-python #: code:addons/rpc_helper/patch.py:0 -#, python-format msgid "RPC call on %s is not allowed" msgstr "La chiamata RPC su %s non è consentita" @@ -87,27 +60,32 @@ msgstr "Configurazione RPC" msgid "Rpc Config Edit" msgstr "Mdifica configurazione RPC" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search -msgid "Smart Search" -msgstr "Ricerca intelligente" +#~ msgid "Changeset Changes" +#~ msgstr "Modifiche dell'insieme di modifiche" -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changeset_changes -msgid "The number of pending changes of this record" -msgstr "Numero di modifiche di questo record in attesa" +#~ msgid "Changesets" +#~ msgstr "Insiemi di modifiche" -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changesets -msgid "The number of pending changesets of this record" -msgstr "Numero di insiemi di modifiche in attesa di questo record" +#~ msgid "Count Changesets" +#~ msgstr "Conta insiemi di modifiche" -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_changesets -msgid "The overall number of changesets of this record" -msgstr "Numero totale di insiemi di modifiche di questo record" +#~ msgid "Count Pending Changeset Changes" +#~ msgstr "Conteggio modifiche dell'insieme di modifiche in attesa" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset -msgid "User Can See Changeset" -msgstr "L'utente può vedere l'insieme delle modifiche" +#~ msgid "Count Pending Changesets" +#~ msgstr "Conta insiemi di modifiche in attesa" + +#~ msgid "Smart Search" +#~ msgstr "Ricerca intelligente" + +#~ msgid "The number of pending changes of this record" +#~ msgstr "Numero di modifiche di questo record in attesa" + +#~ msgid "The number of pending changesets of this record" +#~ msgstr "Numero di insiemi di modifiche in attesa di questo record" + +#~ msgid "The overall number of changesets of this record" +#~ msgstr "Numero totale di insiemi di modifiche di questo record" + +#~ msgid "User Can See Changeset" +#~ msgstr "L'utente può vedere l'insieme delle modifiche" diff --git a/rpc_helper/i18n/rpc_helper.pot b/rpc_helper/i18n/rpc_helper.pot index 2d6b7e2709e..39368d3d036 100644 --- a/rpc_helper/i18n/rpc_helper.pot +++ b/rpc_helper/i18n/rpc_helper.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 16.0\n" +"Project-Id-Version: Odoo Server 18.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -13,16 +13,6 @@ msgstr "" "Content-Transfer-Encoding: \n" "Plural-Forms: \n" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_change_ids -msgid "Changeset Changes" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__changeset_ids -msgid "Changesets" -msgstr "" - #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit msgid "" @@ -31,21 +21,6 @@ msgid "" "'do_this']}To disable all methods, use `{'disable: ['all']}`" msgstr "" -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_changesets -msgid "Count Changesets" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changeset_changes -msgid "Count Pending Changeset Changes" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__count_pending_changesets -msgid "Count Pending Changesets" -msgstr "" - #. module: rpc_helper #: model:ir.model,name:rpc_helper.model_ir_model msgid "Models" @@ -54,14 +29,12 @@ msgstr "" #. module: rpc_helper #. odoo-python #: code:addons/rpc_helper/patch.py:0 -#, python-format msgid "Object %s doesn't exist" msgstr "" #. module: rpc_helper #. odoo-python #: code:addons/rpc_helper/patch.py:0 -#, python-format msgid "RPC call on %s is not allowed" msgstr "" @@ -79,28 +52,3 @@ msgstr "" #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config_edit msgid "Rpc Config Edit" msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search -msgid "Smart Search" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changeset_changes -msgid "The number of pending changes of this record" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_pending_changesets -msgid "The number of pending changesets of this record" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,help:rpc_helper.field_ir_model__count_changesets -msgid "The overall number of changesets of this record" -msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__user_can_see_changeset -msgid "User Can See Changeset" -msgstr "" diff --git a/rpc_helper/patch.py b/rpc_helper/patch.py index c3a05691b9b..419b65d6963 100644 --- a/rpc_helper/patch.py +++ b/rpc_helper/patch.py @@ -4,18 +4,18 @@ import odoo from odoo.exceptions import UserError -from odoo.tools.translate import _ def protected__execute_cr(cr, uid, obj, method, *args, **kw): # Same as original func in odoo.service.model.execute_cr cr.reset() - recs = odoo.api.Environment(cr, uid, {}).get(obj) + env = odoo.api.Environment(cr, uid, {}) + recs = env.get(obj) if recs is None: - raise UserError(_("Object %s doesn't exist", obj)) + raise UserError(env._("Object %s doesn't exist", obj)) # custom code starts here if not _rpc_allowed(recs, method): - raise UserError(_("RPC call on %s is not allowed", obj)) + raise UserError(env._("RPC call on %s is not allowed", obj)) return protected__execute_cr._orig__execute_cr(cr, uid, obj, method, *args, **kw) diff --git a/rpc_helper/readme/CONFIGURE.md b/rpc_helper/readme/CONFIGURE.md index f50dcfd1af9..a0d3a24f8b6 100644 --- a/rpc_helper/readme/CONFIGURE.md +++ b/rpc_helper/readme/CONFIGURE.md @@ -13,13 +13,13 @@ difference is that you have to wrap values in a dictionary like To disable all calls: { - "disable": ["all"], + "disable": ["all"] } To disable only some methods: { - "disable": ["create", "write", "another_method"], + "disable": ["create", "write", "another_method"] } NOTE: on the resulting JSON will be automatically formatted on save for diff --git a/rpc_helper/readme/CONTRIBUTORS.md b/rpc_helper/readme/CONTRIBUTORS.md index 2b66303ae2d..db0b3806a76 100644 --- a/rpc_helper/readme/CONTRIBUTORS.md +++ b/rpc_helper/readme/CONTRIBUTORS.md @@ -1 +1,4 @@ - Simone Orsi \<\> + +Trobz +- Tuan Nguyen \<\> \ No newline at end of file diff --git a/rpc_helper/readme/CREDITS.md b/rpc_helper/readme/CREDITS.md new file mode 100644 index 00000000000..5683eba414e --- /dev/null +++ b/rpc_helper/readme/CREDITS.md @@ -0,0 +1 @@ +The migration of this module from 16.0 to 18.0 was financially supported by Camptocamp. \ No newline at end of file diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index 687c2a3e39b..8eb408f3956 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -367,7 +367,7 @@

    Disable RPC

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:3e95cc80fbae1cb569a46d799e19ecc6edf4f605f8d131a25bed6daf5057b512 +!! source digest: sha256:3f16adf8833c58d64fd85ebe695de4757240613295bd553286ecfc6420f75efe !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

    Provide helpers to authorize RPC calls.

    @@ -384,7 +384,8 @@

    Disable RPC

  • Credits
  • @@ -401,13 +402,13 @@

    Configuration

    To disable all calls:

     {
    -    "disable": ["all"],
    +    "disable": ["all"]
     }
     

    To disable only some methods:

     {
    -    "disable": ["create", "write", "another_method"],
    +    "disable": ["create", "write", "another_method"]
     }
     

    NOTE: on the resulting JSON will be automatically formatted on save for @@ -459,9 +460,18 @@

    Contributors

    +

    Trobz

    + + +
    +

    Other credits

    +

    The migration of this module from 16.0 to 18.0 was financially supported +by Camptocamp.

    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association diff --git a/rpc_helper/views/ir_model_views.xml b/rpc_helper/views/ir_model_views.xml index ab513647abf..dd0a6efd3c2 100644 --- a/rpc_helper/views/ir_model_views.xml +++ b/rpc_helper/views/ir_model_views.xml @@ -14,7 +14,7 @@ From 9b51e62b966db2ff16e72db4530cc0d6b8f9e6c9 Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Wed, 5 Feb 2025 18:23:47 +0100 Subject: [PATCH 14/18] [FIX] rpc_helper: mute warning logs to keep checklog-odoo happy Fixes ``` INFO odoo odoo.addons.rpc_helper.tests.test_xmlrpc: Starting TestXMLRPC.test_xmlrpc_can_search_create_blocked__ir_model ... INFO odoo werkzeug: 127.0.0.1 - - [04/Feb/2025 13:39:13] "POST /xmlrpc/2/object HTTP/1.1" 200 - 22 0.006 0.437 WARNING odoo odoo.http: RPC call on res.partner is not allowed ``` New logging is due to https://github.com/odoo/odoo/commit/a65b1d830455a577b83ac658b7c12d086f468c26 --- rpc_helper/README.rst | 2 +- rpc_helper/__manifest__.py | 2 +- rpc_helper/i18n/es.po | 6 ++++-- rpc_helper/i18n/es_AR.po | 8 +++++--- rpc_helper/i18n/it.po | 8 +++++--- rpc_helper/i18n/rpc_helper.pot | 5 +++++ rpc_helper/static/description/index.html | 2 +- rpc_helper/tests/test_xmlrpc.py | 19 +++++++++++++------ 8 files changed, 35 insertions(+), 17 deletions(-) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index c4903f4aeb7..72f4074a29c 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -7,7 +7,7 @@ Disable RPC !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:3f16adf8833c58d64fd85ebe695de4757240613295bd553286ecfc6420f75efe + !! source digest: sha256:a4e80621f60f9df5e0de43002c62f60ebd89bda221a9e5c31ffa35e3cc4dd9f7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index eed0c691686..cf1324355c5 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", - "version": "18.0.1.0.0", + "version": "18.0.1.0.1", "development_status": "Beta", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", diff --git a/rpc_helper/i18n/es.po b/rpc_helper/i18n/es.po index 833e741f042..01de6741a3b 100644 --- a/rpc_helper/i18n/es.po +++ b/rpc_helper/i18n/es.po @@ -60,5 +60,7 @@ msgstr "Configuración Rpc" msgid "Rpc Config Edit" msgstr "Editar configuración Rpc" -#~ msgid "Smart Search" -#~ msgstr "Búsqueda inteligente" +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search +msgid "Smart Search" +msgstr "Búsqueda inteligente" diff --git a/rpc_helper/i18n/es_AR.po b/rpc_helper/i18n/es_AR.po index 32c3af22ddb..f6e4464035f 100644 --- a/rpc_helper/i18n/es_AR.po +++ b/rpc_helper/i18n/es_AR.po @@ -60,6 +60,11 @@ msgstr "Configuración Rpc" msgid "Rpc Config Edit" msgstr "Editar la Configuración Rpc" +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search +msgid "Smart Search" +msgstr "Búsqueda Inteligente" + #~ msgid "Changeset Changes" #~ msgstr "Cambios del Conjunto de Cambios" @@ -75,9 +80,6 @@ msgstr "Editar la Configuración Rpc" #~ msgid "Count Pending Changesets" #~ msgstr "Cuenta de los Conjuntos de Cambios Pendientes" -#~ msgid "Smart Search" -#~ msgstr "Búsqueda Inteligente" - #~ msgid "The number of pending changes of this record" #~ msgstr "El número de los cambios pendientes de este registro" diff --git a/rpc_helper/i18n/it.po b/rpc_helper/i18n/it.po index 9e180473953..7c1245a3a46 100644 --- a/rpc_helper/i18n/it.po +++ b/rpc_helper/i18n/it.po @@ -60,6 +60,11 @@ msgstr "Configurazione RPC" msgid "Rpc Config Edit" msgstr "Mdifica configurazione RPC" +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search +msgid "Smart Search" +msgstr "Ricerca intelligente" + #~ msgid "Changeset Changes" #~ msgstr "Modifiche dell'insieme di modifiche" @@ -75,9 +80,6 @@ msgstr "Mdifica configurazione RPC" #~ msgid "Count Pending Changesets" #~ msgstr "Conta insiemi di modifiche in attesa" -#~ msgid "Smart Search" -#~ msgstr "Ricerca intelligente" - #~ msgid "The number of pending changes of this record" #~ msgstr "Numero di modifiche di questo record in attesa" diff --git a/rpc_helper/i18n/rpc_helper.pot b/rpc_helper/i18n/rpc_helper.pot index 39368d3d036..5b1db383c6d 100644 --- a/rpc_helper/i18n/rpc_helper.pot +++ b/rpc_helper/i18n/rpc_helper.pot @@ -52,3 +52,8 @@ msgstr "" #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config_edit msgid "Rpc Config Edit" msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search +msgid "Smart Search" +msgstr "" diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index 8eb408f3956..4a93d38e452 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -367,7 +367,7 @@

    Disable RPC

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:3f16adf8833c58d64fd85ebe695de4757240613295bd553286ecfc6420f75efe +!! source digest: sha256:a4e80621f60f9df5e0de43002c62f60ebd89bda221a9e5c31ffa35e3cc4dd9f7 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

    Provide helpers to authorize RPC calls.

    diff --git a/rpc_helper/tests/test_xmlrpc.py b/rpc_helper/tests/test_xmlrpc.py index bf18ea26fa3..c659673f6fa 100644 --- a/rpc_helper/tests/test_xmlrpc.py +++ b/rpc_helper/tests/test_xmlrpc.py @@ -7,6 +7,7 @@ import xmlrpc from odoo.tests import common +from odoo.tools import mute_logger @common.tagged("post_install", "-at_install") @@ -46,10 +47,12 @@ def test_xmlrpc_all_blocked(self): self._set_disable(("all",)) msg = "RPC call on res.partner is not allowed" with self.assertRaisesRegex(xmlrpc.client.Fault, msg): - self._rpc_call("search") + with mute_logger("odoo.http"): + self._rpc_call("search") with self.assertRaisesRegex(xmlrpc.client.Fault, msg): - self._rpc_call("create", vals=[{"name": "Foo"}]) + with mute_logger("odoo.http"): + self._rpc_call("create", vals=[{"name": "Foo"}]) def test_xmlrpc_can_search_create_blocked(self): self._set_disable(("create",)) @@ -57,16 +60,19 @@ def test_xmlrpc_can_search_create_blocked(self): msg = "RPC call on res.partner is not allowed" with self.assertRaisesRegex(xmlrpc.client.Fault, msg): - self._rpc_call("create", vals=[{"name": "Foo"}]) + with mute_logger("odoo.http"): + self._rpc_call("create", vals=[{"name": "Foo"}]) def test_xmlrpc_all_blocked__ir_model(self): self._set_disable_on_model(("all",)) msg = "RPC call on res.partner is not allowed" with self.assertRaisesRegex(xmlrpc.client.Fault, msg): - self._rpc_call("search") + with mute_logger("odoo.http"): + self._rpc_call("search") with self.assertRaisesRegex(xmlrpc.client.Fault, msg): - self._rpc_call("create", vals=[{"name": "Foo"}]) + with mute_logger("odoo.http"): + self._rpc_call("create", vals=[{"name": "Foo"}]) def test_xmlrpc_can_search_create_blocked__ir_model(self): self._set_disable_on_model(("create",)) @@ -74,4 +80,5 @@ def test_xmlrpc_can_search_create_blocked__ir_model(self): msg = "RPC call on res.partner is not allowed" with self.assertRaisesRegex(xmlrpc.client.Fault, msg): - self._rpc_call("create", vals=[{"name": "Foo"}]) + with mute_logger("odoo.http"): + self._rpc_call("create", vals=[{"name": "Foo"}]) From 269cb85864dffdea80bd4f245f56358da977d06c Mon Sep 17 00:00:00 2001 From: Stefan Rijnhart Date: Thu, 19 Feb 2026 21:26:34 +0100 Subject: [PATCH 15/18] [REF] rpc_helper: adapt test to new Odoo test patch checker --- rpc_helper/README.rst | 8 ++++-- rpc_helper/__manifest__.py | 2 +- rpc_helper/static/description/index.html | 36 ++++++++++++++---------- rpc_helper/tests/test_xmlrpc.py | 3 +- 4 files changed, 30 insertions(+), 19 deletions(-) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 72f4074a29c..75ba126583e 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -1,3 +1,7 @@ +.. image:: https://odoo-community.org/readme-banner-image + :target: https://odoo-community.org/get-involved?utm_source=readme + :alt: Odoo Community Association + =========== Disable RPC =========== @@ -7,13 +11,13 @@ Disable RPC !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:a4e80621f60f9df5e0de43002c62f60ebd89bda221a9e5c31ffa35e3cc4dd9f7 + !! source digest: sha256:d71c6c86a2635b277c84c2a0eeeb2fd97802d45117fe1204a3314cc158f09b6d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |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-LGPL--3-blue.png +.. |badge2| image:: https://img.shields.io/badge/license-LGPL--3-blue.png :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index cf1324355c5..bb04abac0e5 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", - "version": "18.0.1.0.1", + "version": "18.0.1.0.2", "development_status": "Beta", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index 4a93d38e452..4d964698859 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -3,7 +3,7 @@ -Disable RPC +README.rst -
    -

    Disable RPC

    +
    + + +Odoo Community Association + +
    +

    Disable RPC

    -

    Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

    +

    Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

    Provide helpers to authorize RPC calls.

    Table of contents

    @@ -391,7 +396,7 @@

    Disable RPC

    -

    Configuration

    +

    Configuration

    Enable debug mode and go to “Technical -> Database Structure -> Models”.

    Open the model that you like to configure and go to the tab “RPC config”.

    @@ -415,9 +420,9 @@

    Configuration

    better readability.

    -

    Usage

    +

    Usage

    -

    Via code

    +

    Via code

    Decorate an Odoo model class like this:

     from odoo.addons.rpc_helper.decorator import disable_rpc
    @@ -435,12 +440,12 @@ 

    Via code

    -

    Via ir.model configuration

    +

    Via ir.model configuration

    See “Configuration” section.

    -

    Bug Tracker

    +

    Bug Tracker

    Bugs are tracked on GitHub 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 @@ -448,15 +453,15 @@

    Bug Tracker

    Do not contact contributors directly about support or help with technical issues.

    -

    Credits

    +

    Credits

    -

    Authors

    +

    Authors

    • Camptocamp
    -

    Contributors

    +

    Contributors

    @@ -466,12 +471,12 @@

    Contributors

    -

    Other credits

    +

    Other credits

    The migration of this module from 16.0 to 18.0 was financially supported by Camptocamp.

    -

    Maintainers

    +

    Maintainers

    This module is maintained by the OCA.

    Odoo Community Association @@ -486,5 +491,6 @@

    Maintainers

    +
    diff --git a/rpc_helper/tests/test_xmlrpc.py b/rpc_helper/tests/test_xmlrpc.py index c659673f6fa..014797d40a3 100644 --- a/rpc_helper/tests/test_xmlrpc.py +++ b/rpc_helper/tests/test_xmlrpc.py @@ -18,7 +18,8 @@ def setUpClass(cls): cls.admin_uid = cls.env.ref("base.user_admin").id def _set_disable(self, val): - type(self.env["res.partner"])._disable_rpc = val + with mute_logger("odoo.test.common"): # Mute test patch logging + type(self.env["res.partner"])._disable_rpc = val def _set_disable_on_model(self, val): self.env["ir.model"]._get("res.partner").rpc_config_edit = json.dumps( From 0a1254cfc07f322cb660de1e68cb95f5ab6f6fad Mon Sep 17 00:00:00 2001 From: Maksym Yankin Date: Tue, 28 Apr 2026 12:37:48 +0300 Subject: [PATCH 16/18] [MIG] rpc_helper: Migration to 19.0 --- rpc_helper/README.rst | 13 ++++++------- rpc_helper/__manifest__.py | 2 +- rpc_helper/models/ir_model.py | 6 ++++++ rpc_helper/readme/CREDITS.md | 1 - rpc_helper/rpc_test_example.py | 2 +- rpc_helper/static/description/index.html | 8 +++----- rpc_helper/tests/test_xmlrpc.py | 7 ++++--- 7 files changed, 21 insertions(+), 18 deletions(-) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 75ba126583e..fa8a24a36a4 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -21,13 +21,13 @@ Disable RPC :target: http://www.gnu.org/licenses/lgpl-3.0-standalone.html :alt: License: LGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github - :target: https://github.com/OCA/server-tools/tree/18.0/rpc_helper + :target: https://github.com/OCA/server-tools/tree/19.0/rpc_helper :alt: OCA/server-tools .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/server-tools-18-0/server-tools-18-0-rpc_helper + :target: https://translation.odoo-community.org/projects/server-tools-19-0/server-tools-19-0-rpc_helper :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-tools&target_branch=18.0 + :target: https://runboat.odoo-community.org/builds?repo=OCA/server-tools&target_branch=19.0 :alt: Try me on Runboat |badge1| |badge2| |badge3| |badge4| |badge5| @@ -109,7 +109,7 @@ Bug Tracker Bugs are tracked on `GitHub 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 `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -133,8 +133,7 @@ Trobz Other credits ------------- -The migration of this module from 16.0 to 18.0 was financially supported -by Camptocamp. + Maintainers ----------- @@ -157,6 +156,6 @@ Current `maintainer `__: |maintainer-simahawk| -This module is part of the `OCA/server-tools `_ project on GitHub. +This module is part of the `OCA/server-tools `_ project on GitHub. You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/rpc_helper/__manifest__.py b/rpc_helper/__manifest__.py index bb04abac0e5..9d691d54546 100644 --- a/rpc_helper/__manifest__.py +++ b/rpc_helper/__manifest__.py @@ -5,7 +5,7 @@ { "name": "Disable RPC", "summary": """Helpers for disabling RPC calls""", - "version": "18.0.1.0.2", + "version": "19.0.1.0.0", "development_status": "Beta", "license": "LGPL-3", "website": "https://github.com/OCA/server-tools", diff --git a/rpc_helper/models/ir_model.py b/rpc_helper/models/ir_model.py index 6913b33bc1f..7a658fd427d 100644 --- a/rpc_helper/models/ir_model.py +++ b/rpc_helper/models/ir_model.py @@ -42,3 +42,9 @@ def _load_rpc_config(self): def _get_rpc_config(self, model): rec = self._get(model) return rec.rpc_config or {} + + def write(self, vals): + res = super().write(vals) + if "rpc_config_edit" in vals: + self.env.registry.clear_cache() + return res diff --git a/rpc_helper/readme/CREDITS.md b/rpc_helper/readme/CREDITS.md index 5683eba414e..e69de29bb2d 100644 --- a/rpc_helper/readme/CREDITS.md +++ b/rpc_helper/readme/CREDITS.md @@ -1 +0,0 @@ -The migration of this module from 16.0 to 18.0 was financially supported by Camptocamp. \ No newline at end of file diff --git a/rpc_helper/rpc_test_example.py b/rpc_helper/rpc_test_example.py index 68b1152dcf3..aafa959f185 100644 --- a/rpc_helper/rpc_test_example.py +++ b/rpc_helper/rpc_test_example.py @@ -6,7 +6,7 @@ PORT = 8069 DB_NAME = "odoodb" -url = "http://%s:%d/xmlrpc/2/" % (HOST, PORT) +url = f"http://{HOST}:{PORT}/xmlrpc/2/" xmlrpc_common = client.ServerProxy(url + "common") xmlrpc_db = client.ServerProxy(url + "db") xmlrpc_object = client.ServerProxy(url + "object") diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index 4d964698859..71a8393d224 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -374,7 +374,7 @@

    Disable RPC

    !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! source digest: sha256:d71c6c86a2635b277c84c2a0eeeb2fd97802d45117fe1204a3314cc158f09b6d !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

    Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

    +

    Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

    Provide helpers to authorize RPC calls.

    Table of contents

    @@ -449,7 +449,7 @@

    Bug Tracker

    Bugs are tracked on GitHub 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.

    +feedback.

    Do not contact contributors directly about support or help with technical issues.

    @@ -472,8 +472,6 @@

    Contributors

    Other credits

    -

    The migration of this module from 16.0 to 18.0 was financially supported -by Camptocamp.

    Maintainers

    @@ -486,7 +484,7 @@

    Maintainers

    promote its widespread use.

    Current maintainer:

    simahawk

    -

    This module is part of the OCA/server-tools project on GitHub.

    +

    This module is part of the OCA/server-tools project on GitHub.

    You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

    diff --git a/rpc_helper/tests/test_xmlrpc.py b/rpc_helper/tests/test_xmlrpc.py index 014797d40a3..b3feb931442 100644 --- a/rpc_helper/tests/test_xmlrpc.py +++ b/rpc_helper/tests/test_xmlrpc.py @@ -36,9 +36,10 @@ def tearDown(self): def _rpc_call(self, method, vals=None): o = self.xmlrpc_object db_name = common.get_db_name() - return o.execute( - db_name, self.admin_uid, "admin", "res.partner", method, vals or [] - ) + with mute_logger("odoo.addons.rpc.controllers.xmlrpc"): + return o.execute( + db_name, self.admin_uid, "admin", "res.partner", method, vals or [] + ) def test_xmlrpc_search_normal(self): res = self._rpc_call("search") From a50361d8cea223ee3a80479f9773c217973d8360 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Tue, 28 Apr 2026 12:03:32 +0000 Subject: [PATCH 17/18] [UPD] Update rpc_helper.pot --- rpc_helper/i18n/rpc_helper.pot | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/rpc_helper/i18n/rpc_helper.pot b/rpc_helper/i18n/rpc_helper.pot index 5b1db383c6d..be5bc8a2920 100644 --- a/rpc_helper/i18n/rpc_helper.pot +++ b/rpc_helper/i18n/rpc_helper.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 18.0\n" +"Project-Id-Version: Odoo Server 19.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" @@ -21,6 +21,16 @@ msgid "" "'do_this']}To disable all methods, use `{'disable: ['all']}`" msgstr "" +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__display_name +msgid "Display Name" +msgstr "" + +#. module: rpc_helper +#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__id +msgid "ID" +msgstr "" + #. module: rpc_helper #: model:ir.model,name:rpc_helper.model_ir_model msgid "Models" @@ -52,8 +62,3 @@ msgstr "" #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config_edit msgid "Rpc Config Edit" msgstr "" - -#. module: rpc_helper -#: model:ir.model.fields,field_description:rpc_helper.field_ir_model__smart_search -msgid "Smart Search" -msgstr "" From 44851d7a4633a3bb04660424a7c9dae5f6bade6e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 28 Apr 2026 12:07:12 +0000 Subject: [PATCH 18/18] [BOT] post-merge updates --- README.md | 1 + rpc_helper/README.rst | 2 +- rpc_helper/static/description/index.html | 2 +- setup/_metapackage/pyproject.toml | 3 ++- 4 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 21dd2359aa1..7f97c760e2e 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ addon | version | maintainers | summary [module_auto_update](module_auto_update/) | 19.0.1.0.0 | | Automatically update Odoo modules [module_change_auto_install](module_change_auto_install/) | 19.0.1.0.0 | legalsylvain | Customize auto installables modules by configuration [onchange_helper](onchange_helper/) | 19.0.1.0.0 | | Technical module that ease execution of onchange in Python code +[rpc_helper](rpc_helper/) | 19.0.1.0.0 | simahawk | Helpers for disabling RPC calls [sequence_python](sequence_python/) | 19.0.1.0.0 | | Calculate a sequence number from a Python expression [session_db](session_db/) | 19.0.1.0.0 | sbidoul | Store sessions in DB [test_auditlog](test_auditlog/) | 19.0.1.0.0 | | Additional unit tests for Audit Log based on accounting models diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index fa8a24a36a4..e515cd3738c 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -11,7 +11,7 @@ Disable RPC !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! - !! source digest: sha256:d71c6c86a2635b277c84c2a0eeeb2fd97802d45117fe1204a3314cc158f09b6d + !! source digest: sha256:cf14fb401696321d4416e21e70663ab2c4685f77889013cf9b648c168a2270e8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index 71a8393d224..6c8d611ea5e 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -372,7 +372,7 @@

    Disable RPC

    !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -!! source digest: sha256:d71c6c86a2635b277c84c2a0eeeb2fd97802d45117fe1204a3314cc158f09b6d +!! source digest: sha256:cf14fb401696321d4416e21e70663ab2c4685f77889013cf9b648c168a2270e8 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->

    Beta License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runboat

    Provide helpers to authorize RPC calls.

    diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml index 1541b28fc57..8459dabca85 100644 --- a/setup/_metapackage/pyproject.toml +++ b/setup/_metapackage/pyproject.toml @@ -1,6 +1,6 @@ [project] name = "odoo-addons-oca-server-tools" -version = "19.0.20260330.0" +version = "19.0.20260428.0" dependencies = [ "odoo-addon-auditlog==19.0.*", "odoo-addon-base_cron_exclusion==19.0.*", @@ -16,6 +16,7 @@ dependencies = [ "odoo-addon-module_auto_update==19.0.*", "odoo-addon-module_change_auto_install==19.0.*", "odoo-addon-onchange_helper==19.0.*", + "odoo-addon-rpc_helper==19.0.*", "odoo-addon-sequence_python==19.0.*", "odoo-addon-session_db==19.0.*", "odoo-addon-test_auditlog==19.0.*",