From ddb6d3f2355bda794ea4c2d4f48cb2bbddc7fbc0 Mon Sep 17 00:00:00 2001 From: Thomas Ballinger Date: Fri, 5 Aug 2016 19:22:33 -0400 Subject: [PATCH 1/4] Use real stdin encoding for fake stdin encoding. this is both more accurate and corrects the spelling from UTF8 to UTF-8 --- bpython/curtsiesfrontend/repl.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bpython/curtsiesfrontend/repl.py b/bpython/curtsiesfrontend/repl.py index 9bccca5fe..4f078e892 100644 --- a/bpython/curtsiesfrontend/repl.py +++ b/bpython/curtsiesfrontend/repl.py @@ -220,7 +220,7 @@ def close(self): @property def encoding(self): - return "UTF8" + return sys.__stdin__.encoding # TODO write a read() method? From 2d6bae81e5f93eec9244c16f6da2bf0ca3c629a2 Mon Sep 17 00:00:00 2001 From: Thomas Ballinger Date: Fri, 5 Aug 2016 19:33:01 -0400 Subject: [PATCH 2/4] Add encoding attribute to fake stdout/stderr. Start storing an original file object on the fake one. --- bpython/curtsiesfrontend/coderunner.py | 10 +++++++--- bpython/curtsiesfrontend/repl.py | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/bpython/curtsiesfrontend/coderunner.py b/bpython/curtsiesfrontend/coderunner.py index 6087edb08..d53e75d48 100644 --- a/bpython/curtsiesfrontend/coderunner.py +++ b/bpython/curtsiesfrontend/coderunner.py @@ -205,7 +205,7 @@ def request_from_main_context(self, force_refresh=False): class FakeOutput(object): - def __init__(self, coderunner, on_write, fileno=1): + def __init__(self, coderunner, on_write, real_fileobj): """Fakes sys.stdout or sys.stderr on_write should always take unicode @@ -215,7 +215,7 @@ def __init__(self, coderunner, on_write, fileno=1): """ self.coderunner = coderunner self.on_write = on_write - self.real_fileno = fileno + self._real_fileobj = real_fileobj def write(self, s, *args, **kwargs): if not py3 and isinstance(s, str): @@ -227,7 +227,7 @@ def write(self, s, *args, **kwargs): # have a method called fileno. One example is pwntools. This # is not a widespread issue, but is annoying. def fileno(self): - return self.real_fileno + return self._real_fileobj.fileno() def writelines(self, l): for s in l: @@ -238,3 +238,7 @@ def flush(self): def isatty(self): return True + + @property + def encoding(self): + return self._real_fileobj.encoding diff --git a/bpython/curtsiesfrontend/repl.py b/bpython/curtsiesfrontend/repl.py index 4f078e892..de31dc686 100644 --- a/bpython/curtsiesfrontend/repl.py +++ b/bpython/curtsiesfrontend/repl.py @@ -421,12 +421,12 @@ def __init__( self.stdout = FakeOutput( self.coderunner, self.send_to_stdouterr, - fileno=sys.__stdout__.fileno(), + real_fileobj=sys.__stdout__, ) self.stderr = FakeOutput( self.coderunner, self.send_to_stdouterr, - fileno=sys.__stderr__.fileno(), + real_fileobj=sys.__stderr__, ) self.stdin = FakeStdin(self.coderunner, self, self.edit_keys) From 525e360f08a58c2c00bc8a4902ac385ba9e94f1b Mon Sep 17 00:00:00 2001 From: Thomas Ballinger Date: Fri, 5 Aug 2016 19:35:41 -0400 Subject: [PATCH 3/4] Update tests for new FakeOutput --- bpython/test/test_curtsies_coderunner.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/bpython/test/test_curtsies_coderunner.py b/bpython/test/test_curtsies_coderunner.py index 25844af59..cde215534 100644 --- a/bpython/test/test_curtsies_coderunner.py +++ b/bpython/test/test_curtsies_coderunner.py @@ -20,8 +20,8 @@ def test_simple(self): request_refresh=lambda: self.orig_stdout.flush() or self.orig_stderr.flush() ) - stdout = FakeOutput(c, lambda *args, **kwargs: None) - stderr = FakeOutput(c, lambda *args, **kwargs: None) + stdout = FakeOutput(c, lambda *args, **kwargs: None, None) + stderr = FakeOutput(c, lambda *args, **kwargs: None, None) sys.stdout = stdout sys.stdout = stderr c.load_code("1 + 1") @@ -38,8 +38,8 @@ def test_exception(self): def ctrlc(): raise KeyboardInterrupt() - stdout = FakeOutput(c, lambda x: ctrlc()) - stderr = FakeOutput(c, lambda *args, **kwargs: None) + stdout = FakeOutput(c, lambda x: ctrlc(), None) + stderr = FakeOutput(c, lambda *args, **kwargs: None, None) sys.stdout = stdout sys.stderr = stderr c.load_code("1 + 1") @@ -51,5 +51,5 @@ def assert_unicode(self, s): self.assertIsInstance(s, type(u"")) def test_bytes(self): - out = FakeOutput(mock.Mock(), self.assert_unicode) - out.write("native string type") + out = FakeOutput(mock.Mock(), self.assert_unicode, None) + out.write('native string type') From 3f7edd6e17fa830f02a0df44cc6ed34d773345bf Mon Sep 17 00:00:00 2001 From: Thomas Ballinger Date: Sun, 11 Oct 2020 14:17:08 -0700 Subject: [PATCH 4/4] back to normal double quotes --- bpython/test/test_curtsies_coderunner.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bpython/test/test_curtsies_coderunner.py b/bpython/test/test_curtsies_coderunner.py index cde215534..94d8106d6 100644 --- a/bpython/test/test_curtsies_coderunner.py +++ b/bpython/test/test_curtsies_coderunner.py @@ -52,4 +52,4 @@ def assert_unicode(self, s): def test_bytes(self): out = FakeOutput(mock.Mock(), self.assert_unicode, None) - out.write('native string type') + out.write("native string type")