Skip to content

Commit

Permalink
Fix import and deletion of projects
Browse files Browse the repository at this point in the history
  • Loading branch information
jespino committed Jun 23, 2015
1 parent 8efeb40 commit 91c9056
Show file tree
Hide file tree
Showing 6 changed files with 163 additions and 78 deletions.
3 changes: 3 additions & 0 deletions taiga/events/events.py
Expand Up @@ -53,6 +53,9 @@ def emit_event_for_model(obj, *, type:str="change", channel:str="events",
Sends a model change event.
"""

if obj._importing:
return None

assert type in set(["create", "change", "delete"])
assert hasattr(obj, "project_id")

Expand Down
44 changes: 25 additions & 19 deletions taiga/projects/api.py
Expand Up @@ -255,31 +255,37 @@ def pre_save(self, obj):
super().pre_save(obj)

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.apps import connect_memberships_signals, disconnect_memberships_signals

obj = self.get_object_or_none()
self.check_permissions(request, 'destroy', obj)

signals.post_delete.disconnect(sender=UserStory,
dispatch_uid="user_story_update_project_colors_on_delete")
signals.post_delete.disconnect(sender=Issue,
dispatch_uid="issue_update_project_colors_on_delete")
signals.post_delete.disconnect(sender=Task,
dispatch_uid="tasks_milestone_close_handler_on_delete")
signals.post_delete.disconnect(sender=Task,
dispatch_uid="tasks_us_close_handler_on_delete")
signals.post_delete.disconnect(sender=Task,
dispatch_uid="task_update_project_colors_on_delete")
signals.post_delete.disconnect(dispatch_uid="refprojdel")
signals.post_delete.disconnect(dispatch_uid='update_watchers_on_membership_post_delete')

obj.tasks.all().delete()
obj.user_stories.all().delete()
obj.issues.all().delete()
obj.memberships.all().delete()
obj.roles.all().delete()

if obj is None:
raise Http404

disconnect_events_signals()
disconnect_issues_signals()
disconnect_tasks_signals()
disconnect_userstories_signals()
disconnect_memberships_signals()

try:
obj.tasks.all().delete()
obj.user_stories.all().delete()
obj.issues.all().delete()
obj.memberships.all().delete()
obj.roles.all().delete()
finally:
connect_events_signals()
connect_issues_signals()
connect_tasks_signals()
connect_userstories_signals()
connect_memberships_signals()

self.pre_delete(obj)
self.pre_conditions_on_delete(obj)
obj.delete()
Expand Down
35 changes: 28 additions & 7 deletions taiga/projects/apps.py
Expand Up @@ -21,11 +21,7 @@
from . import signals as handlers


class ProjectsAppConfig(AppConfig):
name = "taiga.projects"
verbose_name = "Projects"

def ready(self):
def connect_memberships_signals():
# On membership object is deleted, update role-points relation.
signals.pre_delete.connect(handlers.membership_post_delete,
sender=apps.get_model("projects", "Membership"),
Expand All @@ -41,13 +37,38 @@ def ready(self):
sender=apps.get_model("projects", "Membership"),
dispatch_uid='create-notify-policy')


def connect_projects_signals():
# On project object is created apply template.
signals.post_save.connect(handlers.project_post_save,
sender=apps.get_model("projects", "Project"),
dispatch_uid='project_post_save')

# Tags
signals.pre_save.connect(handlers.tags_normalization,
sender=apps.get_model("projects", "Project"))
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"))
sender=apps.get_model("projects", "Project"),
dispatch_uid="update_project_tags_when_create_or_edit_taggable_item_projects")


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')


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


class ProjectsAppConfig(AppConfig):
name = "taiga.projects"
verbose_name = "Projects"

def ready(self):
connect_memberships_signals()
connect_projects_signals()
48 changes: 31 additions & 17 deletions taiga/projects/issues/apps.py
Expand Up @@ -23,25 +23,39 @@
from . import signals as handlers


def connect_issues_signals():
# Finished date
signals.pre_save.connect(handlers.set_finished_date_when_edit_issue,
sender=apps.get_model("issues", "Issue"),
dispatch_uid="set_finished_date_when_edit_issue")

# Tags
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")

# Custom Attributes
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 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")


class IssuesAppConfig(AppConfig):
name = "taiga.projects.issues"
verbose_name = "Issues"

def ready(self):
# Finished date
signals.pre_save.connect(handlers.set_finished_date_when_edit_issue,
sender=apps.get_model("issues", "Issue"),
dispatch_uid="set_finished_date_when_edit_issue")

# Tags
signals.pre_save.connect(generic_handlers.tags_normalization,
sender=apps.get_model("issues", "Issue"))
signals.post_save.connect(generic_handlers.update_project_tags_when_create_or_edit_taggable_item,
sender=apps.get_model("issues", "Issue"))
signals.post_delete.connect(generic_handlers.update_project_tags_when_delete_taggable_item,
sender=apps.get_model("issues", "Issue"))

# Custom Attributes
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")
connect_issues_signals()
62 changes: 40 additions & 22 deletions taiga/projects/tasks/apps.py
Expand Up @@ -22,31 +22,49 @@
from taiga.projects.custom_attributes import signals as custom_attributes_handlers
from . import signals as handlers

def connect_tasks_signals():
# Cached prev object version
signals.pre_save.connect(handlers.cached_prev_task,
sender=apps.get_model("tasks", "Task"),
dispatch_uid="cached_prev_task")

# Open/Close US and Milestone
signals.post_save.connect(handlers.try_to_close_or_open_us_and_milestone_when_create_or_edit_task,
sender=apps.get_model("tasks", "Task"),
dispatch_uid="try_to_close_or_open_us_and_milestone_when_create_or_edit_task")
signals.post_delete.connect(handlers.try_to_close_or_open_us_and_milestone_when_delete_task,
sender=apps.get_model("tasks", "Task"),
dispatch_uid="try_to_close_or_open_us_and_milestone_when_delete_task")

# Tags
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")

# Custom Attributes
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 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")


class TasksAppConfig(AppConfig):
name = "taiga.projects.tasks"
verbose_name = "Tasks"

def ready(self):
# Cached prev object version
signals.pre_save.connect(handlers.cached_prev_task,
sender=apps.get_model("tasks", "Task"))

# Open/Close US and Milestone
signals.post_save.connect(handlers.try_to_close_or_open_us_and_milestone_when_create_or_edit_task,
sender=apps.get_model("tasks", "Task"))
signals.post_delete.connect(handlers.try_to_close_or_open_us_and_milestone_when_delete_task,
sender=apps.get_model("tasks", "Task"))

# Tags
signals.pre_save.connect(generic_handlers.tags_normalization,
sender=apps.get_model("tasks", "Task"))
signals.post_save.connect(generic_handlers.update_project_tags_when_create_or_edit_taggable_item,
sender=apps.get_model("tasks", "Task"))
signals.post_delete.connect(generic_handlers.update_project_tags_when_delete_taggable_item,
sender=apps.get_model("tasks", "Task"))

# Custom Attributes
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")
connect_tasks_signals()
49 changes: 36 additions & 13 deletions taiga/projects/userstories/apps.py
Expand Up @@ -23,38 +23,61 @@
from . import signals as handlers


class UserStoriesAppConfig(AppConfig):
name = "taiga.projects.userstories"
verbose_name = "User Stories"

def ready(self):
def connect_userstories_signals():
# Cached prev object version
signals.pre_save.connect(handlers.cached_prev_us,
sender=apps.get_model("userstories", "UserStory"))
sender=apps.get_model("userstories", "UserStory"),
dispatch_uid="cached_prev_us")

# Role Points
signals.post_save.connect(handlers.update_role_points_when_create_or_edit_us,
sender=apps.get_model("userstories", "UserStory"))
sender=apps.get_model("userstories", "UserStory"),
dispatch_uid="update_role_points_when_create_or_edit_us")

# Tasks
signals.post_save.connect(handlers.update_milestone_of_tasks_when_edit_us,
sender=apps.get_model("userstories", "UserStory"))
sender=apps.get_model("userstories", "UserStory"),
dispatch_uid="update_milestone_of_tasks_when_edit_us")

# Open/Close US and Milestone
signals.post_save.connect(handlers.try_to_close_or_open_us_and_milestone_when_create_or_edit_us,
sender=apps.get_model("userstories", "UserStory"))
sender=apps.get_model("userstories", "UserStory"),
dispatch_uid="try_to_close_or_open_us_and_milestone_when_create_or_edit_us")
signals.post_delete.connect(handlers.try_to_close_milestone_when_delete_us,
sender=apps.get_model("userstories", "UserStory"))
sender=apps.get_model("userstories", "UserStory"),
dispatch_uid="try_to_close_milestone_when_delete_us")

# Tags
signals.pre_save.connect(generic_handlers.tags_normalization,
sender=apps.get_model("userstories", "UserStory"))
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"))
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"))
sender=apps.get_model("userstories", "UserStory"),
dispatch_uid="update_project_tags_when_delete_taggable_item_user_story")

# Custom Attributes
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 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")


class UserStoriesAppConfig(AppConfig):
name = "taiga.projects.userstories"
verbose_name = "User Stories"

def ready(self):
connect_userstories_signals()

0 comments on commit 91c9056

Please sign in to comment.