Skip to content

Commit 86e7574

Browse files
author
gdj0nes
committed
FIX: parsing logic
1 parent 21adc05 commit 86e7574

File tree

2 files changed

+41
-27
lines changed

2 files changed

+41
-27
lines changed

labelbox/schema/data_row_metadata.py

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ def id(self):
5050

5151

5252
class _CamelCaseMixin(BaseModel):
53-
5453
class Config:
5554
allow_population_by_field_name = True
5655
alias_generator = camel_case
@@ -158,7 +157,7 @@ def _make_name_index(fields: List[DataRowMetadataSchema]):
158157

159158
@staticmethod
160159
def _make_id_index(
161-
fields: List[DataRowMetadataSchema]
160+
fields: List[DataRowMetadataSchema]
162161
) -> Dict[SchemaId, DataRowMetadataSchema]:
163162
index = {}
164163
for f in fields:
@@ -198,7 +197,7 @@ def _parse_ontology(self) -> List[DataRowMetadataSchema]:
198197
DataRowMetadataSchema(**{
199198
**option,
200199
**{
201-
"parent": schema["id"]
200+
"parent": schema["uid"]
202201
}
203202
}))
204203
schema["options"] = options
@@ -207,9 +206,9 @@ def _parse_ontology(self) -> List[DataRowMetadataSchema]:
207206
return fields
208207

209208
def parse_metadata(
210-
self, unparsed: List[Dict[str,
211-
List[Union[str,
212-
Dict]]]]) -> List[DataRowMetadata]:
209+
self, unparsed: List[Dict[str,
210+
List[Union[str,
211+
Dict]]]]) -> List[DataRowMetadata]:
213212
""" Parse metadata responses
214213
215214
>>> mdo.parse_metadata([metdata])
@@ -270,7 +269,7 @@ def bulk_upsert(
270269
raise ValueError("Empty list passed")
271270

272271
def _batch_upsert(
273-
upserts: List[_UpsertBatchDataRowMetadata]
272+
upserts: List[_UpsertBatchDataRowMetadata]
274273
) -> List[DataRowMetadataBatchResponse]:
275274
query = """mutation UpsertDataRowMetadataBetaPyApi($metadata: [DataRowCustomMetadataBatchUpsertInput!]!) {
276275
upsertDataRowCustomMetadata(data: $metadata){
@@ -303,13 +302,13 @@ def _batch_upsert(
303302
fields=list(
304303
chain.from_iterable(
305304
self._parse_upsert(m) for m in m.fields))).dict(
306-
by_alias=True))
305+
by_alias=True))
307306

308307
res = _batch_operations(_batch_upsert, items, self._batch_size)
309308
return res
310309

311310
def bulk_delete(
312-
self, deletes: List[DeleteDataRowMetadata]
311+
self, deletes: List[DeleteDataRowMetadata]
313312
) -> List[DataRowMetadataBatchResponse]:
314313
""" Delete metadata from a datarow by specifiying the fields you want to remove
315314
@@ -336,7 +335,7 @@ def bulk_delete(
336335
raise ValueError("Empty list passed")
337336

338337
def _batch_delete(
339-
deletes: List[_DeleteBatchDataRowMetadata]
338+
deletes: List[_DeleteBatchDataRowMetadata]
340339
) -> List[DataRowMetadataBatchResponse]:
341340
query = """mutation DeleteDataRowMetadataBetaPyApi($deletes: [DataRowCustomMetadataBatchDeleteInput!]!) {
342341
deleteDataRowCustomMetadata(data: $deletes) {
@@ -415,6 +414,8 @@ def _parse_upsert(
415414
parsed = _validate_parse_datetime(metadatum)
416415
elif schema.kind == DataRowMetadataKind.string:
417416
parsed = _validate_parse_text(metadatum)
417+
elif schema.kind == DataRowMetadataKind.number:
418+
parsed = _validate_parse_number(metadatum)
418419
elif schema.kind == DataRowMetadataKind.embedding:
419420
parsed = _validate_parse_embedding(metadatum)
420421
elif schema.kind == DataRowMetadataKind.enum:
@@ -455,9 +456,9 @@ def _batch_items(iterable: List[Any], size: int) -> Generator[Any, None, None]:
455456

456457

457458
def _batch_operations(
458-
batch_function: _BatchFunction,
459-
items: List,
460-
batch_size: int = 100,
459+
batch_function: _BatchFunction,
460+
items: List,
461+
batch_size: int = 100,
461462
):
462463
response = []
463464

@@ -472,6 +473,12 @@ def _validate_parse_embedding(
472473
return [field.dict(by_alias=True)]
473474

474475

476+
def _validate_parse_number(
477+
field: DataRowMetadataField
478+
) -> List[Dict[str, Union[SchemaId, Number]]]:
479+
return [field.dict(by_alias=True)]
480+
481+
475482
def _validate_parse_datetime(
476483
field: DataRowMetadataField) -> List[Dict[str, Union[SchemaId, str]]]:
477484
# TODO: better validate tzinfo

tests/integration/test_data_row_metadata.py

Lines changed: 21 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
from datetime import datetime
21
import time
2+
from datetime import datetime
33

44
import pytest
55

@@ -24,11 +24,11 @@ def mdo(client):
2424
@pytest.fixture
2525
def big_dataset(dataset: Dataset, image_url):
2626
task = dataset.create_data_rows([
27-
{
28-
"row_data": image_url,
29-
"external_id": "my-image"
30-
},
31-
] * 250)
27+
{
28+
"row_data": image_url,
29+
"external_id": "my-image"
30+
},
31+
] * 250)
3232
task.wait_till_done()
3333

3434
yield dataset
@@ -38,11 +38,11 @@ def big_dataset(dataset: Dataset, image_url):
3838
def wait_for_embeddings_svc(data_row_ids, mdo):
3939
for idx in range(5):
4040
if all([
41-
len(metadata.fields)
42-
for metadata in mdo.bulk_export(data_row_ids)
41+
len(metadata.fields)
42+
for metadata in mdo.bulk_export(data_row_ids)
4343
]):
4444
return
45-
time.sleep((idx + 1)**2)
45+
time.sleep((idx + 1) ** 2)
4646
raise Exception("Embedding svc failed to update metadata.")
4747

4848

@@ -127,7 +127,6 @@ def test_bulk_partial_delete_datarow_metadata(datarow, mdo):
127127

128128

129129
def test_large_bulk_delete_datarow_metadata(big_dataset, mdo):
130-
131130
metadata = []
132131
data_row_ids = [dr.uid for dr in big_dataset.data_rows()]
133132
wait_for_embeddings_svc(data_row_ids, mdo)
@@ -229,11 +228,19 @@ def test_parse_raw_metadata(mdo):
229228
}, {
230229
'schemaId': 'cko8sdzv70006h2dk8jg64zvb',
231230
'value': '2021-07-20T21:41:14.606710Z'
232-
}]
231+
}, {
232+
'schemaId': 'cko8sdzv70006h2dk8jg64zvb',
233+
'value': 0.5
234+
},
235+
]
233236
}
234237

235238
parsed = mdo.parse_metadata([example])
236239
assert len(parsed) == 1
237-
row = parsed[0]
238-
assert row.data_row_id == example["dataRowId"]
239-
assert len(row.fields) == 3
240+
for row in parsed:
241+
assert row.data_row_id == example["dataRowId"]
242+
assert len(row.fields) == 4
243+
244+
for row in parsed:
245+
for field in row.fields:
246+
assert mdo._parse_upsert(field)

0 commit comments

Comments
 (0)