From e64e7d5f2df4b5d256feef27cf1b1eb92e30078c Mon Sep 17 00:00:00 2001 From: Gabefire <33893811+Gabefire@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:52:56 -0600 Subject: [PATCH 1/9] adjusted optional task_queue_id --- libs/labelbox/src/labelbox/schema/project.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/labelbox/src/labelbox/schema/project.py b/libs/labelbox/src/labelbox/schema/project.py index 929afc729..52d08de5c 100644 --- a/libs/labelbox/src/labelbox/schema/project.py +++ b/libs/labelbox/src/labelbox/schema/project.py @@ -1403,7 +1403,7 @@ def task_queues(self) -> List[TaskQueue]: ] def move_data_rows_to_task_queue( - self, data_row_ids: DataRowIdentifiers, task_queue_id: str + self, data_row_ids: DataRowIdentifiers, task_queue_id: Optional[str] = None ): """ From ba4c5dfc3fcfe3a0f23dc614b1cf68ed8697659a Mon Sep 17 00:00:00 2001 From: Gabefire <33893811+Gabefire@users.noreply.github.com> Date: Mon, 16 Dec 2024 10:56:49 -0600 Subject: [PATCH 2/9] fixed linter --- libs/labelbox/src/labelbox/schema/project.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libs/labelbox/src/labelbox/schema/project.py b/libs/labelbox/src/labelbox/schema/project.py index 52d08de5c..2a8132835 100644 --- a/libs/labelbox/src/labelbox/schema/project.py +++ b/libs/labelbox/src/labelbox/schema/project.py @@ -1403,7 +1403,9 @@ def task_queues(self) -> List[TaskQueue]: ] def move_data_rows_to_task_queue( - self, data_row_ids: DataRowIdentifiers, task_queue_id: Optional[str] = None + self, + data_row_ids: DataRowIdentifiers, + task_queue_id: Optional[str] = None, ): """ From 1af3e795fbf9f2f4f148dcf611ef91e1e52e6bad Mon Sep 17 00:00:00 2001 From: Gabefire <33893811+Gabefire@users.noreply.github.com> Date: Mon, 16 Dec 2024 11:18:09 -0600 Subject: [PATCH 3/9] adjusted --- libs/labelbox/src/labelbox/schema/project.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/labelbox/src/labelbox/schema/project.py b/libs/labelbox/src/labelbox/schema/project.py index 2a8132835..f30461b60 100644 --- a/libs/labelbox/src/labelbox/schema/project.py +++ b/libs/labelbox/src/labelbox/schema/project.py @@ -1405,7 +1405,7 @@ def task_queues(self) -> List[TaskQueue]: def move_data_rows_to_task_queue( self, data_row_ids: DataRowIdentifiers, - task_queue_id: Optional[str] = None, + task_queue_id: Union[str, None], ): """ From 40e79c4ff822b59f1b0a6894317b07550af11ce9 Mon Sep 17 00:00:00 2001 From: Gabefire <33893811+Gabefire@users.noreply.github.com> Date: Mon, 16 Dec 2024 11:26:13 -0600 Subject: [PATCH 4/9] added in feedback --- libs/labelbox/src/labelbox/schema/project.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libs/labelbox/src/labelbox/schema/project.py b/libs/labelbox/src/labelbox/schema/project.py index f30461b60..c3dfc48ff 100644 --- a/libs/labelbox/src/labelbox/schema/project.py +++ b/libs/labelbox/src/labelbox/schema/project.py @@ -1405,7 +1405,7 @@ def task_queues(self) -> List[TaskQueue]: def move_data_rows_to_task_queue( self, data_row_ids: DataRowIdentifiers, - task_queue_id: Union[str, None], + task_queue_id: Optional[str] = None, ): """ @@ -1414,7 +1414,7 @@ def move_data_rows_to_task_queue( Args: data_row_ids: a list of data row ids to be moved. This should be a DataRowIdentifiers object DataRowIdentifier objects are lists of ids or global keys. A DataIdentifier object can be a UniqueIds or GlobalKeys class. - task_queue_id: the task queue id to be moved to, or None to specify the "Done" queue + task_queue_id: the task queue id to be moved to, or None to specify the "Done" queue. Defaults to None. Returns: None if successful, or a raised error on failure From 1db6a3e07838613b6ca263174ea7ae27800aa0d2 Mon Sep 17 00:00:00 2001 From: Gabefire <33893811+Gabefire@users.noreply.github.com> Date: Wed, 8 Jan 2025 21:47:39 -0800 Subject: [PATCH 5/9] addd pydantic dataclasses --- libs/labelbox/src/labelbox/orm/model.py | 2 +- .../src/labelbox/schema/export_task.py | 2 +- .../src/labelbox/schema/iam_integration.py | 2 +- libs/labelbox/src/labelbox/schema/invite.py | 2 +- libs/labelbox/src/labelbox/schema/ontology.py | 3 +- libs/labelbox/src/labelbox/schema/role.py | 2 +- libs/labelbox/src/labelbox/schema/slice.py | 35 +++++++++++++++++-- .../tool_building/base_step_reasoning_tool.py | 3 +- .../schema/tool_building/classification.py | 3 +- .../tool_building/fact_checking_tool.py | 3 +- .../schema/tool_building/prompt_issue_tool.py | 3 +- .../tool_building/step_reasoning_tool.py | 3 +- .../src/labelbox/schema/user_group_v2.py | 2 +- 13 files changed, 51 insertions(+), 14 deletions(-) diff --git a/libs/labelbox/src/labelbox/orm/model.py b/libs/labelbox/src/labelbox/orm/model.py index 535ab0f7d..10c594d89 100644 --- a/libs/labelbox/src/labelbox/orm/model.py +++ b/libs/labelbox/src/labelbox/orm/model.py @@ -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 diff --git a/libs/labelbox/src/labelbox/schema/export_task.py b/libs/labelbox/src/labelbox/schema/export_task.py index 2e206d433..0ae424947 100644 --- a/libs/labelbox/src/labelbox/schema/export_task.py +++ b/libs/labelbox/src/labelbox/schema/export_task.py @@ -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 ( diff --git a/libs/labelbox/src/labelbox/schema/iam_integration.py b/libs/labelbox/src/labelbox/schema/iam_integration.py index cb5309929..7c680b781 100644 --- a/libs/labelbox/src/labelbox/schema/iam_integration.py +++ b/libs/labelbox/src/labelbox/schema/iam_integration.py @@ -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 diff --git a/libs/labelbox/src/labelbox/schema/invite.py b/libs/labelbox/src/labelbox/schema/invite.py index c89a8b08c..7b73d943a 100644 --- a/libs/labelbox/src/labelbox/schema/invite.py +++ b/libs/labelbox/src/labelbox/schema/invite.py @@ -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 diff --git a/libs/labelbox/src/labelbox/schema/ontology.py b/libs/labelbox/src/labelbox/schema/ontology.py index 0032aaad1..189b4c82d 100644 --- a/libs/labelbox/src/labelbox/schema/ontology.py +++ b/libs/labelbox/src/labelbox/schema/ontology.py @@ -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 diff --git a/libs/labelbox/src/labelbox/schema/role.py b/libs/labelbox/src/labelbox/schema/role.py index d22e2a78e..5393a88cc 100644 --- a/libs/labelbox/src/labelbox/schema/role.py +++ b/libs/labelbox/src/labelbox/schema/role.py @@ -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 diff --git a/libs/labelbox/src/labelbox/schema/slice.py b/libs/labelbox/src/labelbox/schema/slice.py index f6bb53d75..d829838a3 100644 --- a/libs/labelbox/src/labelbox/schema/slice.py +++ b/libs/labelbox/src/labelbox/schema/slice.py @@ -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 @@ -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): """ diff --git a/libs/labelbox/src/labelbox/schema/tool_building/base_step_reasoning_tool.py b/libs/labelbox/src/labelbox/schema/tool_building/base_step_reasoning_tool.py index 4d7ce54c5..7e1f8dbc9 100644 --- a/libs/labelbox/src/labelbox/schema/tool_building/base_step_reasoning_tool.py +++ b/libs/labelbox/src/labelbox/schema/tool_building/base_step_reasoning_tool.py @@ -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 diff --git a/libs/labelbox/src/labelbox/schema/tool_building/classification.py b/libs/labelbox/src/labelbox/schema/tool_building/classification.py index 9c0c69bea..8c6dc64b4 100644 --- a/libs/labelbox/src/labelbox/schema/tool_building/classification.py +++ b/libs/labelbox/src/labelbox/schema/tool_building/classification.py @@ -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 diff --git a/libs/labelbox/src/labelbox/schema/tool_building/fact_checking_tool.py b/libs/labelbox/src/labelbox/schema/tool_building/fact_checking_tool.py index 440f343cd..2dfb34d10 100644 --- a/libs/labelbox/src/labelbox/schema/tool_building/fact_checking_tool.py +++ b/libs/labelbox/src/labelbox/schema/tool_building/fact_checking_tool.py @@ -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 ( diff --git a/libs/labelbox/src/labelbox/schema/tool_building/prompt_issue_tool.py b/libs/labelbox/src/labelbox/schema/tool_building/prompt_issue_tool.py index 1a965ff95..9ef56445f 100644 --- a/libs/labelbox/src/labelbox/schema/tool_building/prompt_issue_tool.py +++ b/libs/labelbox/src/labelbox/schema/tool_building/prompt_issue_tool.py @@ -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 ( diff --git a/libs/labelbox/src/labelbox/schema/tool_building/step_reasoning_tool.py b/libs/labelbox/src/labelbox/schema/tool_building/step_reasoning_tool.py index c69c6f22a..12d6ae733 100644 --- a/libs/labelbox/src/labelbox/schema/tool_building/step_reasoning_tool.py +++ b/libs/labelbox/src/labelbox/schema/tool_building/step_reasoning_tool.py @@ -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 ( diff --git a/libs/labelbox/src/labelbox/schema/user_group_v2.py b/libs/labelbox/src/labelbox/schema/user_group_v2.py index a734eb397..c9c291d22 100644 --- a/libs/labelbox/src/labelbox/schema/user_group_v2.py +++ b/libs/labelbox/src/labelbox/schema/user_group_v2.py @@ -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 From cd9e17b617611ecf9117a565fa21ae6cd5181ce8 Mon Sep 17 00:00:00 2001 From: Gabefire <33893811+Gabefire@users.noreply.github.com> Date: Wed, 8 Jan 2025 21:53:48 -0800 Subject: [PATCH 6/9] remove print --- libs/labelbox/src/labelbox/schema/slice.py | 1 - 1 file changed, 1 deletion(-) diff --git a/libs/labelbox/src/labelbox/schema/slice.py b/libs/labelbox/src/labelbox/schema/slice.py index d829838a3..fe76ffb7a 100644 --- a/libs/labelbox/src/labelbox/schema/slice.py +++ b/libs/labelbox/src/labelbox/schema/slice.py @@ -55,7 +55,6 @@ def to_hash(self): 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(), From 877fe73c28fe9ed8f9dcbeda8dd521bee0a29a5d Mon Sep 17 00:00:00 2001 From: Gabefire <33893811+Gabefire@users.noreply.github.com> Date: Thu, 9 Jan 2025 07:06:02 -0800 Subject: [PATCH 7/9] revert export changes --- libs/labelbox/src/labelbox/schema/export_task.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/labelbox/src/labelbox/schema/export_task.py b/libs/labelbox/src/labelbox/schema/export_task.py index 0ae424947..2e206d433 100644 --- a/libs/labelbox/src/labelbox/schema/export_task.py +++ b/libs/labelbox/src/labelbox/schema/export_task.py @@ -2,7 +2,7 @@ import os import tempfile from abc import ABC, abstractmethod -from pydantic.dataclasses import dataclass +from dataclasses import dataclass from enum import Enum from functools import lru_cache from typing import ( From 37c563b1ecdeb7168f45fa78d92511cc01bcf18e Mon Sep 17 00:00:00 2001 From: Gabefire <33893811+Gabefire@users.noreply.github.com> Date: Thu, 9 Jan 2025 07:09:34 -0800 Subject: [PATCH 8/9] revert random change --- libs/labelbox/src/labelbox/schema/project.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/libs/labelbox/src/labelbox/schema/project.py b/libs/labelbox/src/labelbox/schema/project.py index c3dfc48ff..8f1d76943 100644 --- a/libs/labelbox/src/labelbox/schema/project.py +++ b/libs/labelbox/src/labelbox/schema/project.py @@ -1403,9 +1403,7 @@ def task_queues(self) -> List[TaskQueue]: ] def move_data_rows_to_task_queue( - self, - data_row_ids: DataRowIdentifiers, - task_queue_id: Optional[str] = None, + self, data_row_ids: DataRowIdentifiers, task_queue_id: str ): """ @@ -1414,7 +1412,7 @@ def move_data_rows_to_task_queue( Args: data_row_ids: a list of data row ids to be moved. This should be a DataRowIdentifiers object DataRowIdentifier objects are lists of ids or global keys. A DataIdentifier object can be a UniqueIds or GlobalKeys class. - task_queue_id: the task queue id to be moved to, or None to specify the "Done" queue. Defaults to None. + task_queue_id: the task queue id to be moved to, or None to specify the "Done" queue. Returns: None if successful, or a raised error on failure From 6c24adbd5294ea2a1632b3979ce5185a3bee837c Mon Sep 17 00:00:00 2001 From: Gabefire <33893811+Gabefire@users.noreply.github.com> Date: Mon, 20 Jan 2025 08:59:13 -0600 Subject: [PATCH 9/9] reverted slices --- libs/labelbox/src/labelbox/schema/slice.py | 34 ++-------------------- 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/libs/labelbox/src/labelbox/schema/slice.py b/libs/labelbox/src/labelbox/schema/slice.py index fe76ffb7a..f6bb53d75 100644 --- a/libs/labelbox/src/labelbox/schema/slice.py +++ b/libs/labelbox/src/labelbox/schema/slice.py @@ -1,7 +1,5 @@ -from pydantic import ConfigDict, GetCoreSchemaHandler -from pydantic.dataclasses import dataclass -from pydantic_core import core_schema -from typing import Any, Optional, Tuple, Union +from dataclasses import dataclass +from typing import Optional, Tuple, Union import warnings from labelbox.orm.db_object import DbObject from labelbox.orm.model import Field @@ -49,34 +47,6 @@ 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: - 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): """