File tree Expand file tree Collapse file tree 3 files changed +15
-1
lines changed Expand file tree Collapse file tree 3 files changed +15
-1
lines changed Original file line number Diff line number Diff line change
1
+ Fall back to sys.getdefaultencoding() if locale.getpreferredencoding() returns None in `pip.utils.encoding.auto_decode`.
Original file line number Diff line number Diff line change 1
1
import codecs
2
2
import locale
3
3
import re
4
+ import sys
4
5
5
6
BOMS = [
6
7
(codecs .BOM_UTF8 , 'utf8' ),
@@ -27,4 +28,6 @@ def auto_decode(data):
27
28
if line [0 :1 ] == b'#' and ENCODING_RE .search (line ):
28
29
encoding = ENCODING_RE .search (line ).groups ()[0 ].decode ('ascii' )
29
30
return data .decode (encoding )
30
- return data .decode (locale .getpreferredencoding (False ))
31
+ return data .decode (
32
+ locale .getpreferredencoding (False ) or sys .getdefaultencoding (),
33
+ )
Original file line number Diff line number Diff line change @@ -464,6 +464,16 @@ def test_auto_decode_pep263_headers(self):
464
464
latin1_req = u'# coding=latin1\n # Pas trop de café'
465
465
assert auto_decode (latin1_req .encode ('latin1' )) == latin1_req
466
466
467
+ def test_auto_decode_no_preferred_encoding (self ):
468
+ om , em = Mock (), Mock ()
469
+ om .return_value = 'ascii'
470
+ em .return_value = None
471
+ data = u'data'
472
+ with patch ('sys.getdefaultencoding' , om ):
473
+ with patch ('locale.getpreferredencoding' , em ):
474
+ ret = auto_decode (data .encode (sys .getdefaultencoding ()))
475
+ assert ret == data
476
+
467
477
468
478
class TestTempDirectory (object ):
469
479
You can’t perform that action at this time.
0 commit comments