Skip to content

Commit

Permalink
addd pydantic dataclasses
Browse files Browse the repository at this point in the history
  • Loading branch information
Gabefire committed Jan 9, 2025
1 parent 40e79c4 commit 1db6a3e
Show file tree
Hide file tree
Showing 13 changed files with 51 additions and 14 deletions.
2 changes: 1 addition & 1 deletion libs/labelbox/src/labelbox/orm/model.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from dataclasses import dataclass
from pydantic.dataclasses import dataclass
from enum import Enum, auto
from typing import TYPE_CHECKING, Any, Dict, List, Type, Union

Expand Down
2 changes: 1 addition & 1 deletion libs/labelbox/src/labelbox/schema/export_task.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import os
import tempfile
from abc import ABC, abstractmethod
from dataclasses import dataclass
from pydantic.dataclasses import dataclass
from enum import Enum
from functools import lru_cache
from typing import (
Expand Down
2 changes: 1 addition & 1 deletion libs/labelbox/src/labelbox/schema/iam_integration.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from dataclasses import dataclass
from pydantic.dataclasses import dataclass

from labelbox.utils import snake_case
from labelbox.orm.db_object import DbObject
Expand Down
2 changes: 1 addition & 1 deletion libs/labelbox/src/labelbox/schema/invite.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from dataclasses import dataclass
from pydantic.dataclasses import dataclass

from labelbox.orm.db_object import DbObject
from labelbox.orm.model import Field
Expand Down
3 changes: 2 additions & 1 deletion libs/labelbox/src/labelbox/schema/ontology.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

import colorsys
import json
from dataclasses import dataclass, field
from pydantic.dataclasses import dataclass
from dataclasses import field
from enum import Enum
from typing import Any, Dict, List, Optional, Union

Expand Down
2 changes: 1 addition & 1 deletion libs/labelbox/src/labelbox/schema/role.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from dataclasses import dataclass
from pydantic.dataclasses import dataclass
from typing import Dict, Optional, TYPE_CHECKING

from labelbox.orm.model import Field
Expand Down
35 changes: 33 additions & 2 deletions libs/labelbox/src/labelbox/schema/slice.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
from dataclasses import dataclass
from typing import Optional, Tuple, Union
from pydantic import ConfigDict, GetCoreSchemaHandler
from pydantic.dataclasses import dataclass
from pydantic_core import core_schema
from typing import Any, Optional, Tuple, Union
import warnings
from labelbox.orm.db_object import DbObject
from labelbox.orm.model import Field
Expand Down Expand Up @@ -47,6 +49,35 @@ def to_hash(self):
"global_key": self.global_key.key if self.global_key else None,
}

model_config = ConfigDict(arbitrary_types_allowed=True)

@classmethod
def __get_pydantic_core_schema__(
self, source: type[Any], handler: GetCoreSchemaHandler
) -> core_schema.CoreSchema:
print(source)
return core_schema.no_info_after_validator_function(
self._validate,
core_schema.dict_schema(),
serialization=core_schema.plain_serializer_function_ser_schema(
lambda x: x.to_hash(),
return_schema=core_schema.dict_schema(),
),
)

@classmethod
def _validate(cls, value: Any) -> Any:
if isinstance(value, cls):
return value
if isinstance(value, dict):
id_val = value.get("id")
if id_val is None:
raise ValueError(
f"Missing required 'id' field in dict {value}"
)
return cls(id=id_val, global_key=value.get("global_key"))
raise ValueError(f"Cannot convert {value} to {cls.__name__}")


class CatalogSlice(Slice):
"""
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import warnings
from abc import ABC
from dataclasses import dataclass, field
from pydantic.dataclasses import dataclass
from dataclasses import field
from typing import Any, Dict, List, Optional, Set

from labelbox.schema.tool_building.tool_type import ToolType
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import warnings
from dataclasses import dataclass, field
from pydantic.dataclasses import dataclass
from dataclasses import field
from enum import Enum
from typing import Any, Dict, List, Optional, Union

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from dataclasses import dataclass, field
from pydantic.dataclasses import dataclass
from dataclasses import field
from enum import Enum

from labelbox.schema.tool_building.base_step_reasoning_tool import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from dataclasses import dataclass, field
from pydantic.dataclasses import dataclass
from dataclasses import field
from typing import Any, Dict, List, Optional

from labelbox.schema.tool_building.classification import (
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
from dataclasses import dataclass, field
from pydantic.dataclasses import dataclass
from dataclasses import field
from enum import Enum

from labelbox.schema.tool_building.base_step_reasoning_tool import (
Expand Down
2 changes: 1 addition & 1 deletion libs/labelbox/src/labelbox/schema/user_group_v2.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import json
import warnings
from dataclasses import dataclass
from pydantic.dataclasses import dataclass
from io import BytesIO
from typing import List, Optional

Expand Down

0 comments on commit 1db6a3e

Please sign in to comment.