Fix reorder does not introduce new holes

remotes/origin/3.4.0rc
Miguel Gonzalez 2018-06-25 23:17:16 +02:00 committed by Alex Hermida
parent 1b0b879843
commit be66c3270c
2 changed files with 20 additions and 5 deletions

View File

@ -42,6 +42,11 @@ def apply_order_updates(base_orders: dict, new_orders: dict, *, remove_equal_ori
invalid_keys = new_orders.keys() - base_orders.keys() invalid_keys = new_orders.keys() - base_orders.keys()
[new_orders.pop(id, None) for id in invalid_keys] [new_orders.pop(id, None) for id in invalid_keys]
# Remove the elements from new_orders contained in base_orders
if remove_equal_original:
common_keys = base_orders.keys() & new_orders.keys()
[new_orders.pop(id, None) for id in common_keys if new_orders[id] == base_orders[id]]
# We will apply the multiple order changes by the new position order # We will apply the multiple order changes by the new position order
sorted_new_orders = [(k, v) for k, v in new_orders.items()] sorted_new_orders = [(k, v) for k, v in new_orders.items()]
sorted_new_orders = sorted(sorted_new_orders, key=lambda e: e[1]) sorted_new_orders = sorted(sorted_new_orders, key=lambda e: e[1])
@ -69,11 +74,6 @@ def apply_order_updates(base_orders: dict, new_orders: dict, *, remove_equal_ori
removing_keys = [id for id in base_orders if id not in updated_order_ids] removing_keys = [id for id in base_orders if id not in updated_order_ids]
[base_orders.pop(id, None) for id in removing_keys] [base_orders.pop(id, None) for id in removing_keys]
# Remove elements that are equal to the original
if remove_equal_original:
common_keys = original_orders.keys() & base_orders.keys()
[base_orders.pop(id, None) for id in common_keys if base_orders[id] == original_orders[id]]
def update_projects_order_in_bulk(bulk_data: list, field: str, user): def update_projects_order_in_bulk(bulk_data: list, field: str, user):
""" """

View File

@ -197,3 +197,18 @@ def test_apply_order_not_include_noop():
} }
apply_order_updates(orders, new_orders, remove_equal_original=True) apply_order_updates(orders, new_orders, remove_equal_original=True)
assert orders == {} assert orders == {}
def test_apply_order_does_no_generate_holes():
orders = {
"a": 0,
"b": 2,
"c": 1,
"z": 99,
}
new_orders = {
"c": 1,
"z": 99,
}
apply_order_updates(orders, new_orders, remove_equal_original=True)
assert orders == {}