annotate Lib/idlelib/run.py @ 79675:c0a2294de787 2.7

Issue #16199: Backport 2to3 typo fix from 3.2.
author Chris Jerdonek <chris.jerdonek@gmail.com>
date Thu, 11 Oct 2012 16:15:46 -0700
parents fa7d4ecc6357
children def4cd7e0a9f
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
1 import sys
78036
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
2 import io
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
3 import linecache
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
4 import time
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
5 import socket
28096
31008433c74f M rpc.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
6 import traceback
29445
e5d03360571d Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents: 29365
diff changeset
7 import thread
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
8 import threading
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
9 import Queue
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
10
63585
df378e44ba9a Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 49520
diff changeset
11 from idlelib import CallTips
df378e44ba9a Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 49520
diff changeset
12 from idlelib import AutoComplete
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 34945
diff changeset
13
63585
df378e44ba9a Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 49520
diff changeset
14 from idlelib import RemoteDebugger
df378e44ba9a Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 49520
diff changeset
15 from idlelib import RemoteObjectBrowser
df378e44ba9a Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 49520
diff changeset
16 from idlelib import StackViewer
df378e44ba9a Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 49520
diff changeset
17 from idlelib import rpc
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
18
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
19 import __main__
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
20
29365
72ce7cc03f27 Avoid problem resolving 'localhost'
Kurt B. Kaiser <kbk@shore.net>
parents: 29353
diff changeset
21 LOCALHOST = '127.0.0.1'
72ce7cc03f27 Avoid problem resolving 'localhost'
Kurt B. Kaiser <kbk@shore.net>
parents: 29353
diff changeset
22
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
23 try:
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
24 import warnings
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
25 except ImportError:
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
26 pass
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
27 else:
49520
d7a728420b03 Merged revisions 66922 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47248
diff changeset
28 def idle_formatwarning_subproc(message, category, filename, lineno,
55639
c6d32766e94c Issue #3926: Fix the usage of the new showwarnings and formatwarning.
Guilherme Polo <ggpolo@gmail.com>
parents: 52710
diff changeset
29 line=None):
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
30 """Format warnings the IDLE way"""
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
31 s = "\nWarning (from warnings module):\n"
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
32 s += ' File \"%s\", line %s\n' % (filename, lineno)
55639
c6d32766e94c Issue #3926: Fix the usage of the new showwarnings and formatwarning.
Guilherme Polo <ggpolo@gmail.com>
parents: 52710
diff changeset
33 if line is None:
c6d32766e94c Issue #3926: Fix the usage of the new showwarnings and formatwarning.
Guilherme Polo <ggpolo@gmail.com>
parents: 52710
diff changeset
34 line = linecache.getline(filename, lineno)
c6d32766e94c Issue #3926: Fix the usage of the new showwarnings and formatwarning.
Guilherme Polo <ggpolo@gmail.com>
parents: 52710
diff changeset
35 line = line.strip()
32484
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
36 if line:
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
37 s += " %s\n" % line
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
38 s += "%s: %s\n" % (category.__name__, message)
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
39 return s
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
40 warnings.formatwarning = idle_formatwarning_subproc
f3cb95cd413f Redirect the warning stream to the shell during the ScriptBinding check of user code
Kurt B. Kaiser <kbk@shore.net>
parents: 31412
diff changeset
41
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
42 # Thread shared globals: Establish a queue between a subthread (which handles
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
43 # the socket) and the main thread (which runs user code), plus global
43512
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
44 # completion, exit and interruptable (the main thread) flags:
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
45
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
46 exit_now = False
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
47 quitting = False
43512
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
48 interruptable = False
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
49
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
50 def main(del_exitfunc=False):
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
51 """Start the Python execution server in a subprocess
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
52
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
53 In the Python subprocess, RPCServer is instantiated with handlerclass
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
54 MyHandler, which inherits register/unregister methods from RPCHandler via
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
55 the mix-in class SocketIO.
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
56
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
57 When the RPCServer 'server' is instantiated, the TCPServer initialization
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
58 creates an instance of run.MyHandler and calls its handle() method.
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
59 handle() instantiates a run.Executive object, passing it a reference to the
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
60 MyHandler object. That reference is saved as attribute rpchandler of the
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
61 Executive instance. The Executive methods have access to the reference and
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
62 can pass it on to entities that they command
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
63 (e.g. RemoteDebugger.Debugger.start_debugger()). The latter, in turn, can
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
64 call MyHandler(SocketIO) register/unregister methods via the reference to
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
65 register and unregister themselves.
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
66
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
67 """
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
68 global exit_now
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
69 global quitting
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
70 global no_exitfunc
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
71 no_exitfunc = del_exitfunc
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
72 #time.sleep(15) # test subprocess not responding
52710
b984456196af Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents: 49519
diff changeset
73 try:
b984456196af Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents: 49519
diff changeset
74 assert(len(sys.argv) > 1)
b984456196af Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents: 49519
diff changeset
75 port = int(sys.argv[-1])
b984456196af Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents: 49519
diff changeset
76 except:
b984456196af Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents: 49519
diff changeset
77 print>>sys.stderr, "IDLE Subprocess: no IP port passed in sys.argv."
b984456196af Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents: 49519
diff changeset
78 return
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
79 sys.argv[:] = [""]
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
80 sockthread = threading.Thread(target=manage_socket,
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
81 name='SockThread',
29365
72ce7cc03f27 Avoid problem resolving 'localhost'
Kurt B. Kaiser <kbk@shore.net>
parents: 29353
diff changeset
82 args=((LOCALHOST, port),))
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
83 sockthread.setDaemon(True)
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
84 sockthread.start()
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
85 while 1:
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
86 try:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
87 if exit_now:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
88 try:
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
89 exit()
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
90 except KeyboardInterrupt:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
91 # exiting but got an extra KBI? Try again!
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
92 continue
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
93 try:
34945
9fe7801fc9a4 Use Queue's blocking feature instead of sleeping in the main
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
94 seq, request = rpc.request_queue.get(block=True, timeout=0.05)
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
95 except Queue.Empty:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
96 continue
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
97 method, args, kwargs = request
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
98 ret = method(*args, **kwargs)
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
99 rpc.response_queue.put((seq, ret))
29115
4f87a84e9beb On Windows the subprocess was not exiting during a restart.
Kurt B. Kaiser <kbk@shore.net>
parents: 29076
diff changeset
100 except KeyboardInterrupt:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
101 if quitting:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
102 exit_now = True
29115
4f87a84e9beb On Windows the subprocess was not exiting during a restart.
Kurt B. Kaiser <kbk@shore.net>
parents: 29076
diff changeset
103 continue
29156
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
104 except SystemExit:
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
105 raise
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
106 except:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
107 type, value, tb = sys.exc_info()
29156
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
108 try:
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
109 print_exception()
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
110 rpc.response_queue.put((seq, None))
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
111 except:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
112 # Link didn't work, print same exception to __stderr__
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
113 traceback.print_exception(type, value, tb, file=sys.__stderr__)
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
114 exit()
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
115 else:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
116 continue
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
117
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
118 def manage_socket(address):
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
119 for i in range(3):
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
120 time.sleep(i)
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
121 try:
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
122 server = MyRPCServer(address, MyHandler)
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
123 break
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
124 except socket.error, err:
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
125 print>>sys.__stderr__,"IDLE Subprocess: socket error: "\
63585
df378e44ba9a Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 49520
diff changeset
126 + err.args[1] + ", retrying...."
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
127 else:
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
128 print>>sys.__stderr__, "IDLE Subprocess: Connection to "\
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
129 "IDLE GUI failed, exiting."
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
130 show_socket_error(err, address)
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
131 global exit_now
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
132 exit_now = True
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
133 return
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
134 server.handle_request() # A single request only
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
135
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
136 def show_socket_error(err, address):
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
137 import Tkinter
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
138 import tkMessageBox
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
139 root = Tkinter.Tk()
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
140 root.withdraw()
63585
df378e44ba9a Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 49520
diff changeset
141 if err.args[0] == 61: # connection refused
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
142 msg = "IDLE's subprocess can't connect to %s:%d. This may be due "\
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
143 "to your personal firewall configuration. It is safe to "\
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
144 "allow this internal connection because no data is visible on "\
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
145 "external ports." % address
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
146 tkMessageBox.showerror("IDLE Subprocess Error", msg, parent=root)
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
147 else:
63585
df378e44ba9a Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 49520
diff changeset
148 tkMessageBox.showerror("IDLE Subprocess Error",
df378e44ba9a Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 49520
diff changeset
149 "Socket Error: %s" % err.args[1])
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
150 root.destroy()
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
151
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
152 def print_exception():
31311
5eb9e25e63fd - Print correct exception even if source file changed since shell was
Kurt B. Kaiser <kbk@shore.net>
parents: 31007
diff changeset
153 import linecache
5eb9e25e63fd - Print correct exception even if source file changed since shell was
Kurt B. Kaiser <kbk@shore.net>
parents: 31007
diff changeset
154 linecache.checkcache()
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
155 flush_stdout()
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
156 efile = sys.stderr
31007
753d72bd214b Backport:
Kurt B. Kaiser <kbk@shore.net>
parents: 29582
diff changeset
157 typ, val, tb = excinfo = sys.exc_info()
753d72bd214b Backport:
Kurt B. Kaiser <kbk@shore.net>
parents: 29582
diff changeset
158 sys.last_type, sys.last_value, sys.last_traceback = excinfo
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
159 tbe = traceback.extract_tb(tb)
31412
266f226f471d Added a Tk error dialog to run.py inform the user if the subprocess can't
Kurt B. Kaiser <kbk@shore.net>
parents: 31311
diff changeset
160 print>>efile, '\nTraceback (most recent call last):'
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
161 exclude = ("run.py", "rpc.py", "threading.py", "Queue.py",
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
162 "RemoteDebugger.py", "bdb.py")
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
163 cleanup_traceback(tbe, exclude)
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
164 traceback.print_list(tbe, file=efile)
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
165 lines = traceback.format_exception_only(typ, val)
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
166 for line in lines:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
167 print>>efile, line,
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
168
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
169 def cleanup_traceback(tb, exclude):
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
170 "Remove excluded traces from beginning/end of tb; get cached lines"
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
171 orig_tb = tb[:]
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
172 while tb:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
173 for rpcfile in exclude:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
174 if tb[0][0].count(rpcfile):
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
175 break # found an exclude, break for: and delete tb[0]
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
176 else:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
177 break # no excludes, have left RPC code, break while:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
178 del tb[0]
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
179 while tb:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
180 for rpcfile in exclude:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
181 if tb[-1][0].count(rpcfile):
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
182 break
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
183 else:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
184 break
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
185 del tb[-1]
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
186 if len(tb) == 0:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
187 # exception was in IDLE internals, don't prune!
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
188 tb[:] = orig_tb[:]
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
189 print>>sys.stderr, "** IDLE Internal Exception: "
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
190 rpchandler = rpc.objecttable['exec'].rpchandler
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
191 for i in range(len(tb)):
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
192 fn, ln, nm, line = tb[i]
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
193 if nm == '?':
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
194 nm = "-toplevel-"
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
195 if not line and fn.startswith("<pyshell#"):
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
196 line = rpchandler.remotecall('linecache', 'getline',
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
197 (fn, ln), {})
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
198 tb[i] = fn, ln, nm, line
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
199
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
200 def flush_stdout():
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
201 try:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
202 if sys.stdout.softspace:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
203 sys.stdout.softspace = 0
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
204 sys.stdout.write("\n")
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
205 except (AttributeError, EOFError):
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
206 pass
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
207
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
208 def exit():
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
209 """Exit subprocess, possibly after first deleting sys.exitfunc
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
210
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
211 If config-main.cfg/.def 'General' 'delete-exitfunc' is True, then any
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
212 sys.exitfunc will be removed before exiting. (VPython support)
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
213
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
214 """
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
215 if no_exitfunc:
45329
1e0ee324c513 There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
216 try:
1e0ee324c513 There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
217 del sys.exitfunc
1e0ee324c513 There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
218 except AttributeError:
1e0ee324c513 There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
219 pass
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
220 sys.exit(0)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
221
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
222 class MyRPCServer(rpc.RPCServer):
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
223
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
224 def handle_error(self, request, client_address):
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
225 """Override RPCServer method for IDLE
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
226
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
227 Interrupt the MainThread and exit server if link is dropped.
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
228
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
229 """
34012
96f62c6798e8 On OpenBSD, terminating IDLE with ctrl-c from the command line caused a
Kurt B. Kaiser <kbk@shore.net>
parents: 32484
diff changeset
230 global quitting
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
231 try:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
232 raise
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
233 except SystemExit:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
234 raise
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
235 except EOFError:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
236 global exit_now
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
237 exit_now = True
29445
e5d03360571d Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents: 29365
diff changeset
238 thread.interrupt_main()
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
239 except:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
240 erf = sys.__stderr__
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
241 print>>erf, '\n' + '-'*40
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
242 print>>erf, 'Unhandled server exception!'
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
243 print>>erf, 'Thread: %s' % threading.currentThread().getName()
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
244 print>>erf, 'Client Address: ', client_address
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
245 print>>erf, 'Request: ', repr(request)
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
246 traceback.print_exc(file=erf)
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
247 print>>erf, '\n*** Unrecoverable, server exiting!'
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
248 print>>erf, '-'*40
34012
96f62c6798e8 On OpenBSD, terminating IDLE with ctrl-c from the command line caused a
Kurt B. Kaiser <kbk@shore.net>
parents: 32484
diff changeset
249 quitting = True
96f62c6798e8 On OpenBSD, terminating IDLE with ctrl-c from the command line caused a
Kurt B. Kaiser <kbk@shore.net>
parents: 32484
diff changeset
250 thread.interrupt_main()
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
251
78036
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
252 class _RPCFile(io.TextIOBase):
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
253 """Wrapper class for the RPC proxy to typecheck arguments
78058
b659315883dd Don't use TextIOBase implementations in _RPCFile.
Martin v. Löwis <martin@v.loewis.de>
parents: 78055
diff changeset
254 that may not support pickling. The base class is there only
b659315883dd Don't use TextIOBase implementations in _RPCFile.
Martin v. Löwis <martin@v.loewis.de>
parents: 78055
diff changeset
255 to support type tests; all implementations come from the remote
b659315883dd Don't use TextIOBase implementations in _RPCFile.
Martin v. Löwis <martin@v.loewis.de>
parents: 78055
diff changeset
256 object."""
78036
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
257
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
258 def __init__(self, rpc):
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
259 super.__setattr__(self, 'rpc', rpc)
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
260
78058
b659315883dd Don't use TextIOBase implementations in _RPCFile.
Martin v. Löwis <martin@v.loewis.de>
parents: 78055
diff changeset
261 def __getattribute__(self, name):
78061
93df82c18781 Use _RPCFile.write properly.
Martin v. Löwis <martin@v.loewis.de>
parents: 78058
diff changeset
262 # When accessing the 'rpc' attribute, or 'write', use ours
78275
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
263 if name in ('rpc', 'write', 'writelines'):
78058
b659315883dd Don't use TextIOBase implementations in _RPCFile.
Martin v. Löwis <martin@v.loewis.de>
parents: 78055
diff changeset
264 return io.TextIOBase.__getattribute__(self, name)
b659315883dd Don't use TextIOBase implementations in _RPCFile.
Martin v. Löwis <martin@v.loewis.de>
parents: 78055
diff changeset
265 # Else only look into the remote object only
78036
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
266 return getattr(self.rpc, name)
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
267
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
268 def __setattr__(self, name, value):
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
269 return setattr(self.rpc, name, value)
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
270
78275
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
271 @staticmethod
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
272 def _ensure_string(func):
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
273 def f(self, s):
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
274 if not isinstance(s, basestring):
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
275 raise TypeError('must be str, not ' + type(s).__name__)
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
276 return func(self, s)
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
277 return f
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
278
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
279 class _RPCOutputFile(_RPCFile):
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
280 @_RPCFile._ensure_string
78036
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
281 def write(self, s):
58189e37331c - Issue #13532: Check that arguments to sys.stdout.write are strings.
Martin v. Löwis <martin@v.loewis.de>
parents: 68256
diff changeset
282 return self.rpc.write(s)
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
283
78275
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
284 class _RPCInputFile(_RPCFile):
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
285 @_RPCFile._ensure_string
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
286 def write(self, s):
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
287 raise io.UnsupportedOperation("not writable")
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
288 writelines = write
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
289
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
290 class MyHandler(rpc.RPCHandler):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
291
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
292 def handle(self):
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
293 """Override base method"""
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
294 executive = Executive(self)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
295 self.register("exec", executive)
78275
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
296 self.console = self.get_remote_proxy("stdin")
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
297 sys.stdin = _RPCInputFile(self.console)
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
298 sys.stdout = _RPCOutputFile(self.get_remote_proxy("stdout"))
fa7d4ecc6357 Issue #15318: Prevent writing to sys.stdin.
Martin v. Löwis <martin@v.loewis.de>
parents: 78061
diff changeset
299 sys.stderr = _RPCOutputFile(self.get_remote_proxy("stderr"))
63585
df378e44ba9a Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents: 49520
diff changeset
300 from idlelib import IOBinding
29582
ee14e5b06ed1 Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents: 29452
diff changeset
301 sys.stdin.encoding = sys.stdout.encoding = \
ee14e5b06ed1 Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents: 29452
diff changeset
302 sys.stderr.encoding = IOBinding.encoding
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
303 self.interp = self.get_remote_proxy("interp")
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
304 rpc.RPCHandler.getresponse(self, myseq=None, wait=0.05)
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
305
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
306 def exithook(self):
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
307 "override SocketIO method - wait for MainThread to shut us down"
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
308 time.sleep(10)
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
309
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
310 def EOFhook(self):
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
311 "Override SocketIO method - terminate wait on callback and exit thread"
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
312 global quitting
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
313 quitting = True
29445
e5d03360571d Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents: 29365
diff changeset
314 thread.interrupt_main()
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
315
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
316 def decode_interrupthook(self):
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
317 "interrupt awakened thread"
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
318 global quitting
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
319 quitting = True
29445
e5d03360571d Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents: 29365
diff changeset
320 thread.interrupt_main()
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
321
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
322
34212
1e8b033f91dc The remote procedure call module rpc.py can now access data attributes of
Kurt B. Kaiser <kbk@shore.net>
parents: 34012
diff changeset
323 class Executive(object):
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
324
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
325 def __init__(self, rpchandler):
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
326 self.rpchandler = rpchandler
25020
e41058845b79 1. Revert subprocess environment clearing, will restart subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
327 self.locals = __main__.__dict__
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
328 self.calltip = CallTips.CallTips()
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 34945
diff changeset
329 self.autocomplete = AutoComplete.AutoComplete()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
330
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
331 def runcode(self, code):
43512
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
332 global interruptable
28096
31008433c74f M rpc.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
333 try:
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
334 self.usr_exc_info = None
43512
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
335 interruptable = True
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
336 try:
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
337 exec code in self.locals
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
338 finally:
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
339 interruptable = False
28096
31008433c74f M rpc.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
340 except:
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
341 self.usr_exc_info = sys.exc_info()
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
342 if quitting:
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
343 exit()
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
344 # even print a user code SystemExit exception, continue
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
345 print_exception()
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
346 jit = self.rpchandler.console.getvar("<<toggle-jit-stack-viewer>>")
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
347 if jit:
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
348 self.rpchandler.interp.open_remote_stack_viewer()
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
349 else:
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
350 flush_stdout()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
351
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 26730
diff changeset
352 def interrupt_the_server(self):
43512
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
353 if interruptable:
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
354 thread.interrupt_main()
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
355
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
356 def start_the_debugger(self, gui_adap_oid):
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
357 return RemoteDebugger.start_debugger(self.rpchandler, gui_adap_oid)
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
358
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
359 def stop_the_debugger(self, idb_adap_oid):
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
360 "Unregister the Idb Adapter. Link objects and Idb then subject to GC"
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
361 self.rpchandler.unregister(idb_adap_oid)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
362
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
363 def get_the_calltip(self, name):
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
364 return self.calltip.fetch_tip(name)
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
365
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 34945
diff changeset
366 def get_the_completion_list(self, what, mode):
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 34945
diff changeset
367 return self.autocomplete.fetch_completions(what, mode)
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 34945
diff changeset
368
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
369 def stackviewer(self, flist_oid=None):
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
370 if self.usr_exc_info:
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
371 typ, val, tb = self.usr_exc_info
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
372 else:
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
373 return None
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
374 flist = None
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
375 if flist_oid is not None:
23995
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
376 flist = self.rpchandler.get_remote_proxy(flist_oid)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
377 while tb and tb.tb_frame.f_globals["__name__"] in ["rpc", "run"]:
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
378 tb = tb.tb_next
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
379 sys.last_type = typ
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
380 sys.last_value = val
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
381 item = StackViewer.StackTreeItem(flist, tb)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
382 return RemoteObjectBrowser.remote_object_tree_item(item)