Skip to content

Commit bb1388f

Browse files
authored
Merge pull request #317 from superannotateai/friday
Fix stricts
2 parents 55aec1f + 77301e2 commit bb1388f

File tree

3 files changed

+31
-25
lines changed

3 files changed

+31
-25
lines changed

src/superannotate/lib/core/entities/utils.py

Lines changed: 21 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
from pydantic import Extra
1111
from pydantic import Field
1212
from pydantic import StrictStr
13+
from pydantic import StrictInt
14+
from pydantic import StrictBool
1315
from pydantic import StrRegexError
1416
from pydantic import ValidationError
1517
from pydantic import validator
@@ -90,8 +92,8 @@ class BaseImageRoleEnum(str, Enum):
9092

9193

9294
class Attribute(BaseModel):
93-
id: Optional[int]
94-
group_id: Optional[int] = Field(None, alias="groupId")
95+
id: Optional[StrictInt]
96+
group_id: Optional[StrictInt] = Field(None, alias="groupId")
9597
name: NotEmptyStr
9698
group_name: NotEmptyStr = Field(alias="groupName")
9799

@@ -102,6 +104,7 @@ class Tag(BaseModel):
102104

103105
class AttributeGroup(BaseModel):
104106
name: NotEmptyStr
107+
# TODO :
105108
is_multiselect: Optional[int] = False
106109
attributes: List[Attribute]
107110

@@ -146,21 +149,21 @@ def clean_creation_type(cls, _):
146149

147150
class LastUserAction(BaseModel):
148151
email: EmailStr
149-
timestamp: int
152+
timestamp: StrictInt
150153

151154

152155
class BaseInstance(TrackableModel, TimedBaseModel):
153-
class_id: Optional[int] = Field(None, alias="classId")
156+
class_id: Optional[StrictInt] = Field(None, alias="classId")
154157
class_name: Optional[NotEmptyStr] = Field(None, alias="className")
155158

156159

157160
class MetadataBase(BaseModel):
158-
url: Optional[str]
161+
url: Optional[StrictStr]
159162
name: NotEmptyStr
160163
last_action: Optional[LastUserAction] = Field(None, alias="lastAction")
161-
width: Optional[int]
162-
height: Optional[int]
163-
project_id: Optional[int] = Field(None, alias="projectId")
164+
width: Optional[StrictInt]
165+
height: Optional[StrictInt]
166+
project_id: Optional[StrictInt] = Field(None, alias="projectId")
164167
annotator_email: Optional[EmailStr] = Field(None, alias="annotatorEmail")
165168
qa_email: Optional[EmailStr] = Field(None, alias="qaEmail")
166169
status: Optional[AnnotationStatusEnum]
@@ -174,16 +177,16 @@ class Correspondence(BaseModel):
174177
class Comment(TimedBaseModel, TrackableModel):
175178
x: float
176179
y: float
177-
resolved: Optional[bool] = Field(False)
180+
resolved: Optional[StrictBool] = Field(False)
178181
correspondence: conlist(Correspondence, min_items=1)
179182

180183

181184
class BaseImageInstance(BaseInstance):
182-
visible: Optional[bool]
183-
locked: Optional[bool]
184-
probability: Optional[int] = Field(100)
185+
visible: Optional[StrictBool]
186+
locked: Optional[StrictBool]
187+
probability: Optional[StrictInt] = Field(100)
185188
attributes: Optional[List[Attribute]] = Field(list())
186-
error: Optional[bool]
189+
error: Optional[StrictBool]
187190

188191
class Config:
189192
error_msg_templates = {
@@ -196,7 +199,7 @@ class StringA(BaseModel):
196199

197200

198201
class PointLabels(BaseModel):
199-
__root__: Dict[constr(regex=r"^[0-9]*$"), str]
202+
__root__: Dict[constr(regex=r"^[0-9]*$"), StrictStr]
200203

201204
@classmethod
202205
def __get_validators__(cls):
@@ -244,10 +247,10 @@ def validate_type(cls, values):
244247
class BaseVectorInstance(BaseImageInstance):
245248
type: VectorAnnotationTypeEnum
246249
point_labels: Optional[PointLabels] = Field(None, alias="pointLabels")
247-
tracking_id: Optional[str] = Field(None, alias="trackingId")
248-
group_id: Optional[int] = Field(None, alias="groupId")
250+
tracking_id: Optional[StrictStr] = Field(None, alias="trackingId")
251+
group_id: Optional[StrictInt] = Field(None, alias="groupId")
249252

250253

251254
class Metadata(MetadataBase):
252-
pinned: Optional[bool]
253-
is_predicted: Optional[bool] = Field(None, alias="isPredicted")
255+
pinned: Optional[StrictBool]
256+
is_predicted: Optional[StrictBool] = Field(None, alias="isPredicted")

src/superannotate/lib/core/entities/video.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414
from pydantic import constr
1515
from pydantic import Field
1616
from pydantic import StrictStr
17+
from pydantic import StrictInt
18+
from pydantic import StrictBool
1719

1820

1921
class VideoType(str, Enum):
@@ -23,13 +25,13 @@ class VideoType(str, Enum):
2325

2426
class MetaData(MetadataBase):
2527
name: Optional[StrictStr]
26-
width: Optional[int]
27-
height: Optional[int]
28-
duration: Optional[int]
28+
width: Optional[StrictInt]
29+
height: Optional[StrictInt]
30+
duration: Optional[StrictInt]
2931

3032

3133
class BaseTimeStamp(BaseModel):
32-
active: Optional[bool]
34+
active: Optional[StrictBool]
3335
attributes: Optional[Dict[constr(regex=r"^[-|+]$"), List[Attribute]]] # noqa: F722
3436

3537

@@ -40,7 +42,7 @@ class BboxTimeStamp(BaseTimeStamp):
4042
class BaseVideoInstance(BaseInstance):
4143
id: Optional[str]
4244
type: VideoType
43-
locked: Optional[bool]
45+
locked: Optional[StrictBool]
4446
timeline: Dict[float, BaseTimeStamp]
4547

4648

tests/unit/test_validators.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1211,7 +1211,7 @@ def test_validate_vector_temlpate_polygon_polyline_min_annotation(self):
12111211
"email": "some@some.com",
12121212
"timestamp": 1636964198056
12131213
},
1214-
"width": 1234,
1214+
"width": "1234",
12151215
"height": 1540,
12161216
"name": "t.png",
12171217
"projectId": 164988,
@@ -1348,11 +1348,12 @@ def test_validate_vector_temlpate_polygon_polyline_min_annotation(self):
13481348
'''
13491349
)
13501350

1351+
13511352
with catch_prints() as out:
13521353
sa.validate_annotations("Vector", os.path.join(self.vector_folder_path,
13531354
f"{tmpdir_name}/test_validate_vector_temlpate_polygon_polyline_min_annotation.json"))
13541355
self.assertEqual(
1355-
"instances[0].pointsensurethisvaluehasatleast1items\ninstances[1].pointsensurethisvaluehasatleast3items\ninstances[2].pointsensurethisvaluehasatleast2items",
1356+
"metadata.widthintegertypeexpected\ninstances[0].pointsensurethisvaluehasatleast1items\ninstances[1].pointsensurethisvaluehasatleast3items\ninstances[2].pointsensurethisvaluehasatleast2items",
13561357
out.getvalue().strip().replace(" ", ""))
13571358

13581359
def test_validate_video_point_labels(self):

0 commit comments

Comments
 (0)