import pytest from label_studio_sdk.client import LabelStudio from tasks.models import Annotation from label_studio.tests.sdk.common import LABEL_CONFIG_AND_TASKS pytestmark = pytest.mark.django_db def test_project_annotators_sdk(django_live_url, business_client): ls = LabelStudio(base_url=django_live_url, api_key=business_client.api_key) # Create project via SDK proj = ls.projects.create(title='Annotators Project', label_config=LABEL_CONFIG_AND_TASKS['label_config']) # Import two tasks ls.projects.import_tasks( id=proj.id, request=[ {'data': {'my_text': 't1'}}, {'data': {'my_text': 't2'}}, ], ) # Get created tasks tasks = list(ls.tasks.list(project=proj.id)) # Create two users via SDK u2 = ls.users.create(email='a2@example.com', username='annotator2', first_name='A', last_name='Two') u3 = ls.users.create(email='a3@example.com', username='annotator3', first_name='A', last_name='Three') # Add annotations directly (SDK doesn't expose annotation create easily with arbitrary user) # Use ORM for completed_by set to the two users Annotation.objects.create( task_id=tasks[0].id, project_id=proj.id, completed_by_id=business_client.user.id, result=[{'r': 1}] ) Annotation.objects.create(task_id=tasks[1].id, project_id=proj.id, completed_by_id=u2.id, result=[{'r': 2}]) # Call annotators API via SDK wrapper resp = list(ls.projects.list_unique_annotators(id=proj.id)) returned_ids = [u.id for u in resp] assert sorted(returned_ids) == sorted([business_client.user.id, u2.id]) assert returned_ids == sorted(returned_ids) assert u3.id not in returned_ids # no annotations created for this user