From 1eddf6e0dc085598fa206dff76ee02eef4078800 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Fri, 18 Feb 2022 16:16:59 +0100 Subject: [PATCH 01/33] 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/tests/__init__.py | 2 ++ rpc_helper/tests/test_decorator.py | 34 +++++++++++++++++++ rpc_helper/tests/test_xmlrpc.py | 53 ++++++++++++++++++++++++++++++ 13 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/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 000000000..89bcd6c21 --- /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 000000000..99ac2b54f --- /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 000000000..f5b774941 --- /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 000000000..99c875c90 --- /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 000000000..e6dbad6da --- /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 000000000..b939b06c7 --- /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 000000000..f1c71bce1 --- /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 000000000..e5078d952 --- /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 000000000..56cfd7de2 --- /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 000000000..35680bd0b --- /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/tests/__init__.py b/rpc_helper/tests/__init__.py new file mode 100644 index 000000000..c60563b6a --- /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 000000000..1ee3ee54f --- /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 000000000..bc51f52ca --- /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 982a0887a723d1a82ac176967a3893b6c29a7407 Mon Sep 17 00:00:00 2001 From: oca-travis Date: Fri, 18 Feb 2022 16:58:32 +0000 Subject: [PATCH 02/33] [UPD] Update rpc_helper.pot --- rpc_helper/i18n/rpc_helper.pot | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 rpc_helper/i18n/rpc_helper.pot diff --git a/rpc_helper/i18n/rpc_helper.pot b/rpc_helper/i18n/rpc_helper.pot new file mode 100644 index 000000000..da30b640b --- /dev/null +++ b/rpc_helper/i18n/rpc_helper.pot @@ -0,0 +1,26 @@ +# 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" +"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 +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "Object %s doesn't exist" +msgstr "" + +#. module: rpc_helper +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "RPC call on %s is not allowed" +msgstr "" From 109c8eafc028467f2c5e622684666aa5cc23232e Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 18 Feb 2022 17:18:12 +0000 Subject: [PATCH 03/33] [UPD] README.rst --- rpc_helper/README.rst | 106 +++++- rpc_helper/static/description/index.html | 446 +++++++++++++++++++++++ 2 files changed, 551 insertions(+), 1 deletion(-) create mode 100644 rpc_helper/static/description/index.html diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 89bcd6c21..8e3d321a2 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -1 +1,105 @@ -wait for the bot ;) +=========== +Disable RPC +=========== + +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + +.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png + :target: https://odoo-community.org/page/development-status + :alt: Alpha +.. |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/14.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-14-0/server-tools-14-0-rpc_helper + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/149/14.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +Provide helpers to authorize RPC calls. + +.. IMPORTANT:: + This is an alpha version, the data model and design can change at any time without warning. + Only for development or testing purpose, do not use in production. + `More details on development status `_ + +**Table of contents** + +.. contents:: + :local: + +Usage +===== + +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" + +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 smashing 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/static/description/index.html b/rpc_helper/static/description/index.html new file mode 100644 index 000000000..b15c5ee01 --- /dev/null +++ b/rpc_helper/static/description/index.html @@ -0,0 +1,446 @@ + + + + + + +Disable RPC + + + +
+

Disable RPC

+ + +

Alpha License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runbot

+

Provide helpers to authorize RPC calls.

+
+

Important

+

This is an alpha version, the data model and design can change at any time without warning. +Only for development or testing purpose, do not use in production. +More details on development status

+
+

Table of contents

+ +
+

Usage

