diff --git a/src/superannotate_schemas/schemas/base.py b/src/superannotate_schemas/schemas/base.py index baed528..85d0c57 100644 --- a/src/superannotate_schemas/schemas/base.py +++ b/src/superannotate_schemas/schemas/base.py @@ -65,8 +65,8 @@ class AxisPoint(BaseModel): class BaseAttribute(BaseModel): id: Optional[StrictInt] group_id: Optional[StrictInt] = Field(alias="groupId") - name: NotEmptyStr - group_name: NotEmptyStr = Field(alias="groupName") + name: Optional[NotEmptyStr] + group_name: Optional[NotEmptyStr] = Field(alias="groupName") class Tag(BaseModel): @@ -222,7 +222,7 @@ class BaseVectorInstance(BaseImageAnnotationInstance): group_id: Optional[int] = Field(alias="groupId") -class PixelColor(BaseModel): +class HexColor(BaseModel): __root__: ColorType @validator("__root__") diff --git a/src/superannotate_schemas/schemas/classes.py b/src/superannotate_schemas/schemas/classes.py new file mode 100644 index 0000000..638f876 --- /dev/null +++ b/src/superannotate_schemas/schemas/classes.py @@ -0,0 +1,49 @@ +from typing import Optional +from typing import List + +from superannotate_schemas.schemas.base import BaseModel +from superannotate_schemas.schemas.base import TrackableModel +from superannotate_schemas.schemas.base import TimedBaseModel +from superannotate_schemas.schemas.base import StrictInt +from superannotate_schemas.schemas.base import StrictStr +from superannotate_schemas.schemas.base import HexColor +from superannotate_schemas.schemas.enums import ClassTypeEnum + + +class Attribute(TimedBaseModel): + id: Optional[StrictInt] + group_id: Optional[StrictInt] + project_id: Optional[StrictInt] + name: StrictStr + count: Optional[StrictInt] + + def __hash__(self): + return hash(f"{self.id}{self.group_id}{self.name}") + + +class AttributeGroup(TimedBaseModel): + id: Optional[StrictInt] + class_id: Optional[StrictInt] + name: StrictStr + is_multiselect: Optional[bool] + attributes: List[Attribute] + + def __hash__(self): + return hash(f"{self.id}{self.class_id}{self.name}") + + +class AnnotationClass(TimedBaseModel): + id: Optional[StrictInt] + project_id: Optional[StrictInt] + type: ClassTypeEnum = ClassTypeEnum.OBJECT + name: StrictStr + color: HexColor + count: Optional[StrictInt] + attribute_groups: List[AttributeGroup] + + def __hash__(self): + return hash(f"{self.id}{self.type}{self.name}") + + +class AnnotationClasses(BaseModel): + __root__: List[AnnotationClass] diff --git a/src/superannotate_schemas/schemas/enums.py b/src/superannotate_schemas/schemas/enums.py index e8ccdbb..1d8cb8e 100644 --- a/src/superannotate_schemas/schemas/enums.py +++ b/src/superannotate_schemas/schemas/enums.py @@ -41,6 +41,6 @@ class BaseImageRoleEnum(str, Enum): QA = "QA" -class TagTypeEnum(str, Enum): - TAG = "tag" +class ClassTypeEnum(str, Enum): OBJECT = "object" + TAG = "tag" diff --git a/src/superannotate_schemas/schemas/external/pixel.py b/src/superannotate_schemas/schemas/external/pixel.py index b21b3d5..23de3a1 100644 --- a/src/superannotate_schemas/schemas/external/pixel.py +++ b/src/superannotate_schemas/schemas/external/pixel.py @@ -6,7 +6,7 @@ from superannotate_schemas.schemas.base import BaseImageMetadata from superannotate_schemas.schemas.base import NotEmptyStr from superannotate_schemas.schemas.base import StrictStr -from superannotate_schemas.schemas.base import PixelColor +from superannotate_schemas.schemas.base import HexColor from superannotate_schemas.schemas.base import Tag from superannotate_schemas.schemas.base import Comment @@ -25,7 +25,7 @@ class MetaData(BaseImageMetadata): class AnnotationPart(BaseModel): - color: PixelColor + color: HexColor class AnnotationInstance(BaseImageAnnotationInstance): diff --git a/src/superannotate_schemas/schemas/internal/pixel.py b/src/superannotate_schemas/schemas/internal/pixel.py index 3d73ec1..0b4d981 100644 --- a/src/superannotate_schemas/schemas/internal/pixel.py +++ b/src/superannotate_schemas/schemas/internal/pixel.py @@ -2,7 +2,7 @@ from typing import Optional from superannotate_schemas.schemas.base import BaseImageMetadata as Metadata -from superannotate_schemas.schemas.base import PixelColor +from superannotate_schemas.schemas.base import HexColor from superannotate_schemas.schemas.base import BaseAttribute from superannotate_schemas.schemas.base import BaseImageAnnotationInstance from superannotate_schemas.schemas.base import Tag @@ -19,7 +19,7 @@ class Attribute(BaseAttribute): class AnnotationPart(BaseModel): - color: PixelColor + color: HexColor class AnnotationInstance(BaseImageAnnotationInstance): diff --git a/src/superannotate_schemas/validators.py b/src/superannotate_schemas/validators.py index a093e03..3072b3d 100644 --- a/src/superannotate_schemas/validators.py +++ b/src/superannotate_schemas/validators.py @@ -95,6 +95,7 @@ class AnnotationValidators: ValidatorFactory.get_validator(ExternalDocumentAnnotation), ValidatorFactory.get_validator(InternalDocumentAnnotation) ) + } @classmethod