Bin
2025-12-16 9e0b2ba2c317b1a86212f24cbae3195ad1f3dbfa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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