merge heads

This commit is contained in:
Martin v. Löwis 2012-07-09 20:51:45 +02:00
commit b7439a547b
3 changed files with 25 additions and 3 deletions

View File

@ -1,6 +1,8 @@
What's New in IDLE 3.3.0? What's New in IDLE 3.3.0?
========================= =========================
- Issue #13532: Check that arguments to sys.stdout.write are strings.
- Issue # 12510: Attempt to get certain tool tips no longer crashes IDLE. - Issue # 12510: Attempt to get certain tool tips no longer crashes IDLE.
Erroneous tool tips have been corrected. Default added for callables. Erroneous tool tips have been corrected. Default added for callables.

View File

@ -1258,6 +1258,8 @@ class PseudoFile(object):
self.encoding = encoding self.encoding = encoding
def write(self, s): def write(self, s):
if not isinstance(s, str):
raise TypeError('must be str, not ' + type(s).__name__)
self.shell.write(s, self.tags) self.shell.write(s, self.tags)
def writelines(self, lines): def writelines(self, lines):

View File

@ -1,4 +1,5 @@
import sys import sys
import io
import linecache import linecache
import time import time
import socket import socket
@ -257,6 +258,23 @@ class MyRPCServer(rpc.RPCServer):
quitting = True quitting = True
thread.interrupt_main() thread.interrupt_main()
class _RPCFile(io.TextIOBase):
"""Wrapper class for the RPC proxy to typecheck arguments
that may not support pickling."""
def __init__(self, rpc):
super.__setattr__(self, 'rpc', rpc)
def __getattr__(self, name):
return getattr(self.rpc, name)
def __setattr__(self, name, value):
return setattr(self.rpc, name, value)
def write(self, s):
if not isinstance(s, str):
raise TypeError('must be str, not ' + type(s).__name__)
return self.rpc.write(s)
class MyHandler(rpc.RPCHandler): class MyHandler(rpc.RPCHandler):
@ -264,9 +282,9 @@ class MyHandler(rpc.RPCHandler):
"""Override base method""" """Override base method"""
executive = Executive(self) executive = Executive(self)
self.register("exec", executive) self.register("exec", executive)
sys.stdin = self.console = self.get_remote_proxy("stdin") sys.stdin = self.console = _RPCFile(self.get_remote_proxy("stdin"))
sys.stdout = self.get_remote_proxy("stdout") sys.stdout = _RPCFile(self.get_remote_proxy("stdout"))
sys.stderr = self.get_remote_proxy("stderr") sys.stderr = _RPCFile(self.get_remote_proxy("stderr"))
sys.displayhook = rpc.displayhook sys.displayhook = rpc.displayhook
# page help() text to shell. # page help() text to shell.
import pydoc # import must be done here to capture i/o binding import pydoc # import must be done here to capture i/o binding