Skip to content

Commit 94cce3f

Browse files
committed
Fixed an invalid input handle for DateTimeConverter
1 parent 1e80b5e commit 94cce3f

2 files changed

Lines changed: 33 additions & 9 deletions

File tree

test/test_type.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,27 @@ def test_normal_date(self, value, expected):
9191

9292
assert result == expected
9393

94+
@pytest.mark.parametrize(
95+
["value"],
96+
[
97+
[{"1"}],
98+
[{"1", "2"}],
99+
[["1"]],
100+
[["1", "2"]],
101+
[{"a": 1}],
102+
[(1, 2)],
103+
[None],
104+
],
105+
)
106+
def test_abnormal_non_string(self, value):
107+
from typepy.error import TypeConversionError
108+
109+
with pytest.raises(TypeConversionError):
110+
typepy.DateTime({"1"}, strict_level=StrictLevel.MIN).convert()
111+
112+
assert typepy.DateTime(value, strict_level=StrictLevel.MIN).is_type() is False
113+
assert typepy.DateTime(value, strict_level=StrictLevel.MIN).try_convert() is None
114+
94115

95116
class Test_IpAddress:
96117
@pytest.mark.parametrize(

typepy/converter/_datetime.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -148,13 +148,16 @@ def __validate_datetime_string(self):
148148

149149
from packaging.version import InvalidVersion, Version
150150

151+
if not isinstance(self._value, str):
152+
raise TypeConversionError(
153+
f"invalid datetime string: type={type(self._value)}"
154+
)
155+
151156
try:
152-
try:
153-
Version(self._value)
154-
raise TypeConversionError(
155-
f"invalid datetime string: version string found {self._value}"
156-
)
157-
except InvalidVersion:
158-
pass
159-
except TypeError:
160-
raise TypeConversionError(f"invalid datetime string: type={type(self._value)}")
157+
Version(self._value)
158+
except InvalidVersion:
159+
return
160+
161+
raise TypeConversionError(
162+
f"invalid datetime string: version string found {self._value}"
163+
)

0 commit comments

Comments
 (0)