Remove signals disconects on importing
parent
6d78c79018
commit
c49473dbdb
|
@ -24,6 +24,10 @@ def on_save_any_model(sender, instance, created, **kwargs):
|
||||||
# Ignore any object that can not have project_id
|
# Ignore any object that can not have project_id
|
||||||
content_type = changes._get_type_for_model(instance)
|
content_type = changes._get_type_for_model(instance)
|
||||||
|
|
||||||
|
# Ignore changes on import
|
||||||
|
if getattr(instance, '_importing', False):
|
||||||
|
return
|
||||||
|
|
||||||
# Ignore any other changes
|
# Ignore any other changes
|
||||||
if content_type not in changes.watched_types:
|
if content_type not in changes.watched_types:
|
||||||
return
|
return
|
||||||
|
|
|
@ -9,7 +9,6 @@ from django.db.models import signals
|
||||||
from taiga.base.api.mixins import CreateModelMixin
|
from taiga.base.api.mixins import CreateModelMixin
|
||||||
from taiga.base.api.viewsets import GenericViewSet
|
from taiga.base.api.viewsets import GenericViewSet
|
||||||
from taiga.base.decorators import detail_route
|
from taiga.base.decorators import detail_route
|
||||||
from taiga.base.utils.signals import without_signals
|
|
||||||
from taiga.projects.models import Project, Membership
|
from taiga.projects.models import Project, Membership
|
||||||
|
|
||||||
from . import serializers
|
from . import serializers
|
||||||
|
@ -32,61 +31,60 @@ class ProjectImporterViewSet(CreateModelMixin, GenericViewSet):
|
||||||
data = request.DATA.copy()
|
data = request.DATA.copy()
|
||||||
data['owner'] = data.get('owner', request.user.email)
|
data['owner'] = data.get('owner', request.user.email)
|
||||||
|
|
||||||
with without_signals((signals.post_save, "project_post_save")):
|
project_serialized = service.store_project(data)
|
||||||
project_serialized = service.store_project(data)
|
|
||||||
|
|
||||||
if project_serialized is None:
|
if project_serialized is None:
|
||||||
raise Http400(service.get_errors())
|
raise Http400(service.get_errors())
|
||||||
|
|
||||||
if "points" in data:
|
if "points" in data:
|
||||||
service.store_choices(project_serialized.object, data,
|
service.store_choices(project_serialized.object, data,
|
||||||
"points", serializers.PointsExportSerializer)
|
"points", serializers.PointsExportSerializer)
|
||||||
if "issue_types" in data:
|
if "issue_types" in data:
|
||||||
service.store_choices(project_serialized.object, data,
|
service.store_choices(project_serialized.object, data,
|
||||||
"issue_types",
|
"issue_types",
|
||||||
serializers.IssueTypeExportSerializer)
|
serializers.IssueTypeExportSerializer)
|
||||||
if "issue_statuses" in data:
|
if "issue_statuses" in data:
|
||||||
service.store_choices(project_serialized.object, data,
|
service.store_choices(project_serialized.object, data,
|
||||||
"issue_statuses",
|
"issue_statuses",
|
||||||
serializers.IssueStatusExportSerializer,)
|
serializers.IssueStatusExportSerializer,)
|
||||||
if "us_statuses" in data:
|
if "us_statuses" in data:
|
||||||
service.store_choices(project_serialized.object, data,
|
service.store_choices(project_serialized.object, data,
|
||||||
"us_statuses",
|
"us_statuses",
|
||||||
serializers.UserStoryStatusExportSerializer,)
|
serializers.UserStoryStatusExportSerializer,)
|
||||||
if "task_statuses" in data:
|
if "task_statuses" in data:
|
||||||
service.store_choices(project_serialized.object, data,
|
service.store_choices(project_serialized.object, data,
|
||||||
"task_statuses",
|
"task_statuses",
|
||||||
serializers.TaskStatusExportSerializer)
|
serializers.TaskStatusExportSerializer)
|
||||||
if "priorities" in data:
|
if "priorities" in data:
|
||||||
service.store_choices(project_serialized.object, data,
|
service.store_choices(project_serialized.object, data,
|
||||||
"priorities",
|
"priorities",
|
||||||
serializers.PriorityExportSerializer)
|
serializers.PriorityExportSerializer)
|
||||||
if "severities" in data:
|
if "severities" in data:
|
||||||
service.store_choices(project_serialized.object, data,
|
service.store_choices(project_serialized.object, data,
|
||||||
"severities",
|
"severities",
|
||||||
serializers.SeverityExportSerializer)
|
serializers.SeverityExportSerializer)
|
||||||
|
|
||||||
if ("points" in data or "issues_types" in data or
|
if ("points" in data or "issues_types" in data or
|
||||||
"issues_statuses" in data or "us_statuses" in data or
|
"issues_statuses" in data or "us_statuses" in data or
|
||||||
"task_statuses" in data or "priorities" in data or
|
"task_statuses" in data or "priorities" in data or
|
||||||
"severities" in data):
|
"severities" in data):
|
||||||
service.store_default_choices(project_serialized.object, data)
|
service.store_default_choices(project_serialized.object, data)
|
||||||
|
|
||||||
if "roles" in data:
|
if "roles" in data:
|
||||||
service.store_roles(project_serialized.object, data)
|
service.store_roles(project_serialized.object, data)
|
||||||
|
|
||||||
if "memberships" in data:
|
if "memberships" in data:
|
||||||
service.store_memberships(project_serialized.object, data)
|
service.store_memberships(project_serialized.object, data)
|
||||||
|
|
||||||
if project_serialized.object.memberships.filter(user=project_serialized.object.owner).count() == 0:
|
if project_serialized.object.memberships.filter(user=project_serialized.object.owner).count() == 0:
|
||||||
if project_serialized.object.roles.all().count() > 0:
|
if project_serialized.object.roles.all().count() > 0:
|
||||||
Membership.objects.create(
|
Membership.objects.create(
|
||||||
project=project_serialized.object,
|
project=project_serialized.object,
|
||||||
email=project_serialized.object.owner.email,
|
email=project_serialized.object.owner.email,
|
||||||
user=project_serialized.object.owner,
|
user=project_serialized.object.owner,
|
||||||
role=project_serialized.object.roles.all().first(),
|
role=project_serialized.object.roles.all().first(),
|
||||||
is_owner=True
|
is_owner=True
|
||||||
)
|
)
|
||||||
|
|
||||||
errors = service.get_errors()
|
errors = service.get_errors()
|
||||||
if errors:
|
if errors:
|
||||||
|
@ -103,8 +101,7 @@ class ProjectImporterViewSet(CreateModelMixin, GenericViewSet):
|
||||||
project = self.get_object_or_none()
|
project = self.get_object_or_none()
|
||||||
self.check_permissions(request, 'import_item', project)
|
self.check_permissions(request, 'import_item', project)
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change", "refissue")):
|
issue = service.store_issue(project, request.DATA)
|
||||||
issue = service.store_issue(project, request.DATA)
|
|
||||||
|
|
||||||
errors = service.get_errors()
|
errors = service.get_errors()
|
||||||
if errors:
|
if errors:
|
||||||
|
@ -119,8 +116,7 @@ class ProjectImporterViewSet(CreateModelMixin, GenericViewSet):
|
||||||
project = self.get_object_or_none()
|
project = self.get_object_or_none()
|
||||||
self.check_permissions(request, 'import_item', project)
|
self.check_permissions(request, 'import_item', project)
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change", "reftask")):
|
task = service.store_task(project, request.DATA)
|
||||||
task = service.store_task(project, request.DATA)
|
|
||||||
|
|
||||||
errors = service.get_errors()
|
errors = service.get_errors()
|
||||||
if errors:
|
if errors:
|
||||||
|
@ -135,8 +131,7 @@ class ProjectImporterViewSet(CreateModelMixin, GenericViewSet):
|
||||||
project = self.get_object_or_none()
|
project = self.get_object_or_none()
|
||||||
self.check_permissions(request, 'import_item', project)
|
self.check_permissions(request, 'import_item', project)
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change", "refus")):
|
us = service.store_user_story(project, request.DATA)
|
||||||
us = service.store_user_story(project, request.DATA)
|
|
||||||
|
|
||||||
errors = service.get_errors()
|
errors = service.get_errors()
|
||||||
if errors:
|
if errors:
|
||||||
|
@ -151,8 +146,7 @@ class ProjectImporterViewSet(CreateModelMixin, GenericViewSet):
|
||||||
project = self.get_object_or_none()
|
project = self.get_object_or_none()
|
||||||
self.check_permissions(request, 'import_item', project)
|
self.check_permissions(request, 'import_item', project)
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change")):
|
milestone = service.store_milestone(project, request.DATA)
|
||||||
milestone = service.store_milestone(project, request.DATA)
|
|
||||||
|
|
||||||
errors = service.get_errors()
|
errors = service.get_errors()
|
||||||
if errors:
|
if errors:
|
||||||
|
@ -167,8 +161,7 @@ class ProjectImporterViewSet(CreateModelMixin, GenericViewSet):
|
||||||
project = self.get_object_or_none()
|
project = self.get_object_or_none()
|
||||||
self.check_permissions(request, 'import_item', project)
|
self.check_permissions(request, 'import_item', project)
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change")):
|
wiki_page = service.store_wiki_page(project, request.DATA)
|
||||||
wiki_page = service.store_wiki_page(project, request.DATA)
|
|
||||||
|
|
||||||
errors = service.get_errors()
|
errors = service.get_errors()
|
||||||
if errors:
|
if errors:
|
||||||
|
@ -183,8 +176,7 @@ class ProjectImporterViewSet(CreateModelMixin, GenericViewSet):
|
||||||
project = self.get_object_or_none()
|
project = self.get_object_or_none()
|
||||||
self.check_permissions(request, 'import_item', project)
|
self.check_permissions(request, 'import_item', project)
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change")):
|
wiki_link = service.store_wiki_link(project, request.DATA)
|
||||||
wiki_link = service.store_wiki_link(project, request.DATA)
|
|
||||||
|
|
||||||
errors = service.get_errors()
|
errors = service.get_errors()
|
||||||
if errors:
|
if errors:
|
||||||
|
|
|
@ -16,8 +16,6 @@
|
||||||
|
|
||||||
from django.db.models import signals
|
from django.db.models import signals
|
||||||
|
|
||||||
from taiga.base.utils.signals import without_signals
|
|
||||||
|
|
||||||
from . import serializers
|
from . import serializers
|
||||||
from . import service
|
from . import service
|
||||||
|
|
||||||
|
@ -76,32 +74,30 @@ def dict_to_project(data, owner=None):
|
||||||
if owner:
|
if owner:
|
||||||
data['owner'] = owner
|
data['owner'] = owner
|
||||||
|
|
||||||
with without_signals([signals.post_save, "project_post_save"]):
|
project_serialized = service.store_project(data)
|
||||||
project_serialized = service.store_project(data)
|
|
||||||
|
|
||||||
if not project_serialized:
|
if not project_serialized:
|
||||||
raise TaigaImportError('error importing project')
|
raise TaigaImportError('error importing project')
|
||||||
|
|
||||||
proj = project_serialized.object
|
proj = project_serialized.object
|
||||||
|
|
||||||
service.store_choices(proj, data, "points", serializers.PointsExportSerializer)
|
service.store_choices(proj, data, "points", serializers.PointsExportSerializer)
|
||||||
service.store_choices(proj, data, "issue_types", serializers.IssueTypeExportSerializer)
|
service.store_choices(proj, data, "issue_types", serializers.IssueTypeExportSerializer)
|
||||||
service.store_choices(proj, data, "issue_statuses", serializers.IssueStatusExportSerializer)
|
service.store_choices(proj, data, "issue_statuses", serializers.IssueStatusExportSerializer)
|
||||||
service.store_choices(proj, data, "us_statuses", serializers.UserStoryStatusExportSerializer)
|
service.store_choices(proj, data, "us_statuses", serializers.UserStoryStatusExportSerializer)
|
||||||
service.store_choices(proj, data, "task_statuses", serializers.TaskStatusExportSerializer)
|
service.store_choices(proj, data, "task_statuses", serializers.TaskStatusExportSerializer)
|
||||||
service.store_choices(proj, data, "priorities", serializers.PriorityExportSerializer)
|
service.store_choices(proj, data, "priorities", serializers.PriorityExportSerializer)
|
||||||
service.store_choices(proj, data, "severities", serializers.SeverityExportSerializer)
|
service.store_choices(proj, data, "severities", serializers.SeverityExportSerializer)
|
||||||
|
|
||||||
if service.get_errors(clear=False):
|
if service.get_errors(clear=False):
|
||||||
raise TaigaImportError('error importing choices')
|
raise TaigaImportError('error importing choices')
|
||||||
|
|
||||||
service.store_default_choices(proj, data)
|
service.store_default_choices(proj, data)
|
||||||
|
|
||||||
if service.get_errors(clear=False):
|
if service.get_errors(clear=False):
|
||||||
raise TaigaImportError('error importing default choices')
|
raise TaigaImportError('error importing default choices')
|
||||||
|
|
||||||
with without_signals([signals.post_save, "role_post_save"]):
|
service.store_roles(proj, data)
|
||||||
service.store_roles(proj, data)
|
|
||||||
|
|
||||||
if service.get_errors(clear=False):
|
if service.get_errors(clear=False):
|
||||||
raise TaigaImportError('error importing roles')
|
raise TaigaImportError('error importing roles')
|
||||||
|
@ -121,38 +117,32 @@ def dict_to_project(data, owner=None):
|
||||||
if service.get_errors(clear=False):
|
if service.get_errors(clear=False):
|
||||||
raise TaigaImportError('error importing memberships')
|
raise TaigaImportError('error importing memberships')
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change")):
|
store_milestones(proj, data)
|
||||||
store_milestones(proj, data)
|
|
||||||
|
|
||||||
if service.get_errors(clear=False):
|
if service.get_errors(clear=False):
|
||||||
raise TaigaImportError('error importing milestones')
|
raise TaigaImportError('error importing milestones')
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change")):
|
store_wiki_pages(proj, data)
|
||||||
store_wiki_pages(proj, data)
|
|
||||||
|
|
||||||
if service.get_errors(clear=False):
|
if service.get_errors(clear=False):
|
||||||
raise TaigaImportError('error importing wiki pages')
|
raise TaigaImportError('error importing wiki pages')
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change")):
|
store_wiki_links(proj, data)
|
||||||
store_wiki_links(proj, data)
|
|
||||||
|
|
||||||
if service.get_errors(clear=False):
|
if service.get_errors(clear=False):
|
||||||
raise TaigaImportError('error importing wiki links')
|
raise TaigaImportError('error importing wiki links')
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change", "user_story_create_role_points_handler", "refus")):
|
store_user_stories(proj, data)
|
||||||
store_user_stories(proj, data)
|
|
||||||
|
|
||||||
if service.get_errors(clear=False):
|
if service.get_errors(clear=False):
|
||||||
raise TaigaImportError('error importing user stories')
|
raise TaigaImportError('error importing user stories')
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change", "refissue")):
|
store_issues(proj, data)
|
||||||
store_issues(proj, data)
|
|
||||||
|
|
||||||
if service.get_errors(clear=False):
|
if service.get_errors(clear=False):
|
||||||
raise TaigaImportError('error importing issues')
|
raise TaigaImportError('error importing issues')
|
||||||
|
|
||||||
with without_signals((signals.post_save, "events_dispatcher_on_change", "reftask")):
|
store_tasks(proj, data)
|
||||||
store_tasks(proj, data)
|
|
||||||
|
|
||||||
if service.get_errors(clear=False):
|
if service.get_errors(clear=False):
|
||||||
raise TaigaImportError('error importing issues')
|
raise TaigaImportError('error importing issues')
|
||||||
|
|
|
@ -81,7 +81,7 @@ def delete_sequence(sender, instance, **kwargs):
|
||||||
|
|
||||||
|
|
||||||
def attach_sequence(sender, instance, created, **kwargs):
|
def attach_sequence(sender, instance, created, **kwargs):
|
||||||
if created:
|
if created and not instance._importing:
|
||||||
# Create a reference object. This operation should be
|
# Create a reference object. This operation should be
|
||||||
# used in transaction context, otherwise it can
|
# used in transaction context, otherwise it can
|
||||||
# create a lot of phantom reference objects.
|
# create a lot of phantom reference objects.
|
||||||
|
|
Loading…
Reference in New Issue