Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 12 additions & 4 deletions labelbox/schema/data_row.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import logging
from typing import TYPE_CHECKING, Collection, Dict, List, Optional, Union
from typing import TYPE_CHECKING, List, Optional, Union
import json
from labelbox.exceptions import ResourceNotFoundError

from labelbox.orm import query
from labelbox.orm.db_object import DbObject, Updateable, BulkDeletable, experimental
Expand All @@ -11,7 +10,6 @@
from labelbox.schema.export_params import CatalogExportParams, validate_catalog_export_params
from labelbox.schema.export_task import ExportTask
from labelbox.schema.task import Task
from labelbox.schema.user import User # type: ignore

if TYPE_CHECKING:
from labelbox import AssetAttachment, Client
Expand Down Expand Up @@ -74,9 +72,19 @@ def __init__(self, *args, **kwargs):
def update(self, **kwargs):
# Convert row data to string if it is an object
# All other updates pass through
primary_fields = ["external_id", "global_key", "row_data"]
for field in primary_fields:
data = kwargs.get(field)
if data == "" or data == {}:
raise ValueError(f"{field} cannot be empty if it is set")
if not any(kwargs.get(field) for field in primary_fields):
raise ValueError(
f"At least one of these fields needs to be present: {primary_fields}"
)

row_data = kwargs.get("row_data")
if isinstance(row_data, dict):
kwargs['row_data'] = json.dumps(kwargs['row_data'])
kwargs['row_data'] = json.dumps(row_data)
super().update(**kwargs)

@staticmethod
Expand Down
17 changes: 17 additions & 0 deletions tests/integration/test_data_rows.py
Original file line number Diff line number Diff line change
Expand Up @@ -554,6 +554,23 @@ def test_create_data_rows_with_metadata_wrong_type(dataset, image_url):
])


def test_data_row_update_missing_or_empty_required_fields(
dataset, rand_gen, image_url):
external_id = rand_gen(str)
data_row = dataset.create_data_row(row_data=image_url,
external_id=external_id)
with pytest.raises(ValueError):
data_row.update(row_data="")
with pytest.raises(ValueError):
data_row.update(row_data={})
with pytest.raises(ValueError):
data_row.update(external_id="")
with pytest.raises(ValueError):
data_row.update(global_key="")
with pytest.raises(ValueError):
data_row.update()


def test_data_row_update(client, dataset, rand_gen, image_url,
wait_for_data_row_processing):
external_id = rand_gen(str)
Expand Down