diff --git a/taiga/projects/apps.py b/taiga/projects/apps.py index a390b5f5..38295e81 100644 --- a/taiga/projects/apps.py +++ b/taiga/projects/apps.py @@ -34,9 +34,6 @@ def connect_projects_signals(): signals.pre_save.connect(handlers.tags_normalization, sender=apps.get_model("projects", "Project"), dispatch_uid="tags_normalization_projects") - signals.pre_save.connect(handlers.update_project_tags_when_create_or_edit_taggable_item, - sender=apps.get_model("projects", "Project"), - dispatch_uid="update_project_tags_when_create_or_edit_taggable_item_projects") def disconnect_projects_signals(): @@ -44,8 +41,6 @@ def disconnect_projects_signals(): 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") ## Memberships Signals diff --git a/taiga/projects/issues/apps.py b/taiga/projects/issues/apps.py index 4d0bca19..671a45be 100644 --- a/taiga/projects/issues/apps.py +++ b/taiga/projects/issues/apps.py @@ -34,12 +34,6 @@ def connect_issues_signals(): signals.pre_save.connect(generic_handlers.tags_normalization, sender=apps.get_model("issues", "Issue"), dispatch_uid="tags_normalization_issue") - signals.post_save.connect(generic_handlers.update_project_tags_when_create_or_edit_taggable_item, - sender=apps.get_model("issues", "Issue"), - dispatch_uid="update_project_tags_when_create_or_edit_taggable_item_issue") - signals.post_delete.connect(generic_handlers.update_project_tags_when_delete_taggable_item, - sender=apps.get_model("issues", "Issue"), - dispatch_uid="update_project_tags_when_delete_taggable_item_issue") def connect_issues_custom_attributes_signals(): @@ -56,14 +50,15 @@ def connect_all_issues_signals(): def disconnect_issues_signals(): - 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") + 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") 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") + signals.post_save.disconnect(sender=apps.get_model("issues", "Issue"), + dispatch_uid="create_custom_attribute_value_when_create_issue") def disconnect_all_issues_signals(): diff --git a/taiga/projects/issues/models.py b/taiga/projects/issues/models.py index 89a78051..cd962e08 100644 --- a/taiga/projects/issues/models.py +++ b/taiga/projects/issues/models.py @@ -30,8 +30,6 @@ from taiga.projects.notifications.mixins import WatchedModelMixin from taiga.projects.mixins.blocked import BlockedMixin from taiga.base.tags import TaggedMixin -from taiga.projects.services.tags_colors import update_project_tags_colors_handler, remove_unused_tags - class Issue(OCCModelMixin, WatchedModelMixin, BlockedMixin, TaggedMixin, models.Model): ref = models.BigIntegerField(db_index=True, null=True, blank=True, default=None, diff --git a/taiga/projects/services/__init__.py b/taiga/projects/services/__init__.py index fb3cb9c5..a115275b 100644 --- a/taiga/projects/services/__init__.py +++ b/taiga/projects/services/__init__.py @@ -55,7 +55,5 @@ from .stats import get_stats_for_project_issues from .stats import get_stats_for_project from .stats import get_member_stats_for_project -from .tags_colors import update_project_tags_colors_handler - from .transfer import request_project_transfer, start_project_transfer from .transfer import accept_project_transfer, reject_project_transfer diff --git a/taiga/projects/services/tags_colors.py b/taiga/projects/services/tags_colors.py deleted file mode 100644 index 9b9aa962..00000000 --- a/taiga/projects/services/tags_colors.py +++ /dev/null @@ -1,62 +0,0 @@ -# -*- coding: utf-8 -*- -# Copyright (C) 2014-2016 Andrey Antukh -# Copyright (C) 2014-2016 Jesús Espino -# Copyright (C) 2014-2016 David Barragán -# Copyright (C) 2014-2016 Alejandro Alonso -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU Affero General Public License as -# published by the Free Software Foundation, either version 3 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU Affero General Public License for more details. -# -# You should have received a copy of the GNU Affero General Public License -# along with this program. If not, see . - -from django.conf import settings - -from taiga.projects.services.filters import get_all_tags -from taiga.projects.models import Project - -from hashlib import sha1 - - -def _generate_color(tag): - color = sha1(tag.encode("utf-8")).hexdigest()[0:6] - return "#{}".format(color) - - -def _get_new_color(tag, predefined_colors, exclude=[]): - colors = list(set(predefined_colors) - set(exclude)) - if colors: - return colors[0] - return _generate_color(tag) - - -def remove_unused_tags(project): - current_tags = get_all_tags(project) - project.tags_colors = list(filter(lambda x: x[0] in current_tags, project.tags_colors)) - - -def update_project_tags_colors_handler(instance): - if instance.tags is None: - instance.tags = [] - - if not isinstance(instance.project.tags_colors, list): - instance.project.tags_colors = [] - - for tag in instance.tags: - defined_tags = map(lambda x: x[0], instance.project.tags_colors) - if tag not in defined_tags: - used_colors = map(lambda x: x[1], instance.project.tags_colors) - new_color = _get_new_color(tag, settings.TAGS_PREDEFINED_COLORS, - exclude=used_colors) - instance.project.tags_colors.append([tag, new_color]) - - remove_unused_tags(instance.project) - - if not isinstance(instance, Project): - instance.project.save() diff --git a/taiga/projects/signals.py b/taiga/projects/signals.py index ca5d7094..e0196887 100644 --- a/taiga/projects/signals.py +++ b/taiga/projects/signals.py @@ -19,7 +19,6 @@ from django.apps import apps from django.conf import settings -from taiga.projects.services.tags_colors import update_project_tags_colors_handler, remove_unused_tags from taiga.projects.notifications.services import create_notify_policy_if_not_exists from taiga.base.utils.db import get_typename_for_model_class @@ -37,13 +36,7 @@ def tags_normalization(sender, instance, **kwargs): instance.tags = list(map(str.lower, instance.tags)) -def update_project_tags_when_create_or_edit_taggable_item(sender, instance, **kwargs): - update_project_tags_colors_handler(instance) - - -def update_project_tags_when_delete_taggable_item(sender, instance, **kwargs): - remove_unused_tags(instance.project) - instance.project.save() +## Membership def membership_post_delete(sender, instance, using, **kwargs): instance.project.update_role_points() diff --git a/taiga/projects/tasks/apps.py b/taiga/projects/tasks/apps.py index 616854f6..23cfdfb0 100644 --- a/taiga/projects/tasks/apps.py +++ b/taiga/projects/tasks/apps.py @@ -32,12 +32,7 @@ def connect_tasks_signals(): signals.pre_save.connect(generic_handlers.tags_normalization, sender=apps.get_model("tasks", "Task"), dispatch_uid="tags_normalization_task") - signals.post_save.connect(generic_handlers.update_project_tags_when_create_or_edit_taggable_item, - sender=apps.get_model("tasks", "Task"), - dispatch_uid="update_project_tags_when_create_or_edit_tagglabe_item_task") - signals.post_delete.connect(generic_handlers.update_project_tags_when_delete_taggable_item, - sender=apps.get_model("tasks", "Task"), - dispatch_uid="update_project_tags_when_delete_tagglabe_item_task") + def connect_tasks_close_or_open_us_and_milestone_signals(): from . import signals as handlers @@ -67,19 +62,24 @@ def connect_all_tasks_signals(): def disconnect_tasks_signals(): - 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") + signals.pre_save.disconnect(sender=apps.get_model("tasks", "Task"), + dispatch_uid="set_finished_date_when_edit_task") + signals.pre_save.disconnect(sender=apps.get_model("tasks", "Task"), + dispatch_uid="tags_normalization") def disconnect_tasks_close_or_open_us_and_milestone_signals(): - 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="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") 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") + signals.post_save.disconnect(sender=apps.get_model("tasks", "Task"), + dispatch_uid="create_custom_attribute_value_when_create_task") def disconnect_all_tasks_signals(): diff --git a/taiga/projects/userstories/apps.py b/taiga/projects/userstories/apps.py index ef3d5df5..04c7d32d 100644 --- a/taiga/projects/userstories/apps.py +++ b/taiga/projects/userstories/apps.py @@ -62,12 +62,6 @@ def connect_userstories_signals(): signals.pre_save.connect(generic_handlers.tags_normalization, sender=apps.get_model("userstories", "UserStory"), dispatch_uid="tags_normalization_user_story") - signals.post_save.connect(generic_handlers.update_project_tags_when_create_or_edit_taggable_item, - sender=apps.get_model("userstories", "UserStory"), - dispatch_uid="update_project_tags_when_create_or_edit_taggable_item_user_story") - signals.post_delete.connect(generic_handlers.update_project_tags_when_delete_taggable_item, - sender=apps.get_model("userstories", "UserStory"), - dispatch_uid="update_project_tags_when_delete_taggable_item_user_story") def connect_userstories_custom_attributes_signals(): @@ -83,18 +77,27 @@ def connect_all_userstories_signals(): def disconnect_userstories_signals(): - 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") + 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") 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") + 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():