def remove_pages_in_work()

in annotation/annotation/jobs/services.py [0:0]


def remove_pages_in_work(tasks: List[Task], pages_in_work: FileInWork):
    """Sort tasks by task pages and remove already started pages from tasks.
    All operations are inplace."""
    tasks.sort(key=lambda x: x["pages"])
    pages_in_work.sort(key=lambda x: x["pages_number"])

    for pages in pages_in_work:
        pages_to_remove = set(pages["pages_number"])

        for index, task in enumerate(tasks):
            if pages["file_id"] == task["file_id"] and any(
                page in task["pages"] for page in pages_to_remove
            ):
                same_pages = pages_to_remove.intersection(set(task["pages"]))
                task["pages"] = [
                    page for page in task["pages"] if page not in same_pages
                ]
                pages_to_remove.difference_update(same_pages)

                if not task["pages"]:
                    tasks.pop(index)

                if not pages_to_remove:
                    break