+

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"
+
+
+
+

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 smashing 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 c82bf7d56b406b78991767342a77d4a214b5b12d Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 18 Feb 2022 17:18:13 +0000 Subject: [PATCH 04/33] [ADD] icon.png --- rpc_helper/static/description/icon.png | Bin 0 -> 9455 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 rpc_helper/static/description/icon.png 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 From 22b254a627be99876d938e4363d7bc06720e4a34 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Mon, 21 Feb 2022 09:52:51 +0100 Subject: [PATCH 05/33] 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 99ac2b54f..5bf67492b 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 f5b774941..f2d6ec427 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 000000000..413bb2380 --- /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 000000000..6913b33bc --- /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 b939b06c7..3eb987da8 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 000000000..84347b529 --- /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 56cfd7de2..ff6752476 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 35680bd0b..d48b9a73d 100644 --- a/rpc_helper/rpc_test_example.py +++ b/rpc_helper/rpc_test_example.py @@ -4,7 +4,7 @@ from xmlrpc import client 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 bc51f52ca..e442fbe2a 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 @@ class TestXMLRPC(common.HttpSavepointCase): 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 @@ class TestXMLRPC(common.HttpSavepointCase): 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 000000000..d98b45c82 --- /dev/null +++ b/rpc_helper/views/ir_model_views.xml @@ -0,0 +1,23 @@ + + + + + rpc_helper view_model_form + ir.model + + + + + + + + + + From d1cbfdac4a61246d4263c02ecebdb2ccfc6e4ffd Mon Sep 17 00:00:00 2001 From: oca-ci Date: Fri, 4 Mar 2022 17:12:09 +0000 Subject: [PATCH 06/33] [UPD] Update rpc_helper.pot --- rpc_helper/i18n/rpc_helper.pot | 73 ++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) diff --git a/rpc_helper/i18n/rpc_helper.pot b/rpc_helper/i18n/rpc_helper.pot index da30b640b..060291fa5 100644 --- a/rpc_helper/i18n/rpc_helper.pot +++ b/rpc_helper/i18n/rpc_helper.pot @@ -13,6 +13,54 @@ 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 "" +"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_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.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.fields,field_description:rpc_helper.field_ir_model____last_update +msgid "Last Modified on" +msgstr "" + +#. module: rpc_helper +#: model:ir.model,name:rpc_helper.model_ir_model +msgid "Models" +msgstr "" + #. module: rpc_helper #: code:addons/rpc_helper/patch.py:0 #, python-format @@ -24,3 +72,28 @@ msgstr "" #, 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,field_description:rpc_helper.field_ir_model__user_can_see_changeset +msgid "User Can See Changeset" +msgstr "" From 8a5c60cf2dd105add7571e81e10497e3b14f01ed Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 4 Mar 2022 17:18:37 +0000 Subject: [PATCH 07/33] [UPD] README.rst --- rpc_helper/README.rst | 9 +++++++ rpc_helper/static/description/index.html | 33 ++++++++++++++++-------- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 8e3d321a2..d2aba0e21 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -40,6 +40,9 @@ Provide helpers to authorize RPC calls. Usage ===== +Via code +~~~~~~~~ + Decorate an Odoo model class like this:: from odoo.addons.rpc_helper.decorator import disable_rpc @@ -56,6 +59,12 @@ To selectively disable only some methods:: class AverageModel(models.Model): _inherit = "avg.model" + +Via `ir.model` configuration +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +See "Configuration" section. + Bug Tracker =========== diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index b15c5ee01..b288563f2 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -378,18 +378,24 @@ Only for development or testing purpose, do not use in production.

Table of contents

Usage

+
+

Via code

Decorate an Odoo model class like this:

 from odoo.addons.rpc_helper.decorator import disable_rpc
@@ -406,8 +412,13 @@ class AverageModel(models.Model):
     _inherit = "avg.model"
 
