def test_update_in_bulk_with_a_callback(): instance = mock.Mock() callback = mock.Mock() instances = [instance, instance] new_values = [{"field1": 1}, {"field2": 2}] update_in_bulk(instances, new_values, callback) assert callback.call_count == 2
def test_update_in_bulk(): instance = mock.Mock() instances = [instance, instance] new_values = [{"field1": 1}, {"field2": 2}] update_in_bulk(instances, new_values) assert instance.save.call_count == 2 assert instance.field1 == 1 assert instance.field2 == 2
def update_userstories_milestone_in_bulk(bulk_data: list, milestone: object): """ Update the milestone and the milestone order of some user stories adding the extra orders needed to keep consistency. `bulk_data` should be a list of dicts with the following format: [{'us_id': <value>, 'order': <value>}, ...] """ user_stories = milestone.user_stories.all() us_orders = {us.id: getattr(us, "sprint_order") for us in user_stories} new_us_orders = {} for e in bulk_data: new_us_orders[e["us_id"]] = e["order"] # The base orders where we apply the new orders must containg all # the values us_orders[e["us_id"]] = e["order"] apply_order_updates(us_orders, new_us_orders) us_milestones = {e["us_id"]: milestone.id for e in bulk_data} user_story_ids = us_milestones.keys() events.emit_event_for_ids( ids=user_story_ids, content_type="userstories.userstory", projectid=milestone.project.pk, ) us_instance_list = [] us_values = [] for us_id in user_story_ids: us = UserStory.objects.get(pk=us_id) us_instance_list.append(us) us_values.append({"milestone_id": milestone.id}) db.update_in_bulk(us_instance_list, us_values) db.update_attr_in_bulk_for_ids(us_orders, "sprint_order", UserStory) # Updating the milestone for the tasks Task.objects.filter(user_story_id__in=[e["us_id"] for e in bulk_data]).update( milestone=milestone ) return us_orders
def update_issues_milestone_in_bulk(bulk_data: list, milestone: object): """ Update the milestone some issues adding `bulk_data` should be a list of dicts with the following format: [{'task_id': <value>}, ...] """ issue_milestones = {e["issue_id"]: milestone.id for e in bulk_data} issue_ids = issue_milestones.keys() events.emit_event_for_ids(ids=issue_ids, content_type="issues.issues", projectid=milestone.project.pk) issues_instance_list = [] issues_values = [] for issue_id in issue_ids: issue = Issue.objects.get(pk=issue_id) issues_instance_list.append(issue) issues_values.append({'milestone_id': milestone.id}) db.update_in_bulk(issues_instance_list, issues_values) return issue_milestones
def update_tasks_milestone_in_bulk(bulk_data: list, milestone: object): """ Update the milestone and the milestone order of some tasks adding the extra orders needed to keep consistency. `bulk_data` should be a list of dicts with the following format: [{'task_id': <value>, 'order': <value>}, ...] """ tasks = milestone.tasks.all() task_orders = {task.id: getattr(task, "taskboard_order") for task in tasks} new_task_orders = {} for e in bulk_data: new_task_orders[e["task_id"]] = e["order"] # The base orders where we apply the new orders must containg all # the values task_orders[e["task_id"]] = e["order"] apply_order_updates(task_orders, new_task_orders) task_milestones = {e["task_id"]: milestone.id for e in bulk_data} task_ids = task_milestones.keys() events.emit_event_for_ids(ids=task_ids, content_type="tasks.task", projectid=milestone.project.pk) task_instance_list = [] task_values = [] for task_id in task_ids: task = Task.objects.get(pk=task_id) task_instance_list.append(task) task_values.append({'milestone_id': milestone.id}) db.update_in_bulk(task_instance_list, task_values) db.update_attr_in_bulk_for_ids(task_orders, "taskboard_order", Task) return task_milestones