Skip to content

Commit 64257a5

Browse files
Fixed deserialization of datetime.date fields
Fixes #1913
1 parent 8a72af9 commit 64257a5

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

elasticsearch_dsl/field.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -315,6 +315,9 @@ def _deserialize(self, data: Any) -> Union[datetime, date]:
315315
raise ValidationException(
316316
f"Could not parse date from the value ({data!r})", e
317317
)
318+
# we treat the yyyy-MM-dd format as a special case
319+
if hasattr(self, "format") and self.format == "yyyy-MM-dd":
320+
data = data.date()
318321

319322
if isinstance(data, datetime):
320323
if self._default_timezone and data.tzinfo is None:

tests/test_field.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717

1818
import base64
1919
import ipaddress
20-
from datetime import datetime
20+
from datetime import date, datetime
2121
from typing import cast
2222

2323
import pytest
@@ -48,6 +48,21 @@ def test_boolean_deserialization() -> None:
4848
assert bf.deserialize(1)
4949

5050

51+
def test_datetime_deserialization() -> None:
52+
f = field.Date()
53+
d = datetime.now()
54+
assert d == f._deserialize(d.isoformat())
55+
56+
57+
def test_date_deserialization() -> None:
58+
f = field.Date(format="yyyy-MM-dd")
59+
d = date.today()
60+
assert d == f._deserialize(d.isoformat())
61+
62+
d = datetime.now()
63+
assert d.date() == f._deserialize(d.isoformat())
64+
65+
5166
def test_date_field_can_have_default_tz() -> None:
5267
f = field.Date(default_timezone="UTC")
5368
now = datetime.now()

0 commit comments

Comments
 (0)