Skip to content

Commit a18c13b

Browse files
authored
[PLT-1355] Simplify labeling sevice handling for project (#1762)
1 parent 142b601 commit a18c13b

File tree

3 files changed

+19
-40
lines changed

3 files changed

+19
-40
lines changed

libs/labelbox/src/labelbox/schema/labeling_service.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,19 @@ def request(self) -> 'LabelingService':
8787
raise Exception("Failed to start labeling service")
8888
return LabelingService.get(self.client, self.project_id)
8989

90+
@classmethod
91+
def getOrCreate(cls, client, project_id: Cuid) -> 'LabelingService':
92+
"""
93+
Returns the labeling service associated with the project. If the project does not have a labeling service, it will create one.
94+
95+
Returns:
96+
LabelingService: The labeling service for the project.
97+
"""
98+
try:
99+
return cls.get(client, project_id)
100+
except ResourceNotFoundError:
101+
return cls.start(client, project_id)
102+
90103
@classmethod
91104
def get(cls, client, project_id: Cuid) -> 'LabelingService':
92105
"""

libs/labelbox/src/labelbox/schema/project.py

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1920,13 +1920,12 @@ def clone(self) -> "Project":
19201920
def get_labeling_service(self) -> LabelingService:
19211921
"""Get the labeling service for this project.
19221922
1923-
Raises:
1924-
ResourceNotFoundError if the project does not have a labeling service.
1923+
Will automatically create a labeling service if one does not exist.
19251924
19261925
Returns:
19271926
LabelingService: The labeling service for this project.
19281927
"""
1929-
return LabelingService.get(self.client, self.uid)
1928+
return LabelingService.getOrCreate(self.client, self.uid)
19301929

19311930
@experimental
19321931
def get_labeling_service_status(self) -> LabelingServiceStatus:
@@ -1940,15 +1939,6 @@ def get_labeling_service_status(self) -> LabelingServiceStatus:
19401939
"""
19411940
return self.get_labeling_service().status
19421941

1943-
@experimental
1944-
def request_labeling_service(self) -> LabelingService:
1945-
"""Get the labeling service for this project.
1946-
1947-
Returns:
1948-
LabelingService: The labeling service for this project.
1949-
"""
1950-
return LabelingService.start(self.client, self.uid) # type: ignore
1951-
19521942

19531943
class ProjectMember(DbObject):
19541944
user = Relationship.ToOne("User", cache=True)

libs/labelbox/tests/integration/test_labeling_service.py

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -4,40 +4,16 @@
44
from labelbox.schema.labeling_service import LabelingServiceStatus
55

66

7-
def test_get_labeling_service_throws_exception(project):
8-
with pytest.raises(ResourceNotFoundError): # No labeling service by default
9-
project.get_labeling_service()
10-
with pytest.raises(ResourceNotFoundError): # No labeling service by default
11-
project.get_labeling_service_status()
12-
13-
147
def test_start_labeling_service(project):
15-
labeling_service = project.request_labeling_service()
16-
assert labeling_service.status == LabelingServiceStatus.SetUp
17-
assert labeling_service.project_id == project.uid
18-
198
# Check that the labeling service is now available
20-
labeling_service = project.get_labeling_service()
9+
labeling_service = project.get_labeling_service() # creates and gets it
2110
assert labeling_service.status == LabelingServiceStatus.SetUp
2211
assert labeling_service.project_id == project.uid
2312

2413
labeling_service_status = project.get_labeling_service_status()
2514
assert labeling_service_status == LabelingServiceStatus.SetUp
2615

2716

28-
def test_request_labeling_service(
29-
configured_batch_project_for_labeling_service):
30-
project = configured_batch_project_for_labeling_service
31-
32-
project.upsert_instructions('tests/integration/media/sample_pdf.pdf')
33-
34-
labeling_service = project.request_labeling_service(
35-
) # project fixture is an Image type project
36-
labeling_service.request()
37-
assert project.get_labeling_service_status(
38-
) == LabelingServiceStatus.Requested
39-
40-
4117
def test_request_labeling_service_moe_offline_project(
4218
rand_gen, offline_chat_evaluation_project, chat_evaluation_ontology,
4319
offline_conversational_data_row, model_config):
@@ -51,7 +27,7 @@ def test_request_labeling_service_moe_offline_project(
5127

5228
project.upsert_instructions('tests/integration/media/sample_pdf.pdf')
5329

54-
labeling_service = project.request_labeling_service()
30+
labeling_service = project.get_labeling_service()
5531
labeling_service.request()
5632
assert project.get_labeling_service_status(
5733
) == LabelingServiceStatus.Requested
@@ -65,7 +41,7 @@ def test_request_labeling_service_moe_project(
6541

6642
project.upsert_instructions('tests/integration/media/sample_pdf.pdf')
6743

68-
labeling_service = project.request_labeling_service()
44+
labeling_service = project.get_labeling_service()
6945
with pytest.raises(
7046
LabelboxError,
7147
match=
@@ -81,7 +57,7 @@ def test_request_labeling_service_moe_project(
8157

8258

8359
def test_request_labeling_service_incomplete_requirements(project, ontology):
84-
labeling_service = project.request_labeling_service(
60+
labeling_service = project.get_labeling_service(
8561
) # project fixture is an Image type project
8662
with pytest.raises(ResourceNotFoundError,
8763
match="Associated ontology id could not be found"

0 commit comments

Comments
 (0)