File tree 2 files changed +28
-11
lines changed
2 files changed +28
-11
lines changed Original file line number Diff line number Diff line change @@ -433,6 +433,26 @@ def teardown_class(cls):
433
433
del cls .locales
434
434
del cls .current_locale
435
435
436
+ def test_can_set_locale_valid_set (self ):
437
+ # Setting the default locale should return True
438
+ assert tm .can_set_locale ('' ) is True
439
+
440
+ def test_can_set_locale_invalid_set (self ):
441
+ # Setting an invalid locale should return False
442
+ assert tm .can_set_locale ('non-existent_locale' ) is False
443
+
444
+ def test_can_set_locale_invalid_get (self , monkeypatch ):
445
+ # In some cases, an invalid locale can be set,
446
+ # but a subsequent getlocale() raises a ValueError
447
+ # See GH 22129
448
+
449
+ def mockgetlocale ():
450
+ raise ValueError ()
451
+
452
+ with monkeypatch .context () as m :
453
+ m .setattr (locale , 'getlocale' , mockgetlocale )
454
+ assert tm .can_set_locale ('' ) is False
455
+
436
456
def test_get_locales (self ):
437
457
# all systems should have at least a single locale
438
458
assert len (tm .get_locales ()) > 0
Original file line number Diff line number Diff line change @@ -504,23 +504,19 @@ def set_locale(new_locale, lc_var=locale.LC_ALL):
504
504
505
505
try :
506
506
locale .setlocale (lc_var , new_locale )
507
-
508
- try :
509
- normalized_locale = locale .getlocale ()
510
- except ValueError :
511
- yield new_locale
507
+ normalized_locale = locale .getlocale ()
508
+ if com ._all_not_none (* normalized_locale ):
509
+ yield '.' .join (normalized_locale )
512
510
else :
513
- if com ._all_not_none (* normalized_locale ):
514
- yield '.' .join (normalized_locale )
515
- else :
516
- yield new_locale
511
+ yield new_locale
517
512
finally :
518
513
locale .setlocale (lc_var , current_locale )
519
514
520
515
521
516
def can_set_locale (lc , lc_var = locale .LC_ALL ):
522
517
"""
523
- Check to see if we can set a locale without raising an Exception.
518
+ Check to see if we can set a locale, and subsequently get the locale,
519
+ without raising an Exception.
524
520
525
521
Parameters
526
522
----------
@@ -538,7 +534,8 @@ def can_set_locale(lc, lc_var=locale.LC_ALL):
538
534
try :
539
535
with set_locale (lc , lc_var = lc_var ):
540
536
pass
541
- except locale .Error : # horrible name for a Exception subclass
537
+ except (ValueError ,
538
+ locale .Error ): # horrible name for a Exception subclass
542
539
return False
543
540
else :
544
541
return True
You can’t perform that action at this time.
0 commit comments