From a08809a0f3e43187aadb9017204171bfa40b3548 Mon Sep 17 00:00:00 2001 From: perpil <97474956+perpil@users.noreply.github.com> Date: Tue, 19 Nov 2024 04:39:37 -0800 Subject: [PATCH] Fixed blog plugin crashing on dates with timezones (#7708) * Normalize datetime values to UTC in blog plugin Fixes #7705 Normalize datetime values to UTC in blog plugin to handle offset-naive and offset-aware datetimes correctly. * Import `timezone` from `datetime` in `material/plugins/blog/structure/options.py`. * Modify `pre_validation` method to set `tzinfo=timezone.utc` for datetime values. --- For more details, open the [Copilot Workspace session](https://copilot-workspace.githubnext.com/squidfunk/mkdocs-material/issues/7705?shareId=XXXX-XXXX-XXXX-XXXX). * Normalize datetime values to UTC in blog plugin Fixes #7705 + Move changes to src directory --- material/plugins/blog/structure/options.py | 6 +++--- src/plugins/blog/structure/options.py | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/material/plugins/blog/structure/options.py b/material/plugins/blog/structure/options.py index 409274472..a7bab08fe 100644 --- a/material/plugins/blog/structure/options.py +++ b/material/plugins/blog/structure/options.py @@ -18,7 +18,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. -from datetime import date, datetime, time +from datetime import date, datetime, time, timezone from mkdocs.config.base import BaseConfigOption, Config, ValidationError from typing import Dict @@ -69,9 +69,9 @@ class PostDate(BaseConfigOption[DateDict]): continue # Handle date - we set 00:00:00 as the default time, if the author - # only supplied a date, and convert it to datetime + # only supplied a date, and convert it to datetime in UTC if isinstance(value, date): - config[key_name][key] = datetime.combine(value, time()) + config[key_name][key] = datetime.combine(value, time()).replace(tzinfo=timezone.utc) # Initialize date dictionary config[key_name] = DateDict(config[key_name]) diff --git a/src/plugins/blog/structure/options.py b/src/plugins/blog/structure/options.py index 409274472..a7bab08fe 100644 --- a/src/plugins/blog/structure/options.py +++ b/src/plugins/blog/structure/options.py @@ -18,7 +18,7 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. -from datetime import date, datetime, time +from datetime import date, datetime, time, timezone from mkdocs.config.base import BaseConfigOption, Config, ValidationError from typing import Dict @@ -69,9 +69,9 @@ class PostDate(BaseConfigOption[DateDict]): continue # Handle date - we set 00:00:00 as the default time, if the author - # only supplied a date, and convert it to datetime + # only supplied a date, and convert it to datetime in UTC if isinstance(value, date): - config[key_name][key] = datetime.combine(value, time()) + config[key_name][key] = datetime.combine(value, time()).replace(tzinfo=timezone.utc) # Initialize date dictionary config[key_name] = DateDict(config[key_name])