annotate Lib/idlelib/run.py @ 54294:dba767bc3155 legacy-trunk

remove mention of old ctypes version
author Benjamin Peterson <benjamin@python.org>
date Sat, 23 May 2009 20:59:09 +0000
parents b984456196af
children c6d32766e94c
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
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
2 import linecache
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
3 import time
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
4 import socket
28096
31008433c74f M rpc.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
5 import traceback
29445
e5d03360571d Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents: 29365
diff changeset
6 import thread
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
7 import threading
47248
9acb314b9072 Queue renaming reversal part 3: move module into place and
Georg Brandl <georg@python.org>
parents: 47183
diff changeset
8 import Queue
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
9
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
10 import CallTips
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 34945
diff changeset
11 import AutoComplete
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 34945
diff changeset
12
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
13 import RemoteDebugger
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
14 import RemoteObjectBrowser
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
15 import StackViewer
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
16 import rpc
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
17
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
18 import __main__
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
19
29365
72ce7cc03f27 Avoid problem resolving 'localhost'
Kurt B. Kaiser <kbk@shore.net>
parents: 29353
diff changeset
20 LOCALHOST = '127.0.0.1'
72ce7cc03f27 Avoid problem resolving 'localhost'
Kurt B. Kaiser <kbk@shore.net>
parents: 29353
diff changeset
21
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
22 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
23 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
24 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
25 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
26 else:
49510
0adf6bdb170f support the optional line argument for idle
Benjamin Peterson <benjamin@python.org>
parents: 47248
diff changeset
27 def idle_formatwarning_subproc(message, category, filename, lineno,
49519
6938219dc5a6 use new showwarnings signature for idle #3391
Benjamin Peterson <benjamin@python.org>
parents: 49510
diff changeset
28 file=None, 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
29 """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
30 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
31 s += ' File \"%s\", line %s\n' % (filename, lineno)
49519
6938219dc5a6 use new showwarnings signature for idle #3391
Benjamin Peterson <benjamin@python.org>
parents: 49510
diff changeset
32 line = linecache.getline(filename, lineno).strip() \
6938219dc5a6 use new showwarnings signature for idle #3391
Benjamin Peterson <benjamin@python.org>
parents: 49510
diff changeset
33 if line is None else line
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
34 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
35 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
36 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
37 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
38 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
39
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
40 # 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
41 # 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
42 # completion, exit and interruptable (the main thread) flags:
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
43
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
44 exit_now = False
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
45 quitting = False
43512
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
46 interruptable = False
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
47
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
48 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
49 """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
50
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
51 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
52 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
53 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
54
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
55 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
56 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
57 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
58 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
59 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
60 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
61 (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
62 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
63 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
64
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
65 """
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
66 global exit_now
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
67 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
68 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
69 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
70 #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
71 try:
b984456196af Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents: 49519
diff changeset
72 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
73 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
74 except:
b984456196af Remove port spec from run.py and fix bug where
Kurt B. Kaiser <kbk@shore.net>
parents: 49519
diff changeset
75 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
76 return
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
77 sys.argv[:] = [""]
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
78 sockthread = threading.Thread(target=manage_socket,
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
79 name='SockThread',
29365
72ce7cc03f27 Avoid problem resolving 'localhost'
Kurt B. Kaiser <kbk@shore.net>
parents: 29353
diff changeset
80 args=((LOCALHOST, port),))
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
81 sockthread.setDaemon(True)
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
82 sockthread.start()
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
83 while 1:
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
84 try:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
85 if exit_now:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
86 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
87 exit()
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
88 except KeyboardInterrupt:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
89 # exiting but got an extra KBI? Try again!
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
90 continue
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
91 try:
34945
9fe7801fc9a4 Use Queue's blocking feature instead of sleeping in the main
Kurt B. Kaiser <kbk@shore.net>
parents: 34212
diff changeset
92 seq, request = rpc.request_queue.get(block=True, timeout=0.05)
47248
9acb314b9072 Queue renaming reversal part 3: move module into place and
Georg Brandl <georg@python.org>
parents: 47183
diff changeset
93 except Queue.Empty:
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
94 continue
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
95 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
96 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
97 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
98 except KeyboardInterrupt:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
99 if quitting:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
100 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
101 continue
29156
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
102 except SystemExit:
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
103 raise
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
104 except:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
105 type, value, tb = sys.exc_info()
29156
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
106 try:
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
107 print_exception()
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
108 rpc.response_queue.put((seq, None))
9d8de565e5de Show Freddy the mirror
Kurt B. Kaiser <kbk@shore.net>
parents: 29115
diff changeset
109 except:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
110 # Link didn't work, print same exception to __stderr__
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
111 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
112 exit()
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
113 else:
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
114 continue
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
115
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
116 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
117 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
118 time.sleep(i)
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
119 try:
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
120 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
121 break
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
122 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
123 print>>sys.__stderr__,"IDLE Subprocess: socket error: "\
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
124 + err[1] + ", retrying...."
24386
0e27b67247da Reverse the RPC socket connection: Python execution server connects to
Kurt B. Kaiser <kbk@shore.net>
parents: 23995
diff changeset
125 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
126 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
127 "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
128 show_socket_error(err, address)
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
129 global exit_now
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
130 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
131 return
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
132 server.handle_request() # A single request only
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
133
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
134 def show_socket_error(err, address):
47183
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47101
diff changeset
135 import Tkinter
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47101
diff changeset
136 import tkMessageBox
b53604fad54b Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents: 47101
diff changeset
137 root = Tkinter.Tk()
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
138 root.withdraw()
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 if err[0] == 61: # connection refused
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 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
141 "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
142 "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
143 "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
144 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
145 else:
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", "Socket Error: %s" % err[1])
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 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
148
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
149 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
150 import linecache
5eb9e25e63fd - Print correct exception even if source file changed since shell was
Kurt B. Kaiser <kbk@shore.net>
parents: 31007
diff changeset
151 linecache.checkcache()
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
152 flush_stdout()
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
153 efile = sys.stderr
31007
753d72bd214b Backport:
Kurt B. Kaiser <kbk@shore.net>
parents: 29582
diff changeset
154 typ, val, tb = excinfo = sys.exc_info()
753d72bd214b Backport:
Kurt B. Kaiser <kbk@shore.net>
parents: 29582
diff changeset
155 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
156 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
157 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
158 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
159 "RemoteDebugger.py", "bdb.py")
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
160 cleanup_traceback(tbe, exclude)
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
161 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
162 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
163 for line in lines:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
164 print>>efile, line,
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
165
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
166 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
167 "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
168 orig_tb = tb[:]
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
169 while tb:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
170 for rpcfile in exclude:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
171 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
172 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
173 else:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
174 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
175 del tb[0]
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
176 while tb:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
177 for rpcfile in exclude:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
178 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
179 break
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
180 else:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
181 break
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
182 del tb[-1]
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
183 if len(tb) == 0:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
184 # 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
185 tb[:] = orig_tb[:]
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
186 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
187 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
188 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
189 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
190 if nm == '?':
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
191 nm = "-toplevel-"
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
192 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
193 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
194 (fn, ln), {})
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
195 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
196
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
197 def flush_stdout():
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
198 try:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
199 if sys.stdout.softspace:
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
200 sys.stdout.softspace = 0
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
201 sys.stdout.write("\n")
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
202 except (AttributeError, EOFError):
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
203 pass
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
204
29281
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
205 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
206 """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
207
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
208 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
209 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
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 """
4992c60d422b Added a config-main General option to delete sys.exitfunc. The default
Kurt B. Kaiser <kbk@shore.net>
parents: 29254
diff changeset
212 if no_exitfunc:
44897
d9a60752558e There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents: 43512
diff changeset
213 try:
d9a60752558e There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents: 43512
diff changeset
214 del sys.exitfunc
d9a60752558e There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents: 43512
diff changeset
215 except AttributeError:
d9a60752558e There was an error on exit if no sys.exitfunc was defined. Issue 1647.
Kurt B. Kaiser <kbk@shore.net>
parents: 43512
diff changeset
216 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
217 sys.exit(0)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
218
29034
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
219 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
220
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
221 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
222 """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
223
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
224 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
225
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
226 """
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
227 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
228 try:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
229 raise
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
230 except SystemExit:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
231 raise
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
232 except EOFError:
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
233 global exit_now
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
234 exit_now = True
29445
e5d03360571d Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents: 29365
diff changeset
235 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
236 except:
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
237 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
238 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
239 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
240 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
241 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
242 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
243 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
244 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
245 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
246 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
247 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
248
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
249
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
250 class MyHandler(rpc.RPCHandler):
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
251
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
252 def handle(self):
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
253 """Override base method"""
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
254 executive = Executive(self)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
255 self.register("exec", executive)
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
256 sys.stdin = self.console = self.get_remote_proxy("stdin")
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
257 sys.stdout = self.get_remote_proxy("stdout")
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
258 sys.stderr = self.get_remote_proxy("stderr")
29582
ee14e5b06ed1 Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents: 29452
diff changeset
259 import IOBinding
ee14e5b06ed1 Idlefork patch #682347: convert Unicode strings from readline to
Martin v. Löwis <martin@v.loewis.de>
parents: 29452
diff changeset
260 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
261 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
262 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
263 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
264
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
265 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
266 "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
267 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
268
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
269 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
270 "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
271 global quitting
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
272 quitting = True
29445
e5d03360571d Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents: 29365
diff changeset
273 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
274
656493534cc7 1. Implement processing of user code in subprocess MainThread. Pass loop
Kurt B. Kaiser <kbk@shore.net>
parents: 28385
diff changeset
275 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
276 "interrupt awakened thread"
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
277 global quitting
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
278 quitting = True
29445
e5d03360571d Interrupt module has been folded into the thread module
Kurt B. Kaiser <kbk@shore.net>
parents: 29365
diff changeset
279 thread.interrupt_main()
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
280
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
281
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
282 class Executive(object):
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
283
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
284 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
285 self.rpchandler = rpchandler
25020
e41058845b79 1. Revert subprocess environment clearing, will restart subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 24559
diff changeset
286 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
287 self.calltip = CallTips.CallTips()
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 34945
diff changeset
288 self.autocomplete = AutoComplete.AutoComplete()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
289
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
290 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
291 global interruptable
28096
31008433c74f M rpc.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
292 try:
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
293 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
294 interruptable = True
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
295 try:
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
296 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
297 finally:
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
298 interruptable = False
28096
31008433c74f M rpc.py
Kurt B. Kaiser <kbk@shore.net>
parents: 27920
diff changeset
299 except:
29353
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
300 self.usr_exc_info = sys.exc_info()
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
301 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
302 exit()
29254
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
303 # even print a user code SystemExit exception, continue
be70b8477f43 1. Stake Freddy.
Kurt B. Kaiser <kbk@shore.net>
parents: 29156
diff changeset
304 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
305 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
306 if jit:
b1395014714a Modify the remote stack viewer to work in the threaded subprocess.
Kurt B. Kaiser <kbk@shore.net>
parents: 29281
diff changeset
307 self.rpchandler.interp.open_remote_stack_viewer()
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
308 else:
29076
ad84fe58ec2f 1. RemoteDebugger now runs user code in subprocess MainThread
Kurt B. Kaiser <kbk@shore.net>
parents: 29034
diff changeset
309 flush_stdout()
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
310
27920
8e7432cdf7d8 M NEWS.txt
Kurt B. Kaiser <kbk@shore.net>
parents: 26730
diff changeset
311 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
312 if interruptable:
37d8270ac8d9 Allow interrupt only when executing user code in subprocess
Kurt B. Kaiser <kbk@shore.net>
parents: 35891
diff changeset
313 thread.interrupt_main()
28385
b23434211d01 M PyShell.py
Kurt B. Kaiser <kbk@shore.net>
parents: 28282
diff changeset
314
23876
832f0501148b Polish RemoteDebugger code.
Kurt B. Kaiser <kbk@shore.net>
parents: 23547
diff changeset
315 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
316 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
317
41468f9353ce Shutdown subprocess debugger and associated Proxies/Adapters when closing
Kurt B. Kaiser <kbk@shore.net>
parents: 23876
diff changeset
318 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
319 "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
320 self.rpchandler.unregister(idb_adap_oid)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
321
25691
b39bd03a8dab M CallTips.py Add support for getting calltip from subprocess,
Kurt B. Kaiser <kbk@shore.net>
parents: 25020
diff changeset
322 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
323 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
324
35891
8fd46b660e66 Merge IDLE-syntax-branch r39668:41449 into trunk
Kurt B. Kaiser <kbk@shore.net>
parents: 34945
diff changeset
325 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
326 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
327
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
328 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
329 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
330 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
331 else:
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
332 return None
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
333 flist = None
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
334 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
335 flist = self.rpchandler.get_remote_proxy(flist_oid)
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
336 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
337 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
338 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
339 sys.last_value = val
23547
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
340 item = StackViewer.StackTreeItem(flist, tb)
b74afdd072eb GvR's rpc patch
Chui Tey <chui.tey@advdata.com.au>
parents:
diff changeset
341 return RemoteObjectBrowser.remote_object_tree_item(item)