From ecf200f418d88f2411645ba1ab68731980c4cc87 Mon Sep 17 00:00:00 2001 From: Alejandro Alonso Date: Wed, 29 Jul 2015 14:50:40 +0200 Subject: [PATCH] [Backport] Fixing signals disconnection --- taiga/projects/api.py | 18 +++++++-------- taiga/projects/apps.py | 12 +++++----- taiga/projects/issues/apps.py | 29 +++++++++++++++++------ taiga/projects/tasks/apps.py | 33 ++++++++++++++++++-------- taiga/projects/userstories/apps.py | 37 +++++++++++++++++++++--------- taiga/webhooks/apps.py | 2 +- 6 files changed, 88 insertions(+), 43 deletions(-) diff --git a/taiga/projects/api.py b/taiga/projects/api.py index 975dd4ea..36955ff5 100644 --- a/taiga/projects/api.py +++ b/taiga/projects/api.py @@ -256,9 +256,9 @@ class ProjectViewSet(HistoryResourceMixin, ModelCrudViewSet): def destroy(self, request, *args, **kwargs): from taiga.events.apps import connect_events_signals, disconnect_events_signals - from taiga.projects.tasks.apps import connect_tasks_signals, disconnect_tasks_signals - from taiga.projects.userstories.apps import connect_userstories_signals, disconnect_userstories_signals - from taiga.projects.issues.apps import connect_issues_signals, disconnect_issues_signals + from taiga.projects.tasks.apps import connect_all_tasks_signals, disconnect_all_tasks_signals + from taiga.projects.userstories.apps import connect_all_userstories_signals, disconnect_all_userstories_signals + from taiga.projects.issues.apps import connect_all_issues_signals, disconnect_all_issues_signals from taiga.projects.apps import connect_memberships_signals, disconnect_memberships_signals obj = self.get_object_or_none() @@ -268,9 +268,9 @@ class ProjectViewSet(HistoryResourceMixin, ModelCrudViewSet): raise Http404 disconnect_events_signals() - disconnect_issues_signals() - disconnect_tasks_signals() - disconnect_userstories_signals() + disconnect_all_issues_signals() + disconnect_all_tasks_signals() + disconnect_all_userstories_signals() disconnect_memberships_signals() try: @@ -281,9 +281,9 @@ class ProjectViewSet(HistoryResourceMixin, ModelCrudViewSet): obj.roles.all().delete() finally: connect_events_signals() - connect_issues_signals() - connect_tasks_signals() - connect_userstories_signals() + connect_all_issues_signals() + connect_all_tasks_signals() + connect_all_userstories_signals() connect_memberships_signals() self.pre_delete(obj) diff --git a/taiga/projects/apps.py b/taiga/projects/apps.py index a57f2f5a..2652563c 100644 --- a/taiga/projects/apps.py +++ b/taiga/projects/apps.py @@ -54,15 +54,15 @@ def connect_projects_signals(): def disconnect_memberships_signals(): - signals.pre_delete.disconnect(dispatch_uid='membership_pre_delete') - signals.post_delete.disconnect(dispatch_uid='update_watchers_on_membership_post_delete') - signals.post_save.disconnect(dispatch_uid='create-notify-policy') + signals.pre_delete.disconnect(sender=apps.get_model("projects", "Membership"), dispatch_uid='membership_pre_delete') + signals.post_delete.disconnect(sender=apps.get_model("projects", "Membership"), dispatch_uid='update_watchers_on_membership_post_delete') + signals.post_save.disconnect(sender=apps.get_model("projects", "Membership"), dispatch_uid='create-notify-policy') def disconnect_projects_signals(): - signals.post_save.disconnect(dispatch_uid='project_post_save') - signals.pre_save.disconnect(dispatch_uid="tags_normalization_projects") - signals.pre_save.disconnect(dispatch_uid="update_project_tags_when_create_or_edit_taggable_item_projects") + signals.post_save.disconnect(sender=apps.get_model("projects", "Project"), dispatch_uid='project_post_save') + signals.pre_save.disconnect(sender=apps.get_model("projects", "Project"), dispatch_uid="tags_normalization_projects") + signals.pre_save.disconnect(sender=apps.get_model("projects", "Project"), dispatch_uid="update_project_tags_when_create_or_edit_taggable_item_projects") class ProjectsAppConfig(AppConfig): diff --git a/taiga/projects/issues/apps.py b/taiga/projects/issues/apps.py index 7333d934..cc68fb73 100644 --- a/taiga/projects/issues/apps.py +++ b/taiga/projects/issues/apps.py @@ -40,17 +40,32 @@ def connect_issues_signals(): sender=apps.get_model("issues", "Issue"), dispatch_uid="update_project_tags_when_delete_taggable_item_issue") - # Custom Attributes + +def connect_issues_custom_attributes_signals(): signals.post_save.connect(custom_attributes_handlers.create_custom_attribute_value_when_create_issue, sender=apps.get_model("issues", "Issue"), dispatch_uid="create_custom_attribute_value_when_create_issue") + +def connect_all_issues_signals(): + connect_issues_signals() + connect_issues_custom_attributes_signals() + + def disconnect_issues_signals(): - signals.pre_save.disconnect(dispatch_uid="set_finished_date_when_edit_issue") - signals.pre_save.disconnect(dispatch_uid="tags_normalization_issue") - signals.post_save.disconnect(dispatch_uid="update_project_tags_when_create_or_edit_taggable_item_issue") - signals.post_delete.disconnect(dispatch_uid="update_project_tags_when_delete_taggable_item_issue") - signals.post_save.disconnect(dispatch_uid="create_custom_attribute_value_when_create_issue") + signals.pre_save.disconnect(sender=apps.get_model("issues", "Issue"), dispatch_uid="set_finished_date_when_edit_issue") + signals.pre_save.disconnect(sender=apps.get_model("issues", "Issue"), dispatch_uid="tags_normalization_issue") + signals.post_save.disconnect(sender=apps.get_model("issues", "Issue"), dispatch_uid="update_project_tags_when_create_or_edit_taggable_item_issue") + signals.post_delete.disconnect(sender=apps.get_model("issues", "Issue"), dispatch_uid="update_project_tags_when_delete_taggable_item_issue") + + +def disconnect_issues_custom_attributes_signals(): + signals.post_save.disconnect(sender=apps.get_model("issues", "Issue"), dispatch_uid="create_custom_attribute_value_when_create_issue") + + +def disconnect_all_issues_signals(): + disconnect_issues_signals() + disconnect_issues_custom_attributes_signals() class IssuesAppConfig(AppConfig): @@ -58,4 +73,4 @@ class IssuesAppConfig(AppConfig): verbose_name = "Issues" def ready(self): - connect_issues_signals() + connect_all_issues_signals() diff --git a/taiga/projects/tasks/apps.py b/taiga/projects/tasks/apps.py index f8426dcc..445ca63b 100644 --- a/taiga/projects/tasks/apps.py +++ b/taiga/projects/tasks/apps.py @@ -47,19 +47,34 @@ def connect_tasks_signals(): sender=apps.get_model("tasks", "Task"), dispatch_uid="update_project_tags_when_delete_tagglabe_item_task") - # Custom Attributes + +def connect_tasks_custom_attributes_signals(): signals.post_save.connect(custom_attributes_handlers.create_custom_attribute_value_when_create_task, sender=apps.get_model("tasks", "Task"), dispatch_uid="create_custom_attribute_value_when_create_task") + +def connect_all_tasks_signals(): + connect_tasks_signals() + connect_tasks_custom_attributes_signals() + + def disconnect_tasks_signals(): - signals.pre_save.disconnect(dispatch_uid="cached_prev_task") - signals.post_save.disconnect(dispatch_uid="try_to_close_or_open_us_and_milestone_when_create_or_edit_task") - signals.post_delete.disconnect(dispatch_uid="try_to_close_or_open_us_and_milestone_when_delete_task") - signals.pre_save.disconnect(dispatch_uid="tags_normalization") - signals.post_save.disconnect(dispatch_uid="update_project_tags_when_create_or_edit_tagglabe_item") - signals.post_delete.disconnect(dispatch_uid="update_project_tags_when_delete_tagglabe_item") - signals.post_save.disconnect(dispatch_uid="create_custom_attribute_value_when_create_task") + signals.pre_save.disconnect(sender=apps.get_model("tasks", "Task"), dispatch_uid="cached_prev_task") + signals.post_save.disconnect(sender=apps.get_model("tasks", "Task"), dispatch_uid="try_to_close_or_open_us_and_milestone_when_create_or_edit_task") + signals.post_delete.disconnect(sender=apps.get_model("tasks", "Task"), dispatch_uid="try_to_close_or_open_us_and_milestone_when_delete_task") + signals.pre_save.disconnect(sender=apps.get_model("tasks", "Task"), dispatch_uid="tags_normalization") + signals.post_save.disconnect(sender=apps.get_model("tasks", "Task"), dispatch_uid="update_project_tags_when_create_or_edit_tagglabe_item") + signals.post_delete.disconnect(sender=apps.get_model("tasks", "Task"), dispatch_uid="update_project_tags_when_delete_tagglabe_item") + + +def disconnect_tasks_custom_attributes_signals(): + signals.post_save.disconnect(sender=apps.get_model("tasks", "Task"), dispatch_uid="create_custom_attribute_value_when_create_task") + + +def disconnect_all_tasks_signals(): + disconnect_tasks_signals() + disconnect_tasks_custom_attributes_signals() class TasksAppConfig(AppConfig): @@ -67,4 +82,4 @@ class TasksAppConfig(AppConfig): verbose_name = "Tasks" def ready(self): - connect_tasks_signals() + connect_all_tasks_signals() diff --git a/taiga/projects/userstories/apps.py b/taiga/projects/userstories/apps.py index 868074c1..948e7c08 100644 --- a/taiga/projects/userstories/apps.py +++ b/taiga/projects/userstories/apps.py @@ -58,21 +58,36 @@ def connect_userstories_signals(): sender=apps.get_model("userstories", "UserStory"), dispatch_uid="update_project_tags_when_delete_taggable_item_user_story") - # Custom Attributes + +def connect_userstories_custom_attributes_signals(): signals.post_save.connect(custom_attributes_handlers.create_custom_attribute_value_when_create_user_story, sender=apps.get_model("userstories", "UserStory"), dispatch_uid="create_custom_attribute_value_when_create_user_story") + +def connect_all_userstories_signals(): + connect_userstories_signals() + connect_userstories_custom_attributes_signals() + + def disconnect_userstories_signals(): - signals.pre_save.disconnect(dispatch_uid="cached_prev_us") - signals.post_save.disconnect(dispatch_uid="update_role_points_when_create_or_edit_us") - signals.post_save.disconnect(dispatch_uid="update_milestone_of_tasks_when_edit_us") - signals.post_save.disconnect(dispatch_uid="try_to_close_or_open_us_and_milestone_when_create_or_edit_us") - signals.post_delete.disconnect(dispatch_uid="try_to_close_milestone_when_delete_us") - signals.pre_save.disconnect(dispatch_uid="tags_normalization_user_story") - signals.post_save.disconnect(dispatch_uid="update_project_tags_when_create_or_edit_taggable_item_user_story") - signals.post_delete.disconnect(dispatch_uid="update_project_tags_when_delete_taggable_item_user_story") - signals.post_save.disconnect(dispatch_uid="create_custom_attribute_value_when_create_user_story") + signals.pre_save.disconnect(sender=apps.get_model("userstories", "UserStory"), dispatch_uid="cached_prev_us") + signals.post_save.disconnect(sender=apps.get_model("userstories", "UserStory"), dispatch_uid="update_role_points_when_create_or_edit_us") + signals.post_save.disconnect(sender=apps.get_model("userstories", "UserStory"), dispatch_uid="update_milestone_of_tasks_when_edit_us") + signals.post_save.disconnect(sender=apps.get_model("userstories", "UserStory"), dispatch_uid="try_to_close_or_open_us_and_milestone_when_create_or_edit_us") + signals.post_delete.disconnect(sender=apps.get_model("userstories", "UserStory"), dispatch_uid="try_to_close_milestone_when_delete_us") + signals.pre_save.disconnect(sender=apps.get_model("userstories", "UserStory"), dispatch_uid="tags_normalization_user_story") + signals.post_save.disconnect(sender=apps.get_model("userstories", "UserStory"), dispatch_uid="update_project_tags_when_create_or_edit_taggable_item_user_story") + signals.post_delete.disconnect(sender=apps.get_model("userstories", "UserStory"), dispatch_uid="update_project_tags_when_delete_taggable_item_user_story") + + +def disconnect_userstories_custom_attributes_signals(): + signals.post_save.disconnect(sender=apps.get_model("userstories", "UserStory"), dispatch_uid="create_custom_attribute_value_when_create_user_story") + + +def disconnect_all_userstories_signals(): + disconnect_userstories_signals() + disconnect_userstories_custom_attributes_signals() class UserStoriesAppConfig(AppConfig): @@ -80,4 +95,4 @@ class UserStoriesAppConfig(AppConfig): verbose_name = "User Stories" def ready(self): - connect_userstories_signals() + connect_all_userstories_signals() diff --git a/taiga/webhooks/apps.py b/taiga/webhooks/apps.py index 5ae2ac20..f0444d68 100644 --- a/taiga/webhooks/apps.py +++ b/taiga/webhooks/apps.py @@ -26,7 +26,7 @@ def connect_webhooks_signals(): def disconnect_webhooks_signals(): - signals.post_save.disconnect(dispatch_uid="webhooks") + signals.post_save.disconnect(sender=HistoryEntry, dispatch_uid="webhooks") class WebhooksAppConfig(AppConfig):