calendar module fails to import on Wine due to incomplete %OB error handling
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- Python
- Estrellas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PR
- Métricas de PR pendientes
Descripción
Title: calendar module fails to import on Wine due to incomplete %OB error handling
Component: Library (Lib)
Type: bug
Python Version: 3.15
Summary:
The calendar module added in Python 3.15 (gh-131146) fails to import when running
under Wine because the error handling for unsupported %OB/%Ob format specifiers
is incomplete.
The try/except block catches ValueError during _localized_month object construction,
but the actual strftime call happens lazily in getitem when set() iterates
over the sequence in the else block.
Steps to Reproduce:
- Run Python 3.15 under Wine (any version 9.0-11.14)
- Execute: import calendar
Expected Result:
calendar module imports successfully, falling back to month_name/month_abbr
when %OB/%Ob are not supported
Actual Result:
Traceback (most recent call last):
File "", line 1, in
File "calendar.py", line 156, in
File "calendar.py", line 110, in getitem
ValueError: Invalid format string
Analysis:
In Lib/calendar.py lines 143-156:
try:
standalone_month_name = _localized_month('%OB')
standalone_month_abbr = _localized_month('%Ob')
except ValueError:
standalone_month_name = month_name
standalone_month_abbr = month_abbr
else:
# This calls getitem which triggers the actual strftime call
if len(set(standalone_month_name)) != len(set(month_name)): # <-- ValueError here
standalone_month_name = month_name
The _localized_month constructor just stores the format string; the actual
datetime.strftime() call happens in getitem when set() iterates. Wine's
strftime doesn't support %O and raises ValueError at this point, which is
not caught.
Suggested Fix:
Wrap the set() comparison in the else block with try/except:
try:
standalone_month_name = _localized_month('%OB')
standalone_month_abbr = _localized_month('%Ob')
except ValueError:
standalone_month_name = month_name
standalone_month_abbr = month_abbr
else:
try:
if len(set(standalone_month_name)) != len(set(month_name)):
standalone_month_name = month_name
if len(set(standalone_month_abbr)) != len(set(month_abbr)):
standalone_month_abbr = month_abbr
except ValueError:
standalone_month_name = month_name
standalone_month_abbr = month_abbr
Impact:
This breaks Python 3.15 compatibility with Wine, affecting users who build
Windows executables using PyInstaller under Wine (a common CI/CD pattern).
Related:
- Original feature: https://github.com/python/cpython/issues/131146
- Wine bug (to be filed): strftime missing %O modifier support
Linked PRs
- gh-155269
- gh-155317
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza en Lib/calendar.py alrededor de las líneas 143-156 y reproduce import calendar bajo Wine, centrándote en las llamadas perezosas a strftime en las secuencias de meses independientes. El trabajo estará terminado cuando los formatos %OB/%Ob no compatibles ya no impidan la importación y se utilicen los valores normales de month_name/month_abbr como fallback; las PRs vinculadas gh-155269 y gh-155317 indican que este trabajo ya está en curso.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- python
- Área
- backend
- Tipo de issue
- Error
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Estado de actividad
- Estancado
- Claridad
- Bien especificado
- Aptitud para principiantes
- 25/100