calendar module fails to import on Wine due to incomplete %OB error handling
Ninguém assumiu esta issue ainda.
- Linguagem predominante
- Python
- Estrelas
- 77.2k
- Forks
- 35.9k
- Métricas de merge de PRs
- Métricas de PR pendentes
Descrição
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
Guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Direção de pesquisa
Comece em Lib/calendar.py por volta das linhas 143-156 e reproduza import calendar no Wine, concentrando-se nas chamadas lazy de strftime nas sequências de meses independentes. O trabalho estará concluído quando os formatos %OB/%Ob não compatíveis não impedirem mais a importação e os valores regulares de month_name/month_abbr forem usados como fallback; os PRs vinculados gh-155269 e gh-155317 indicam que esse trabalho já está em andamento.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python
- Domínio
- backend
- Tipo de issue
- Bug
- Dificuldade
- 2/5
- Tempo estimado
- 1-3 horas
- Status de atividade
- Estagnada
- Clareza
- Claramente especificada
- Facilidade para iniciantes
- 25/100