+
+

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 smashing it by providing a detailed and welcomed @@ -415,21 +426,21 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Camptocamp
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose From 8feaaae27f3dcf71d6cba4f1181a7e6fa841647a Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Fri, 4 Mar 2022 17:18:38 +0000 Subject: [PATCH 08/33] 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 f2d6ec427..2896e40a9 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 aba68b81c3340ab833234ef50d55a22f5b27c42c Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Fri, 2 Sep 2022 13:40:07 +0000 Subject: [PATCH 09/33] Added translation using Weblate (Spanish (Argentina)) --- rpc_helper/i18n/es_AR.po | 100 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 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 000000000..1029a4c14 --- /dev/null +++ b/rpc_helper/i18n/es_AR.po @@ -0,0 +1,100 @@ +# 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" +"Last-Translator: Automatically generated\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" + +#. 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_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.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.fields,field_description:rpc_helper.field_ir_model____last_update +msgid "Last Modified on" +msgstr "" + +#. module: rpc_helper +#: model:ir.model,name:rpc_helper.model_ir_model +msgid "Models" +msgstr "" + +#. module: rpc_helper +#: code:addons/rpc_helper/patch.py:0 +#, python-format +msgid "Object %s doesn't exist" +msgstr "" + +#. module: rpc_helper +#: 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,field_description:rpc_helper.field_ir_model__user_can_see_changeset +msgid "User Can See Changeset" +msgstr "" From 1fd80cf4b9600fd4ec8990cb4ac9e7b6f9286c27 Mon Sep 17 00:00:00 2001 From: Ignacio Buioli Date: Fri, 2 Sep 2022 13:41:58 +0000 Subject: [PATCH 10/33] Translated 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 | 38 ++++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 16 deletions(-) diff --git a/rpc_helper/i18n/es_AR.po b/rpc_helper/i18n/es_AR.po index 1029a4c14..edbd12f85 100644 --- a/rpc_helper/i18n/es_AR.po +++ b/rpc_helper/i18n/es_AR.po @@ -6,23 +6,25 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 14.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\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 "" +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 "" +msgstr "Conjunto de Cambios" #. module: rpc_helper #: model:ir.model.fields,help:rpc_helper.field_ir_model__rpc_config_edit @@ -31,70 +33,74 @@ msgid "" "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 "" +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 "" +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 "" +msgstr "Mostrar Nombre" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__id msgid "ID" -msgstr "" +msgstr "ID" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model____last_update msgid "Last Modified on" -msgstr "" +msgstr "Última modificación en" #. module: rpc_helper #: model:ir.model,name:rpc_helper.model_ir_model msgid "Models" -msgstr "" +msgstr "Modelos" #. module: rpc_helper #: code:addons/rpc_helper/patch.py:0 #, python-format msgid "Object %s doesn't exist" -msgstr "" +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 "" +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 "" +msgstr "Configuración RPC" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config msgid "Rpc Config" -msgstr "" +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 "" +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 "" +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 "" +msgstr "El Usuario Puede ver Conjuntos de Cambios" From 52e0c353732888b77aa6e43a0724a92ce7a9e91e Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Tue, 7 Mar 2023 18:19:07 +0100 Subject: [PATCH 11/33] 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 20671812432cc436cccb43dbf5f9098af674498c Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 7 Mar 2023 17:37:53 +0000 Subject: [PATCH 12/33] [UPD] README.rst --- rpc_helper/README.rst | 27 ++++++++++++ rpc_helper/static/description/index.html | 55 +++++++++++++++++------- 2 files changed, 66 insertions(+), 16 deletions(-) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index d2aba0e21..1bdacfa87 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -37,6 +37,33 @@ Provide helpers to authorize RPC calls. .. 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 ===== diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index b288563f2..654fc69c5 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -378,24 +378,47 @@ Only for development or testing purpose, do not use in production.

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

+

Usage

-

Via code

+

Via code

Decorate an Odoo model class like this:

 from odoo.addons.rpc_helper.decorator import disable_rpc
@@ -413,12 +436,12 @@ class AverageModel(models.Model):
 
-

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 smashing it by providing a detailed and welcomed @@ -426,21 +449,21 @@ If you spotted it first, help us smashing it by providing a detailed and welcome

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

-

Credits

+

Credits

-

Authors

+

Authors

  • Camptocamp
-

Maintainers

+

Maintainers

This module is maintained by the OCA.

Odoo Community Association

