Skip to content

Commit d3b37bf

Browse files
committed
Added NaN handler
1 parent ee27bf1 commit d3b37bf

File tree

7 files changed

+32
-24
lines changed

7 files changed

+32
-24
lines changed

src/superannotate_schemas/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
from superannotate_schemas.validators import AnnotationValidators
88

9-
__version__ = '1.0.40'
9+
__version__ = '1.0.42dev1'
1010

1111
__all__ = [
1212
"__version__",

src/superannotate_schemas/schemas/base.py

Lines changed: 28 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
1+
import datetime
12
from typing import Dict
23
from typing import List
4+
from math import isnan
35
from typing import Optional
46
from typing import Union
57

@@ -8,7 +10,7 @@
810
from pydantic import constr
911
from pydantic import Extra
1012
from pydantic import StrictInt
11-
from pydantic import StrictFloat
13+
from pydantic import StrictFloat as PydanticStrictFloat
1214
from pydantic import StrictStr
1315
from pydantic import StrictBool
1416
from pydantic import Field
@@ -39,6 +41,20 @@ def enum_error_handling(self) -> str:
3941
return f"Invalid value, permitted: {permitted}"
4042

4143

44+
class StrictFloat(PydanticStrictFloat):
45+
46+
@classmethod
47+
def __get_validators__(cls):
48+
yield from super().__get_validators__()
49+
yield cls._validate_nan
50+
51+
@staticmethod
52+
def _validate_nan(v):
53+
if isnan(v):
54+
raise TypeError("NaN is not a valid float")
55+
return v
56+
57+
4258
EnumMemberError.__str__ = enum_error_handling
4359

4460
NotEmptyStr = constr(strict=True, min_length=1)
@@ -59,6 +75,7 @@ def validate(cls, value: Union[str]) -> Union[str]:
5975

6076

6177
class BaseModel(PyDanticBaseModel):
78+
6279
class Config:
6380
extra = Extra.allow
6481
use_enum_values = True
@@ -96,14 +113,17 @@ class TimedBaseModel(BaseModel):
96113
created_at: Optional[constr(regex=DATE_REGEX)] = Field(None, alias="createdAt")
97114
updated_at: Optional[constr(regex=DATE_REGEX)] = Field(None, alias="updatedAt")
98115

99-
@validator("created_at", "updated_at", pre=True)
116+
@validator("created_at", "updated_at", pre=True, always=True)
100117
def validate_created_at(cls, value):
101-
try:
102-
if value is not None:
103-
constr(regex=DATE_REGEX, strict=True).validate(value)
104-
except (TypeError, StrRegexError):
105-
raise TypeError(DATE_TIME_FORMAT_ERROR_MESSAGE)
106-
return value
118+
if value:
119+
try:
120+
if value is not None:
121+
constr(regex=DATE_REGEX, strict=True).validate(value)
122+
except (TypeError, StrRegexError):
123+
raise TypeError(DATE_TIME_FORMAT_ERROR_MESSAGE)
124+
return value
125+
else:
126+
return datetime.datetime.now().strftime("%Y-%m-%dT%H:%M:%S.%f")[:-3] + "Z"
107127

108128

109129
class UserAction(BaseModel):

src/superannotate_schemas/schemas/external/pixel.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@
55
from superannotate_schemas.schemas.base import BaseAttribute
66
from superannotate_schemas.schemas.base import BaseImageMetadata
77
from superannotate_schemas.schemas.base import NotEmptyStr
8-
from superannotate_schemas.schemas.base import StrictStr
98
from superannotate_schemas.schemas.base import HexColor
109
from superannotate_schemas.schemas.base import Tag
1110
from superannotate_schemas.schemas.base import Comment

src/superannotate_schemas/schemas/external/vector.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
from typing import Union
44

55
from pydantic import Field
6-
from pydantic import StrictFloat
76
from pydantic import StrictInt
87
from pydantic import StrictStr
98
from pydantic import ValidationError
109
from pydantic import conlist
1110
from pydantic.error_wrappers import ErrorWrapper
1211

12+
from superannotate_schemas.schemas.base import StrictFloat
1313
from superannotate_schemas.schemas.base import AxisPoint
1414
from superannotate_schemas.schemas.base import BaseAttribute
1515
from superannotate_schemas.schemas.base import BaseImageMetadata

src/superannotate_schemas/schemas/internal/vector.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
from superannotate_schemas.schemas.base import NotEmptyStr
1919

2020
from pydantic import StrictInt
21-
from pydantic import StrictFloat
21+
from superannotate_schemas.schemas.base import StrictFloat
2222
from pydantic import conlist
2323
from pydantic import Field
2424
from pydantic import validate_model

src/superannotate_schemas/schemas/internal/video.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
from superannotate_schemas.schemas.base import AnnotationStatusEnum
1414

1515
from superannotate_schemas.schemas.base import BaseModel
16-
from pydantic import StrictFloat
16+
from superannotate_schemas.schemas.base import StrictFloat
1717
from pydantic import constr
1818
from pydantic import Field
1919
from pydantic import StrictBool

tests/test_multi_instance_list.py

Lines changed: 0 additions & 11 deletions
This file was deleted.

0 commit comments

Comments
 (0)