Source: python-babel
Version: 2.10.3-3
Severity: important

Dear Maintainer,

Maybe something got broken when python was upgraded to 3.12[0].

I was fixing the autopkgtest of tkcalendat[1] tests fail with Python
3.12. I found the root cause maybe from python-babel:


One test failed example on python3.12:

```

232s ERROR: test_calendar_buttons_functions
(tests.test_calendar.TestCalendar.test_calendar_buttons_functions)
232s ----------------------------------------------------------------------
232s Traceback (most recent call last):
232s   File
"/tmp/autopkgtest.Ikr8jw/autopkgtest_tmp/tests/test_calendar.py", line
194, in test_calendar_buttons_functions
232s     widget.selection_set(format_date(date(2018, 12, 31), 'short'))
232s                          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
232s   File "/tmp/autopkgtest.Ikr8jw/autopkgtest_tmp/tests/__init__.py",
line 30, in format_date
232s     return babel.dates.format_date(date, length, locale)
232s            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
232s   File "/usr/lib/python3/dist-packages/babel/dates.py", line 726,
in format_date
232s     locale = Locale.parse(locale)
232s              ^^^^^^^^^^^^^^^^^^^^
232s   File "/usr/lib/python3/dist-packages/babel/core.py", line 330, in
parse
232s     raise UnknownLocaleError(input_id)
232s babel.core.UnknownLocaleError: unknown locale 'c'
```

The `format_date` is defined here[2]

```

import babel.dates

locale.setlocale(locale.LC_ALL, '')


def format_date(date, length, locale=locale.getdefaultlocale()[0]):
    return babel.dates.format_date(date, length, locale)

```

The caller[3] is here:

```
        widget._next_year()
        widget._remove_selection()
        widget.selection_set(format_date(date(2018, 12, 31), 'short'))
        self.assertEqual(widget.selection_get(), date(2018, 12, 31))
        with self.assertRaises(ValueError):
            widget.selection_set("ab")
        widget.selection_set(None)
```
So if the locale in `format_date` is NULL, it will fail and throw away
the error on python3.12:
```
babel.core.UnknownLocaleError: unknown locale 'c'
```
In face, same test case will be viewed as locale 'en_US' on python 3.11
and the same version pyhton-babel package from my debug and If I enable
locale default to `en_US` the test will be passed even on python3.12.

But I think the right understanding should be to be recongized by 
`LANG=C` by default. 

In fact, I should upgrade python-babel to 2.13.1(the latest release)
to vertify the issus is exist or not.


[0]: https://lists.debian.org/debian-python/2023/12/msg00000.html
[1]: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1056534
[2]: 
https://salsa.debian.org/python-team/packages/tkcalendar/-/blame/debian/main/tests/__init__.py#L29
[3]: 
https://salsa.debian.org/python-team/packages/tkcalendar/-/blob/debian/main/tests/test_calendar.py#L194
-- 
Regards,
--
  Bo YU

Attachment: signature.asc
Description: PGP signature

Reply via email to