Skip to content

Commit 00760f9

Browse files
committed
Merge remote-tracking branch 'origin/fix-writing-bytes-in-python-2'
2 parents 8aa4ddf + 8942807 commit 00760f9

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

bpython/curtsiesfrontend/coderunner.py

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@
1515
import greenlet
1616
import logging
1717

18+
from bpython._py3compat import py3, try_decode
19+
from bpython.config import getpreferredencoding
20+
1821
logger = logging.getLogger(__name__)
1922

2023

@@ -193,11 +196,17 @@ def request_from_main_greenlet(self, force_refresh=False):
193196

194197
class FakeOutput(object):
195198
def __init__(self, coderunner, on_write):
199+
"""Fakes sys.stdout or sys.stderr
200+
201+
on_write should always take unicode
202+
"""
196203
self.coderunner = coderunner
197204
self.on_write = on_write
198205

199-
def write(self, *args, **kwargs):
200-
self.on_write(*args, **kwargs)
206+
def write(self, s, *args, **kwargs):
207+
if not py3 and isinstance(s, str):
208+
s = s.decode(getpreferredencoding())
209+
self.on_write(s, *args, **kwargs)
201210
return self.coderunner.request_from_main_greenlet(force_refresh=True)
202211

203212
def writelines(self, l):

bpython/test/test_curtsies_coderunner.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import sys
22

3+
from bpython.test import mock
4+
35
try:
46
import unittest2 as unittest
57
except ImportError:
@@ -43,3 +45,13 @@ def ctrlc():
4345
sys.stderr = stderr
4446
c.load_code('1 + 1')
4547
c.run_code()
48+
49+
50+
class TestFakeOutput(unittest.TestCase):
51+
52+
def assert_unicode(self, s):
53+
self.assertIsInstance(s, type(u''))
54+
55+
def test_bytes(self):
56+
out = FakeOutput(mock.Mock(), self.assert_unicode)
57+
out.write('native string type')

0 commit comments

Comments
 (0)