def update_files()

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


def update_files(db: Session, tasks: list, job_id: int):
    """
    Extend `distributed_annotating_pages` and
    'distributed_validating_pages' fields with distributed pages.
    file_pages: key: file_id,
    value: list of two lists, first containing pages for validation,
    second - for annotation
    file_pages:
    {
        file_id: [
                    [pages for validation],
                    [pages for annotation]
                ],
        ...
    }
    """
    file_pages = defaultdict(lambda: [[], []])
    for task in tasks:
        if task["is_validation"]:
            file_pages[int(task["file_id"])][0].extend(task["pages"])
        else:
            file_pages[int(task["file_id"])][1].extend(task["pages"])
    files = (
        db.query(File)
        .filter(
            File.file_id.in_(list(file_pages)),
            File.job_id == job_id,
        )
        .with_for_update()
        .all()
    )
    for task_file in files:
        file_pages[int(task_file.file_id)][0].extend(
            task_file.distributed_validating_pages
        )

        task_file.distributed_validating_pages = sorted(
            set(file_pages[int(task_file.file_id)][0])
        )

        file_pages[int(task_file.file_id)][1].extend(
            task_file.distributed_annotating_pages
        )
        task_file.distributed_annotating_pages = sorted(
            set(file_pages[int(task_file.file_id)][1])
        )