OCA, or the Odoo Community Association, is a nonprofit organization whose From e0768c787b5afe5e0c2b22aa96b3920c4d146d59 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Tue, 7 Mar 2023 17:37:53 +0000 Subject: [PATCH 13/33] 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 2896e40a9..11f86dd32 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 80bfdb6bdc7a11aed073c1fc9345346c486bd118 Mon Sep 17 00:00:00 2001 From: Simone Orsi Date: Thu, 16 Feb 2023 17:57:40 +0100 Subject: [PATCH 14/33] 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 11f86dd32..b20a92031 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 3eb987da8..c3a05691b 100644 --- a/rpc_helper/patch.py +++ b/rpc_helper/patch.py @@ -9,7 +9,7 @@ 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 + 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 e442fbe2a..bf18ea26f 100644 --- a/rpc_helper/tests/test_xmlrpc.py +++ b/rpc_helper/tests/test_xmlrpc.py @@ -10,7 +10,7 @@ from odoo.tests import common @common.tagged("post_install", "-at_install") -class TestXMLRPC(common.HttpSavepointCase): +class TestXMLRPC(common.HttpCase): @classmethod def setUpClass(cls): super().setUpClass() @@ -23,7 +23,7 @@ class TestXMLRPC(common.HttpSavepointCase): 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 8e6766e61a6e4615d36acbb59732413b89a40e19 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 10 May 2023 09:34:22 +0000 Subject: [PATCH 15/33] [UPD] Update rpc_helper.pot --- rpc_helper/i18n/rpc_helper.pot | 49 +++------------------------------- 1 file changed, 3 insertions(+), 46 deletions(-) diff --git a/rpc_helper/i18n/rpc_helper.pot b/rpc_helper/i18n/rpc_helper.pot index 060291fa5..90ceee7df 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 14.0\n" +"Project-Id-Version: Odoo Server 16.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,43 +21,20 @@ 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_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.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.fields,field_description:rpc_helper.field_ir_model____last_update -msgid "Last Modified on" -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" @@ -87,13 +54,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,field_description:rpc_helper.field_ir_model__user_can_see_changeset -msgid "User Can See Changeset" -msgstr "" From b897635ef1cf49ae9f5d73492a96061959dd6ec3 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Wed, 10 May 2023 09:38:54 +0000 Subject: [PATCH 16/33] [UPD] README.rst --- rpc_helper/README.rst | 19 +++++++------------ rpc_helper/static/description/index.html | 12 +++--------- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 1bdacfa87..1d236c18a 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -7,31 +7,26 @@ Disable RPC !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -.. |badge1| image:: https://img.shields.io/badge/maturity-Alpha-red.png +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status - :alt: Alpha + :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/14.0/rpc_helper + :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-14-0/server-tools-14-0-rpc_helper + :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/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/149/14.0 + :target: https://runbot.odoo-community.org/runbot/149/16.0 :alt: Try me on Runbot |badge1| |badge2| |badge3| |badge4| |badge5| Provide helpers to authorize RPC calls. -.. IMPORTANT:: - This is an alpha version, the data model and design can change at any time without warning. - Only for development or testing purpose, do not use in production. - `More details on development status `_ - **Table of contents** .. contents:: @@ -98,7 +93,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 smashing it by providing a detailed and welcomed -`feedback `_. +`feedback `_. Do not contact contributors directly about support or help with technical issues. @@ -136,6 +131,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/static/description/index.html b/rpc_helper/static/description/index.html index 654fc69c5..0e50665bb 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -367,14 +367,8 @@ ul.auto-toc { !! This file is generated by oca-gen-addon-readme !! !! changes will be overwritten. !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! --> -

Alpha License: LGPL-3 OCA/server-tools Translate me on Weblate Try me on Runbot

+

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

Provide helpers to authorize RPC calls.

-
-

Important

-

This is an alpha version, the data model and design can change at any time without warning. -Only for development or testing purpose, do not use in production. -More details on development status

-

Table of contents

    @@ -445,7 +439,7 @@ class AverageModel(models.Model):

    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 smashing it by providing a detailed and welcomed -feedback.

    +feedback.

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

@@ -471,7 +465,7 @@ 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.

