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