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])
)