From 2b42a6196335dbd148eb87cc8a7ebe9aa6aaea3e Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 10 May 2023 13:00:47 +0000 Subject: [PATCH 17/33] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. 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/ --- rpc_helper/i18n/es_AR.po | 74 ++++++++++++++++------------------------ 1 file changed, 29 insertions(+), 45 deletions(-) diff --git a/rpc_helper/i18n/es_AR.po b/rpc_helper/i18n/es_AR.po index edbd12f85..f8dc71e58 100644 --- a/rpc_helper/i18n/es_AR.po +++ b/rpc_helper/i18n/es_AR.po @@ -16,65 +16,32 @@ msgstr "" "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']}`" +"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 +#. 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" @@ -95,12 +62,29 @@ 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,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 "Changesets" +#~ msgstr "Conjunto de Cambios" + +#~ msgid "Count Pending Changeset Changes" +#~ msgstr "Cuenta de los Cambios Pendientes de los Conjuntos de Cambios" + +#~ msgid "Count Pending Changesets" +#~ msgstr "Cuenta de los Conjuntos de Cambios Pendientes" + +#~ msgid "Display Name" +#~ msgstr "Mostrar Nombre" + +#~ msgid "ID" +#~ msgstr "ID" + +#~ msgid "Last Modified on" +#~ msgstr "Última modificación en" + +#~ msgid "Smart Search" +#~ msgstr "Búsqueda Inteligente" + +#~ msgid "User Can See Changeset" +#~ msgstr "El Usuario Puede ver Conjuntos de Cambios" From 64987dfdffd3b720b6111926e38523fc30bb1815 Mon Sep 17 00:00:00 2001 From: oca-ci Date: Wed, 7 Jun 2023 15:42:31 +0000 Subject: [PATCH 18/33] [UPD] Update rpc_helper.pot --- rpc_helper/i18n/rpc_helper.pot | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rpc_helper/i18n/rpc_helper.pot b/rpc_helper/i18n/rpc_helper.pot index 90ceee7df..da0b2f5f2 100644 --- a/rpc_helper/i18n/rpc_helper.pot +++ b/rpc_helper/i18n/rpc_helper.pot @@ -54,3 +54,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 "" From a67e96cfc4deb6308b4e7f043bbcb83283522304 Mon Sep 17 00:00:00 2001 From: Weblate Date: Wed, 7 Jun 2023 15:49:40 +0000 Subject: [PATCH 19/33] Update translation files Updated by "Update PO files to match POT (msgmerge)" hook in Weblate. 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/ --- rpc_helper/i18n/es_AR.po | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rpc_helper/i18n/es_AR.po b/rpc_helper/i18n/es_AR.po index f8dc71e58..878c5cb6c 100644 --- a/rpc_helper/i18n/es_AR.po +++ b/rpc_helper/i18n/es_AR.po @@ -62,6 +62,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" @@ -83,8 +88,5 @@ msgstr "Editar la Configuración Rpc" #~ msgid "Last Modified on" #~ msgstr "Última modificación en" -#~ msgid "Smart Search" -#~ msgstr "Búsqueda Inteligente" - #~ msgid "User Can See Changeset" #~ msgstr "El Usuario Puede ver Conjuntos de Cambios" From 882d3bbbf43809b01f543e4374b22b91d50e923c Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Sun, 27 Aug 2023 07:50:49 +0000 Subject: [PATCH 20/33] Added translation using Weblate (Spanish) --- rpc_helper/i18n/es.po | 62 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 rpc_helper/i18n/es.po diff --git a/rpc_helper/i18n/es.po b/rpc_helper/i18n/es.po new file mode 100644 index 000000000..94bfb477e --- /dev/null +++ b/rpc_helper/i18n/es.po @@ -0,0 +1,62 @@ +# 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: Automatically generated\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" + +#. 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,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 "" From 67e2acf218ee469d6d3442ae4da4de3fe9d11ce4 Mon Sep 17 00:00:00 2001 From: Ivorra78 Date: Sun, 27 Aug 2023 07:53:35 +0000 Subject: [PATCH 21/33] 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/ --- rpc_helper/i18n/es.po | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/rpc_helper/i18n/es.po b/rpc_helper/i18n/es.po index 94bfb477e..98ceba6de 100644 --- a/rpc_helper/i18n/es.po +++ b/rpc_helper/i18n/es.po @@ -6,13 +6,15 @@ msgid "" msgstr "" "Project-Id-Version: Odoo Server 16.0\n" "Report-Msgid-Bugs-To: \n" -"Last-Translator: Automatically generated\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 @@ -21,42 +23,46 @@ msgid "" "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 "" +msgstr "Modelos" #. module: rpc_helper #. odoo-python #: code:addons/rpc_helper/patch.py:0 #, python-format msgid "Object %s doesn't exist" -msgstr "" +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 "" +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 "" +msgstr "Configuración RPC" #. module: rpc_helper #: model:ir.model.fields,field_description:rpc_helper.field_ir_model__rpc_config msgid "Rpc Config" -msgstr "" +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 "" +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 "" +msgstr "Búsqueda inteligente" From 926e2f4e4044aad9f8073d5b5546b50d1e58a324 Mon Sep 17 00:00:00 2001 From: OCA-git-bot Date: Sun, 3 Sep 2023 16:49:46 +0000 Subject: [PATCH 22/33] [UPD] README.rst --- rpc_helper/README.rst | 15 ++++--- rpc_helper/static/description/index.html | 52 ++++++++++++------------ 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/rpc_helper/README.rst b/rpc_helper/README.rst index 1d236c18a..dcd8d2313 100644 --- a/rpc_helper/README.rst +++ b/rpc_helper/README.rst @@ -2,10 +2,13 @@ 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 @@ -19,11 +22,11 @@ Disable RPC .. |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/runbot-Try%20me-875A7B.png - :target: https://runbot.odoo-community.org/runbot/149/16.0 - :alt: Try me on Runbot +.. |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| +|badge1| |badge2| |badge3| |badge4| |badge5| Provide helpers to authorize RPC calls. @@ -92,7 +95,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 smashing it by providing a detailed and welcomed +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. diff --git a/rpc_helper/static/description/index.html b/rpc_helper/static/description/index.html index 0e50665bb..db421446a 100644 --- a/rpc_helper/static/description/index.html +++ b/rpc_helper/static/description/index.html @@ -1,20 +1,20 @@ - + - + Disable RPC