Skip to content

Commit

Permalink
Fix the test that broke after 3.12 changes to locale.normalize
Browse files Browse the repository at this point in the history
- On Linux, C.UTF-8 locale is now part of the standard. macOS and Windows
  use en_US.UTF-8 instead.
- Up to 3.11, `locale.normalize` was converting `C.UTF-8` into `en_US.UTF-8`.
  If you normalized the locale string, it was impossible to set `C.UTF-8`.
- In 3.12, `C.UTF-8` maps to itself.
- python/cpython#14925
- https://peps.python.org/pep-0538/
- `C.UTF-8` doesn't seem to be used anywhere else in the codebase, except for this one test.
- Other fix would be to inject a previous value to `locale.locale_alias` dictionary
  for certain platforms. However, this is part of the private implementation
  and could change without prior notice.
- More changes to the locale are scheduled for 3.15.
  • Loading branch information
kkalinowski-reef committed Dec 4, 2023
1 parent fb8441f commit 15d219d
Showing 1 changed file with 6 additions and 4 deletions.
10 changes: 6 additions & 4 deletions test/unit/b2http/test_b2http.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

import datetime
import locale
import sys
from unittest.mock import MagicMock, call, patch

import apiver_deps
Expand All @@ -32,7 +33,6 @@
)

from b2sdk.b2http import setlocale

from ..test_base import TestBase


Expand Down Expand Up @@ -306,9 +306,11 @@ class TestB2HttpUserAgentAppend(TestB2Http):

class TestSetLocaleContextManager(TestBase):
def test_set_locale_context_manager(self):
test_locale = locale.normalize(
'C.utf8'
) # C.UTF-8 on Ubuntu 18.04 Bionic, C.utf8 on Ubuntu 22.04 Jammy
# C.UTF-8 on Ubuntu 18.04 Bionic, C.utf8 on Ubuntu 22.04 Jammy
# Neither macOS nor Windows have C.UTF-8 locale, and they use `en_US.UTF-8`.
# Since Python 3.12, locale.normalize no longer falls back
# to the `en_US` version, so we're providing it here manually.
test_locale = locale.normalize('C.UTF-8' if sys.platform == 'linux' else 'en_US.UTF-8')
other_locale = 'C'

saved = locale.setlocale(locale.LC_ALL)
Expand Down

0 comments on commit 15d219d

Please sign in to comment.