diff --git a/docs/releases.rst b/docs/releases.rst index 5874751..61fdda4 100644 --- a/docs/releases.rst +++ b/docs/releases.rst @@ -9,6 +9,8 @@ Release Notes * Check for empty site when getting site name. +* Support serializing ``datetime.date`` objects in structured data. + 2.0.0 ----- @@ -29,6 +31,8 @@ Release Notes * Check for empty site when getting site name. +* Support serializing ``datetime.date`` objects in structured data. + 1.0.0 ----- diff --git a/wagtailseo/utils.py b/wagtailseo/utils.py index f9b79f8..4bd9385 100644 --- a/wagtailseo/utils.py +++ b/wagtailseo/utils.py @@ -1,5 +1,5 @@ import re -from datetime import datetime, time +from datetime import date, datetime, time from json import JSONEncoder from typing import List, Union @@ -13,12 +13,12 @@ MEDIA_IS_ABSOLUTE = PROTOCOL_RE.match(settings.MEDIA_URL) -def serialize_date(date: Union[datetime, time]) -> str: +def serialize_date(date: Union[date, datetime, time]) -> str: """ Serializes a datetime or time into ISO 8601 format required for Open Graph and Structured Data. - :param Union[datetime, time] date: The date object to serialize. + :param Union[date, datetime, time] date: The date object to serialize. :rtype: str :returns: String-ified date. """ @@ -81,6 +81,10 @@ class StructDataEncoder(JSONEncoder): def default(self, obj): # Serialize dates to ISO 8601 format. + if isinstance(obj, date): + return serialize_date(obj) + + # Serialize datetimes to ISO 8601 format. if isinstance(obj, datetime): return serialize_date(obj)