"""This file and its contents are licensed under the Apache License 2.0. Please see the included NOTICE for copyright information and LICENSE for a copy of the license.
|
"""
|
import datetime
|
import os
|
|
import pytest
|
from django.conf import settings
|
from projects.models import Project
|
from users.models import User
|
|
from label_studio.tests.test_data.gen_tasks_and_annotations import gen_tasks
|
|
|
@pytest.mark.django_db
|
def test_load_tasks_and_annotations(business_client, annotator_client, configured_project):
|
"""
|
this test loads tasks_and_annotations.json
|
with 1000 tasks and 5000 annotations and recalc accuracy
|
with bulk_update
|
goal is to be under time limit to ensure operations
|
are fast enough
|
|
this project has p.data_types_json() as
|
{text: '', meta_info:''}
|
json should be generated as item = {data:{}}
|
|
one could check results with
|
tasks = Task.objects.all()
|
print('annotations', [(t.id, t.annotations.count()) for t in tasks])
|
print('accuracy', [(t.id, t.accuracy) for t in tasks])
|
|
:param annotator_client:
|
:param configured_project:
|
:return:
|
"""
|
p = Project.objects.get(id=configured_project.id)
|
project_id = configured_project.id
|
|
user = User.objects.get(email='annotator@pytest.net')
|
p.created_by.active_organization.add_user(user)
|
p.add_collaborator(user)
|
|
gen_tasks(user.id)
|
|
dt1 = datetime.datetime.now()
|
filename = 'tasks_and_annotations.json'
|
filepath = os.path.join(settings.TEST_DATA_ROOT, filename)
|
|
data = {filename: (open(filepath, 'rb'), filename)}
|
url = '/api/projects/{}/tasks/bulk/'.format(project_id)
|
r = business_client.post(url, data=data, format='multipart')
|
assert r.status_code == 201, r.content
|
|
dt2 = datetime.datetime.now()
|
# time depends on aws machine cpu
|
# around 15-30 secs for 1000 tasks each w 5 annotations
|
assert (dt2 - dt1).seconds < 150
|