From afe8464fdae535d47e70fd9cafa8a708ecc5df52 Mon Sep 17 00:00:00 2001 From: Funan Zhou Date: Fri, 3 Apr 2026 06:12:14 +0800 Subject: [PATCH] Fix standalone month alias cache leakage --- babel/localedata.py | 2 +- tests/test_dates.py | 19 ++++++++++++++++++- 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/babel/localedata.py b/babel/localedata.py index 2b225a142..c20482b4c 100644 --- a/babel/localedata.py +++ b/babel/localedata.py @@ -269,7 +269,7 @@ def __getitem__(self, key: str | int | None) -> Any: val = alias.resolve(self.base).copy() merge(val, others) if isinstance(val, dict): # Return a nested alias-resolving dict - val = LocaleDataDict(val, base=self.base) + return LocaleDataDict(val, base=self.base) if val is not orig: self._data[key] = val return val diff --git a/tests/test_dates.py b/tests/test_dates.py index 12bb23433..1140b4227 100644 --- a/tests/test_dates.py +++ b/tests/test_dates.py @@ -16,7 +16,7 @@ import freezegun import pytest -from babel import Locale, dates +from babel import Locale, dates, localedata from babel.dates import NO_INHERITANCE_MARKER, UTC, _localize, parse_pattern from babel.util import FixedOffsetTimezone @@ -561,6 +561,23 @@ def test_format_date(): "Sun, Apr 1, '07") +@pytest.mark.parametrize( + ('locale', 'expected'), + [ + ('de', 'Oktober'), + ('he', 'אוקטובר'), + ('no', 'oktober'), + ('fr', 'octobre'), + ], +) +def test_format_date_standalone_month_name_isolation(locale, expected): + localedata._cache.clear() + d = date(2025, 10, 1) + + assert dates.format_date(d, 'LLLL', locale='he') == 'אוקטובר' + assert dates.format_date(d, 'LLLL', locale=locale) == expected + + def test_format_datetime(timezone_getter): dt = datetime(2007, 4, 1, 15, 30) assert (dates.format_datetime(dt, locale='en_US') ==