Skip to content

Commit 903fdfc

Browse files
author
Val Brodsky
committed
Add sdk method to get data row by global key
1 parent eb946b2 commit 903fdfc

File tree

3 files changed

+42
-1
lines changed

3 files changed

+42
-1
lines changed

labelbox/client.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
from labelbox.pagination import PaginatedCollection
2525
from labelbox.schema.data_row_metadata import DataRowMetadataOntology
2626
from labelbox.schema.dataset import Dataset
27+
from labelbox.schema.data_row import DataRow
2728
from labelbox.schema.enums import CollectionJobStatus
2829
from labelbox.schema.iam_integration import IAMIntegration
2930
from labelbox.schema import role
@@ -430,6 +431,7 @@ def _get_single(self, db_object_type, uid):
430431
of the given type for the given ID.
431432
"""
432433
query_str, params = query.get_single(db_object_type, uid)
434+
433435
res = self.execute(query_str, params)
434436
res = res and res.get(utils.camel_case(db_object_type.type_name()))
435437
if res is None:
@@ -727,6 +729,21 @@ def get_data_row(self, data_row_id):
727729

728730
return self._get_single(Entity.DataRow, data_row_id)
729731

732+
def get_data_row_by_global_key(self, global_key: str) -> DataRow:
733+
"""
734+
Returns: DataRow: returns a single data row given the global key
735+
"""
736+
737+
res = self.get_data_row_ids_for_global_keys([global_key])
738+
if res['status'] != "SUCCESS":
739+
raise labelbox.exceptions.MalformedQueryException(res['errors'][0])
740+
if len(res['results']) == 0:
741+
raise labelbox.exceptions.ResourceNotFoundError(
742+
Entity.DataRow, {global_key: global_key})
743+
data_row_id = res['results'][0]
744+
745+
return self.get_data_row(data_row_id)
746+
730747
def get_data_row_metadata_ontology(self) -> DataRowMetadataOntology:
731748
"""
732749

tests/integration/conftest.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,12 @@ def small_dataset(dataset: Dataset):
195195

196196
@pytest.fixture
197197
def data_row(dataset, image_url, rand_gen):
198+
global_key = f"global-key-{rand_gen(str)}"
198199
task = dataset.create_data_rows([
199200
{
200201
"row_data": image_url,
201202
"external_id": "my-image",
202-
"global_key": f"global-key-{rand_gen(str)}"
203+
"global_key": global_key
203204
},
204205
])
205206
task.wait_till_done()
@@ -208,6 +209,22 @@ def data_row(dataset, image_url, rand_gen):
208209
dr.delete()
209210

210211

212+
@pytest.fixture
213+
def data_row_and_global_key(dataset, image_url, rand_gen):
214+
global_key = f"global-key-{rand_gen(str)}"
215+
task = dataset.create_data_rows([
216+
{
217+
"row_data": image_url,
218+
"external_id": "my-image",
219+
"global_key": global_key
220+
},
221+
])
222+
task.wait_till_done()
223+
dr = dataset.data_rows().get_one()
224+
yield dr, global_key
225+
dr.delete()
226+
227+
211228
# can be used with
212229
# @pytest.mark.parametrize('data_rows', [<count of data rows>], indirect=True)
213230
# if omitted, count defaults to 1

tests/integration/test_data_rows.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,13 @@ def make_metadata_fields_dict():
118118
return fields
119119

120120

121+
def test_get_data_row_by_global_key(data_row_and_global_key, client, rand_gen):
122+
_, global_key = data_row_and_global_key
123+
data_row = client.get_data_row_by_global_key(global_key)
124+
assert type(data_row) == DataRow
125+
assert data_row.global_key == global_key
126+
127+
121128
def test_get_data_row(data_row, client):
122129
assert client.get_data_row(data_row.uid)
123130

0 commit comments

Comments
 (0)