From 133cf149fd73f9e69019bc4b4f8724cd66680864 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Barrag=C3=A1n=20Merino?= Date: Fri, 29 Jul 2016 12:39:51 +0200 Subject: [PATCH] Improve Epic sort feature --- taiga/projects/epics/api.py | 5 ++--- taiga/projects/epics/services.py | 26 ++++++++++---------------- tests/unit/test_order_updates.py | 2 -- 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/taiga/projects/epics/api.py b/taiga/projects/epics/api.py index bbfd164f..6f4b18e9 100644 --- a/taiga/projects/epics/api.py +++ b/taiga/projects/epics/api.py @@ -200,12 +200,11 @@ class EpicViewSet(OCCResourceMixin, VotedResourceMixin, HistoryResourceMixin, if project.blocked_code is not None: raise exc.Blocked(_("Blocked element")) - services.update_epics_order_in_bulk(data["bulk_epics"], + ret = services.update_epics_order_in_bulk(data["bulk_epics"], project=project, field=order_field) - services.snapshot_epics_in_bulk(data["bulk_epics"], request.user) - return response.NoContent() + return response.Ok(ret) @list_route(methods=["POST"]) def bulk_update_epics_order(self, request, **kwargs): diff --git a/taiga/projects/epics/services.py b/taiga/projects/epics/services.py index 8674e79f..ea470e8f 100644 --- a/taiga/projects/epics/services.py +++ b/taiga/projects/epics/services.py @@ -27,6 +27,7 @@ from django.utils.translation import ugettext as _ from taiga.base.utils import db, text from taiga.projects.history.services import take_snapshot +from taiga.projects.services import apply_order_updates from taiga.projects.epics.apps import connect_epics_signals from taiga.projects.epics.apps import disconnect_epics_signals from taiga.events import events @@ -78,28 +79,21 @@ def update_epics_order_in_bulk(bulk_data: list, field: str, project: object): Update the order of some epics. `bulk_data` should be a list of tuples with the following format: - [(, {: , ...}), ...] + [{'epic_id': , 'order': }, ...] """ - epic_ids = [] - new_order_values = [] - for epic_data in bulk_data: - epic_ids.append(epic_data["epic_id"]) - new_order_values.append({field: epic_data["order"]}) + epics = project.epics.all() + epic_orders = {e.id: getattr(e, field) for e in epics} + new_epic_orders = {d["epic_id"]: d["order"] for d in bulk_data} + apply_order_updates(epic_orders, new_epic_orders) + + epic_ids = epic_orders.keys() events.emit_event_for_ids(ids=epic_ids, content_type="epics.epic", projectid=project.pk) - db.update_in_bulk_with_ids(epic_ids, new_order_values, model=models.Epic) - - -def snapshot_epics_in_bulk(bulk_data, user): - for epic_data in bulk_data: - try: - epic = models.Epic.objects.get(pk=epic_data['epic_id']) - take_snapshot(epic, user=user) - except models.Epic.DoesNotExist: - pass + db.update_attr_in_bulk_for_ids(epic_orders, field, models.Epic) + return epic_orders ##################################################### diff --git a/tests/unit/test_order_updates.py b/tests/unit/test_order_updates.py index f7660bf0..1a4a571c 100644 --- a/tests/unit/test_order_updates.py +++ b/tests/unit/test_order_updates.py @@ -131,7 +131,6 @@ def test_apply_order_updates_duplicated_orders(): "a": 3 } apply_order_updates(orders, new_orders) - print(orders) assert orders == { "a": 3, "c": 4, @@ -155,7 +154,6 @@ def test_apply_order_updates_multiple_elements_duplicated_orders(): "a": 4 } apply_order_updates(orders, new_orders) - print(orders) assert orders == { "c": 3, "d": 3,