From 0ac7ee67477ac1cf48197594b9b16074494745fc Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Thu, 3 Apr 2025 12:08:32 +0200 Subject: [PATCH 1/2] [IMP] Remove default value for the name of the server --- cross_connect_client/models/cross_connect_server.py | 13 ++----------- .../views/cross_connect_server_views.xml | 2 +- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/cross_connect_client/models/cross_connect_server.py b/cross_connect_client/models/cross_connect_server.py index fcea3a7855..f39209098e 100644 --- a/cross_connect_client/models/cross_connect_server.py +++ b/cross_connect_client/models/cross_connect_server.py @@ -1,7 +1,6 @@ # Copyright 2024 Akretion (http://www.akretion.com). # @author Florian Mounier # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from urllib.parse import urlparse import requests @@ -15,7 +14,8 @@ class CrossConnectServer(models.Model): _inherit = "server.env.mixin" name = fields.Char( - required=True, compute="_compute_name", readonly=False, store=True + required=True, + help="This name will be used for the new created app", ) server_url = fields.Char(required=True) api_key = fields.Char( @@ -38,15 +38,6 @@ class CrossConnectServer(models.Model): compute="_compute_web_icon_data", inverse="_inverse_web_icon_data" ) - @api.depends("server_url") - def _compute_name(self): - for record in self: - if not record.name or record.name == "/": - try: - record.name = urlparse(record.server_url).hostname - except Exception: - record.name = "/" - @api.depends("name", "group_ids") def _compute_menu_id(self): for record in self: diff --git a/cross_connect_client/views/cross_connect_server_views.xml b/cross_connect_client/views/cross_connect_server_views.xml index 9c317a1220..55d31e8a21 100644 --- a/cross_connect_client/views/cross_connect_server_views.xml +++ b/cross_connect_client/views/cross_connect_server_views.xml @@ -38,7 +38,7 @@ bg_color="bg-warning" attrs="{'invisible': [('group_ids', '!=', [])]}" /> -
+

From 255fd86f90851833d0464fe5d69da82c590748d3 Mon Sep 17 00:00:00 2001 From: Florian da Costa Date: Thu, 3 Apr 2025 15:16:23 +0200 Subject: [PATCH 2/2] [IMP] Avoid deleting the cross connect server groups when unactiving it We want to avoid deletion of the group because we would then loose all users configured on it. So we prefer to remove the link between the cross connect server and the group instead --- .../models/cross_connect_server.py | 18 +++++++++++++----- .../tests/test_cross_connect_client.py | 12 +----------- 2 files changed, 14 insertions(+), 16 deletions(-) diff --git a/cross_connect_client/models/cross_connect_server.py b/cross_connect_client/models/cross_connect_server.py index f39209098e..9543a5616b 100644 --- a/cross_connect_client/models/cross_connect_server.py +++ b/cross_connect_client/models/cross_connect_server.py @@ -49,7 +49,7 @@ def _compute_menu_id(self): record.menu_id = False continue - menu_groups = self.env.ref("base.group_system") | record.group_ids + menu_groups = record.group_ids if not record.menu_id: action = self.env["ir.actions.act_url"].create( @@ -134,13 +134,15 @@ def _sync_groups(self): remote_groups_ids = {remote_group["id"] for remote_group in remote_groups} self.group_ids.filtered( lambda group: group.cross_connect_server_group_id not in remote_groups_ids - ).unlink() + ).write({"cross_connect_server_id": False}) # Create or Update existing groups for remote_group in remote_groups: - existing_group = self.group_ids.filtered( - lambda group: group.cross_connect_server_group_id == remote_group["id"] + existing_group = self.env["res.groups"].search( + [("cross_connect_server_group_id", "=", remote_group["id"])] ) + if existing_group and not existing_group.cross_connect_server_id: + existing_group.write({"cross_connect_server_id": self.id}) if existing_group: existing_group.sudo().write( { @@ -164,8 +166,14 @@ def action_sync(self): def action_disable(self): for record in self: - record.group_ids.unlink() + record.group_ids.write({"cross_connect_server_id": False}) @property def _server_env_fields(self): return {"api_key": {}} + + def unlink(self): + for rec in self: + # deleting the groups will delete the menu and related action. + rec.group_ids.unlink() + return super().unlink() diff --git a/cross_connect_client/tests/test_cross_connect_client.py b/cross_connect_client/tests/test_cross_connect_client.py index e7c96dda76..c231f10f6c 100644 --- a/cross_connect_client/tests/test_cross_connect_client.py +++ b/cross_connect_client/tests/test_cross_connect_client.py @@ -38,13 +38,6 @@ def test_base(self): self.assertFalse(self.server.menu_id) self.assertFalse(self.server.web_icon_data) - def test_name(self): - self.server.name = False - self.server.server_url = "//[" - self.assertEqual(self.server.name, "/") - self.server.server_url = "https://test.example.org" - self.assertEqual(self.server.name, "test.example.org") - def test_absolute_url_for(self): self.assertEqual( self.server._absolute_url_for("test"), @@ -113,10 +106,7 @@ def test_sync(self, req): self.server.menu_id.web_icon, "cross_connect_client,static/description/web_icon_data.png", ) - self.assertEqual( - self.server.menu_id.groups_id, - self.server.group_ids | self.env.ref("base.group_system"), - ) + self.assertEqual(self.server.menu_id.groups_id, self.server.group_ids) self.assertTrue(self.server.menu_id.action.name, "Test Server") self.assertEqual( self.server.menu_id.action.url, f"/cross_connect_server/{self.server.id}"