Skip to content

Commit 1db6a3e

Browse files
committed
addd pydantic dataclasses
1 parent 40e79c4 commit 1db6a3e

File tree

13 files changed

+51
-14
lines changed

13 files changed

+51
-14
lines changed

libs/labelbox/src/labelbox/orm/model.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dataclasses import dataclass
1+
from pydantic.dataclasses import dataclass
22
from enum import Enum, auto
33
from typing import TYPE_CHECKING, Any, Dict, List, Type, Union
44

libs/labelbox/src/labelbox/schema/export_task.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import os
33
import tempfile
44
from abc import ABC, abstractmethod
5-
from dataclasses import dataclass
5+
from pydantic.dataclasses import dataclass
66
from enum import Enum
77
from functools import lru_cache
88
from typing import (

libs/labelbox/src/labelbox/schema/iam_integration.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dataclasses import dataclass
1+
from pydantic.dataclasses import dataclass
22

33
from labelbox.utils import snake_case
44
from labelbox.orm.db_object import DbObject

libs/labelbox/src/labelbox/schema/invite.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dataclasses import dataclass
1+
from pydantic.dataclasses import dataclass
22

33
from labelbox.orm.db_object import DbObject
44
from labelbox.orm.model import Field

libs/labelbox/src/labelbox/schema/ontology.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
import colorsys
44
import json
5-
from dataclasses import dataclass, field
5+
from pydantic.dataclasses import dataclass
6+
from dataclasses import field
67
from enum import Enum
78
from typing import Any, Dict, List, Optional, Union
89

libs/labelbox/src/labelbox/schema/role.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
from dataclasses import dataclass
1+
from pydantic.dataclasses import dataclass
22
from typing import Dict, Optional, TYPE_CHECKING
33

44
from labelbox.orm.model import Field

libs/labelbox/src/labelbox/schema/slice.py

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1-
from dataclasses import dataclass
2-
from typing import Optional, Tuple, Union
1+
from pydantic import ConfigDict, GetCoreSchemaHandler
2+
from pydantic.dataclasses import dataclass
3+
from pydantic_core import core_schema
4+
from typing import Any, Optional, Tuple, Union
35
import warnings
46
from labelbox.orm.db_object import DbObject
57
from labelbox.orm.model import Field
@@ -47,6 +49,35 @@ def to_hash(self):
4749
"global_key": self.global_key.key if self.global_key else None,
4850
}
4951

52+
model_config = ConfigDict(arbitrary_types_allowed=True)
53+
54+
@classmethod
55+
def __get_pydantic_core_schema__(
56+
self, source: type[Any], handler: GetCoreSchemaHandler
57+
) -> core_schema.CoreSchema:
58+
print(source)
59+
return core_schema.no_info_after_validator_function(
60+
self._validate,
61+
core_schema.dict_schema(),
62+
serialization=core_schema.plain_serializer_function_ser_schema(
63+
lambda x: x.to_hash(),
64+
return_schema=core_schema.dict_schema(),
65+
),
66+
)
67+
68+
@classmethod
69+
def _validate(cls, value: Any) -> Any:
70+
if isinstance(value, cls):
71+
return value
72+
if isinstance(value, dict):
73+
id_val = value.get("id")
74+
if id_val is None:
75+
raise ValueError(
76+
f"Missing required 'id' field in dict {value}"
77+
)
78+
return cls(id=id_val, global_key=value.get("global_key"))
79+
raise ValueError(f"Cannot convert {value} to {cls.__name__}")
80+
5081

5182
class CatalogSlice(Slice):
5283
"""

libs/labelbox/src/labelbox/schema/tool_building/base_step_reasoning_tool.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import warnings
22
from abc import ABC
3-
from dataclasses import dataclass, field
3+
from pydantic.dataclasses import dataclass
4+
from dataclasses import field
45
from typing import Any, Dict, List, Optional, Set
56

67
from labelbox.schema.tool_building.tool_type import ToolType

libs/labelbox/src/labelbox/schema/tool_building/classification.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import warnings
2-
from dataclasses import dataclass, field
2+
from pydantic.dataclasses import dataclass
3+
from dataclasses import field
34
from enum import Enum
45
from typing import Any, Dict, List, Optional, Union
56

libs/labelbox/src/labelbox/schema/tool_building/fact_checking_tool.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from dataclasses import dataclass, field
1+
from pydantic.dataclasses import dataclass
2+
from dataclasses import field
23
from enum import Enum
34

45
from labelbox.schema.tool_building.base_step_reasoning_tool import (

libs/labelbox/src/labelbox/schema/tool_building/prompt_issue_tool.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from dataclasses import dataclass, field
1+
from pydantic.dataclasses import dataclass
2+
from dataclasses import field
23
from typing import Any, Dict, List, Optional
34

45
from labelbox.schema.tool_building.classification import (

libs/labelbox/src/labelbox/schema/tool_building/step_reasoning_tool.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
from dataclasses import dataclass, field
1+
from pydantic.dataclasses import dataclass
2+
from dataclasses import field
23
from enum import Enum
34

45
from labelbox.schema.tool_building.base_step_reasoning_tool import (

libs/labelbox/src/labelbox/schema/user_group_v2.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import json
22
import warnings
3-
from dataclasses import dataclass
3+
from pydantic.dataclasses import dataclass
44
from io import BytesIO
55
from typing import List, Optional
66

0 commit comments

Comments
 (0)