Skip to content

Commit 847956a

Browse files
author
Val Brodsky
committed
Handle model setup complete on model project config deletion
1 parent f5cfa6c commit 847956a

File tree

4 files changed

+52
-12
lines changed

4 files changed

+52
-12
lines changed

libs/labelbox/src/labelbox/exceptions.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
import re
2+
3+
14
class LabelboxError(Exception):
25
"""Base class for exceptions."""
36

@@ -147,3 +150,16 @@ class CustomMetricsNotSupportedException(Exception):
147150

148151
class ProcessingWaitTimeout(Exception):
149152
"""Raised when waiting for the data rows to be processed takes longer than allowed"""
153+
154+
155+
def _error_message_for_unparsed_graphql_error(error_string: str) -> str:
156+
# Regex to find the message content
157+
pattern = r"'message': '([^']+)'"
158+
# Search for the pattern in the error string
159+
match = re.search(pattern, error_string)
160+
if match:
161+
error_content = match.group(1)
162+
else:
163+
error_content = "Unknown error"
164+
165+
return error_content

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

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
import re
21
import json
32
import logging
43
from string import Template
@@ -14,6 +13,7 @@
1413

1514
from labelbox import parser
1615
from labelbox import utils
16+
from labelbox.exceptions import _error_message_for_unparsed_graphql_error
1717
from labelbox.exceptions import (InvalidQueryError, LabelboxError,
1818
ProcessingWaitTimeout, ResourceConflict,
1919
ResourceNotFoundError)
@@ -1274,15 +1274,7 @@ def add_model_config(self, model_config_id: str) -> str:
12741274
except LabelboxError as e:
12751275
# unfortunately, this is the type of errors our client does not deal with and so the error message is not in the same format as the other errors
12761276
# needs custom parsing
1277-
error_string = e.message
1278-
# Regex to find the message content
1279-
pattern = r"'message': '([^']+)'"
1280-
# Search for the pattern in the error string
1281-
match = re.search(pattern, error_string)
1282-
if match:
1283-
error_content = match.group(1)
1284-
else:
1285-
error_content = "Unknown error"
1277+
error_content = _error_message_for_unparsed_graphql_error(e.message)
12861278
raise LabelboxError(message=error_content) from e
12871279

12881280
if not result:

libs/labelbox/src/labelbox/schema/project_model_config.py

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
from labelbox.orm.db_object import DbObject, Deletable
1+
from labelbox.orm.db_object import DbObject
22
from labelbox.orm.model import Field, Relationship
3+
from labelbox.exceptions import LabelboxError, _error_message_for_unparsed_graphql_error
34

45

56
class ProjectModelConfig(DbObject):
@@ -30,5 +31,11 @@ def delete(self) -> bool:
3031
params = {
3132
"id": self.uid,
3233
}
33-
result = self.client.execute(query, params)
34+
35+
try:
36+
result = self.client.execute(query, params)
37+
except LabelboxError as e:
38+
error_content = _error_message_for_unparsed_graphql_error(e.message)
39+
raise LabelboxError(message=error_content) from e
40+
3441
return result["deleteProjectModelConfig"]["success"]

libs/labelbox/tests/integration/test_project_set_model_setup_complete.py

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,31 @@ def test_live_chat_evaluation_project(
1919
project.add_model_config(model_config.uid)
2020

2121

22+
def test_live_chat_evaluation_project_delete_cofig(
23+
live_chat_evaluation_project_with_new_dataset, model_config):
24+
25+
project = live_chat_evaluation_project_with_new_dataset
26+
project_model_config_id = project.add_model_config(model_config.uid)
27+
assert project_model_config_id
28+
29+
project_model_config = None
30+
for pmg in project.project_model_configs():
31+
if pmg.uid == project_model_config_id:
32+
project_model_config = pmg
33+
break
34+
assert project_model_config
35+
36+
project.set_project_model_setup_complete()
37+
assert bool(project.model_setup_complete) is True
38+
39+
with pytest.raises(
40+
expected_exception=LabelboxError,
41+
match=
42+
"Cannot create model config for project because model setup is complete"
43+
):
44+
project_model_config.delete()
45+
46+
2247
def test_offline_chat_evaluation_project(offline_chat_evaluation_project,
2348
model_config):
2449

0 commit comments

Comments
 (0)