Skip to content

Commit 258234f

Browse files
author
Val Brodsky
committed
Fix ndjson serialization / deserialization
1 parent 1dea0e7 commit 258234f

File tree

4 files changed

+24
-25
lines changed

4 files changed

+24
-25
lines changed

libs/labelbox/src/labelbox/data/annotation_types/label.py

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -205,16 +205,14 @@ def _assign_option(self, classification: ClassificationAnnotation,
205205

206206
@field_validator("annotations", mode='before')
207207
def validate_union(cls, value):
208-
supported = tuple([
209-
field.type_ for field in
210-
cls.__model_fields__['annotations'].sub_fields[0].sub_fields
211-
])
212208
if not isinstance(value, list):
213209
raise TypeError(f"Annotations must be a list. Found {type(value)}")
214210

211+
supported_types = cls.model_fields['annotations'].annotation.__args__[
212+
0].__args__
215213
for v in value:
216-
if not isinstance(v, supported):
214+
if not isinstance(v, supported_types):
217215
raise TypeError(
218-
f"Annotations should be a list containing the following classes : {supported}. Found {type(v)}"
216+
f"Annotations should be a list containing the following classes : {supported_types}. Found {type(v)}"
219217
)
220218
return value

libs/labelbox/src/labelbox/data/serialization/ndjson/base.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,12 @@ class DataRow(_CamelCaseMixin):
1010
id: str = None
1111
global_key: str = None
1212

13-
@model_validator(mode='before')
14-
@classmethod
15-
def must_set_one(cls, values):
16-
if not is_exactly_one_set(values.get('id'), values.get('global_key')):
13+
@model_validator(mode='after')
14+
def must_set_one(self):
15+
if not is_exactly_one_set(self.id, self.global_key):
1716
raise ValueError("Must set either id or global_key")
18-
return values
17+
18+
return self
1919

2020

2121
class NDJsonBase(_CamelCaseMixin):
@@ -44,13 +44,13 @@ class NDAnnotation(NDJsonBase):
4444
page: Optional[int] = None
4545
unit: Optional[str] = None
4646

47-
@model_validator(mode='before')
48-
@classmethod
49-
def must_set_one(cls, values):
50-
if ('schema_id' not in values or values['schema_id']
51-
is None) and ('name' not in values or values['name'] is None):
47+
@model_validator(mode='after')
48+
def must_set_one(self):
49+
if self.schema_id is None and self.name is None:
5250
raise ValueError("Schema id or name are not set. Set either one.")
53-
return values
51+
if self.schema_id is not None and self.name is not None:
52+
raise ValueError("Schema id and name are both set. Set only one.")
53+
return self
5454

5555
def dict(self, *args, **kwargs):
5656
res = super().dict(*args, **kwargs)

libs/labelbox/src/labelbox/data/serialization/ndjson/classification.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,14 @@ class NDAnswer(ConfidenceMixin, CustomMetricsMixin):
1717
schema_id: Optional[Cuid] = None
1818
classifications: Optional[List['NDSubclassificationType']] = []
1919

20-
@model_validator(mode='before')
21-
@classmethod
22-
def must_set_one(cls, values):
23-
if ('schema_id' not in values or values['schema_id']
24-
is None) and ('name' not in values or values['name'] is None):
20+
@model_validator(mode='after')
21+
def must_set_one(self):
22+
if self.schema_id is None and self.name is None:
2523
raise ValueError("Schema id or name are not set. Set either one.")
26-
return values
24+
if self.schema_id is not None and self.name is not None:
25+
raise ValueError("Schema id and name are both set. Set only one.")
26+
27+
return self
2728

2829
def dict(self, *args, **kwargs):
2930
res = super().dict(*args, **kwargs)

libs/labelbox/src/labelbox/schema/data_row_metadata.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ class DataRowMetadataSchema(BaseModel):
3535
StringConstraints(strip_whitespace=True, min_length=1, max_length=100)]
3636
reserved: bool
3737
kind: DataRowMetadataKind
38-
options: Optional[List["DataRowMetadataSchema"]]
39-
parent: Optional[SchemaId]
38+
options: Optional[List["DataRowMetadataSchema"]] = []
39+
parent: Optional[SchemaId] = None
4040

4141

4242
DataRowMetadataSchema.update_forward_refs()

0 commit comments

Comments
 (0)