From 2c16d950996e871ecedaf91c16888e4b6b6ba673 Mon Sep 17 00:00:00 2001 From: Gagan Deep Date: Fri, 1 Mar 2024 23:01:05 +0530 Subject: [PATCH] [feature] Added "config_deactivating" signal --- openwisp_controller/config/apps.py | 5 +++++ openwisp_controller/config/base/config.py | 15 +++++++++++++++ openwisp_controller/config/signals.py | 4 ++++ openwisp_controller/connection/apps.py | 5 ++++- 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/openwisp_controller/config/apps.py b/openwisp_controller/config/apps.py index 2e7e4add9..05b9d5576 100644 --- a/openwisp_controller/config/apps.py +++ b/openwisp_controller/config/apps.py @@ -23,6 +23,7 @@ from .signals import ( config_backend_changed, config_deactivated, + config_deactivating, config_modified, device_group_changed, device_name_changed, @@ -310,6 +311,10 @@ def enable_cache_invalidation(self): DeviceChecksumView.invalidate_get_device_cache_on_config_deactivated, dispatch_uid='config_deactivated_invalidate_get_device_cache', ) + config_deactivating.connect( + DeviceChecksumView.invalidate_get_device_cache_on_config_deactivated, + dispatch_uid='config_deactivated_invalidate_get_device_cache', + ) config_modified.connect( DeviceChecksumView.invalidate_checksum_cache, dispatch_uid='invalidate_checksum_cache', diff --git a/openwisp_controller/config/base/config.py b/openwisp_controller/config/base/config.py index fc7eb35d0..722b64c4d 100644 --- a/openwisp_controller/config/base/config.py +++ b/openwisp_controller/config/base/config.py @@ -17,6 +17,7 @@ from ..signals import ( config_backend_changed, config_deactivated, + config_deactivating, config_modified, config_status_changed, ) @@ -111,6 +112,7 @@ def __init__(self, *args, **kwargs): self._initial_status = self.status self._send_config_modified_after_save = False self._send_config_deactivated = False + self._send_config_deactivating = False self._send_config_status_changed = False def __str__(self): @@ -493,6 +495,8 @@ def save(self, *args, **kwargs): if self._send_config_status_changed: self._send_config_status_changed_signal() self._send_config_status_changed = False + if self._send_config_deactivating and self.is_deactivating(): + self._send_config_deactivating_signal() if self._send_config_deactivated and self.is_deactivated(): self._send_config_deactivated_signal() self._initial_status = self.status @@ -544,6 +548,16 @@ def _send_config_modified_signal(self, action): device=self.device, ) + def _send_config_deactivating_signal(self): + """ + Emits ``config_deactivating`` signal. + """ + config_deactivating.send( + sender=self.__class__, + instance=self, + previous_status=self._initial_status, + ) + def _send_config_deactivated_signal(self): """ Emits ``config_deactivated`` signal. @@ -604,6 +618,7 @@ def set_status_deactivating(self, save=True): clears configuration and templates. """ self.config = {} + self._send_config_deactivating = True self._set_status('deactivating', save, extra_update_fields=['config']) self.templates.clear() diff --git a/openwisp_controller/config/signals.py b/openwisp_controller/config/signals.py index f75ff293d..eac00ad0c 100644 --- a/openwisp_controller/config/signals.py +++ b/openwisp_controller/config/signals.py @@ -21,6 +21,10 @@ config_deactivated.__doc__ = """ Providing arguments: ['instance', 'previous_status'] """ +config_deactivating = Signal() +config_deactivating.__doc__ = """ +Providing arguments: ['instance', 'previous_status'] +""" device_registered = Signal() device_registered.__doc__ = """ Providing arguments: ['instance', 'is_new'] diff --git a/openwisp_controller/connection/apps.py b/openwisp_controller/connection/apps.py index a3c0f3dce..5a09e3f75 100644 --- a/openwisp_controller/connection/apps.py +++ b/openwisp_controller/connection/apps.py @@ -11,7 +11,7 @@ from openwisp_utils.admin_theme.menu import register_menu_subitem -from ..config.signals import config_modified +from ..config.signals import config_deactivating, config_modified from .signals import is_working_changed _TASK_NAME = 'openwisp_controller.connection.tasks.update_config' @@ -44,6 +44,9 @@ def ready(self): config_modified.connect( self.config_modified_receiver, dispatch_uid='connection.update_config' ) + config_deactivating.connect( + self.config_modified_receiver, dispatch_uid='connection.update_config' + ) post_save.connect( Credentials.auto_add_credentials_to_device,