Skip to content

Commit fb51d3a

Browse files
authored
✨ use dateutil.parse to parse SQLite dates (#83)
1 parent aa5c4b2 commit fb51d3a

File tree

3 files changed

+9
-3
lines changed

3 files changed

+9
-3
lines changed

pyproject.toml

+2
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ dependencies = [
4141
"Click>=8.1.3",
4242
"mysql-connector-python==8.4.0",
4343
"pytimeparse2",
44+
"python-dateutil>=2.9.0.post0",
45+
"types_python_dateutil",
4446
"python-slugify>=7.0.0",
4547
"simplejson>=3.19.0",
4648
"tqdm>=4.65.0",

requirements_dev.txt

+2
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ pytest-cov
99
pytest-mock
1010
pytest-timeout
1111
pytimeparse2
12+
python-dateutil>=2.9.0.post0
13+
types_python_dateutil
1214
python-slugify>=7.0.0
1315
types-python-slugify
1416
simplejson>=3.19.1

src/mysql_to_sqlite3/sqlite_utils.py

+5-3
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
from datetime import date, timedelta
66
from decimal import Decimal
77

8+
from dateutil.parser import ParserError
9+
from dateutil.parser import parse as dateutil_parse
810
from pytimeparse2 import parse
911

1012

@@ -46,11 +48,11 @@ class CollatingSequences:
4648
RTRIM: str = "RTRIM"
4749

4850

49-
def convert_date(value: t.Any) -> date:
51+
def convert_date(value: t.Union[str, bytes]) -> date:
5052
"""Handle SQLite date conversion."""
5153
try:
52-
return date.fromisoformat(value.decode())
53-
except ValueError as err:
54+
return dateutil_parse(value.decode() if isinstance(value, bytes) else value).date()
55+
except ParserError as err:
5456
raise ValueError(f"DATE field contains {err}") # pylint: disable=W0707
5557

5658

0 commit comments

Comments
 (0)