src/eric7/DebugClients/Python/DebugUtilities.py

Sat, 31 Dec 2022 16:23:21 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 31 Dec 2022 16:23:21 +0100
branch
eric7
changeset 9653
e67609152c5e
parent 9571
0e2ab682dfa3
child 10321
4a017fdf316f
permissions
-rw-r--r--

Updated copyright for 2023.

4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
9653
e67609152c5e Updated copyright for 2023.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9571
diff changeset
3 # Copyright (c) 2015 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing utilities functions for the debug client.
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
5258
cfca063afa07 Optimizations in sending data in AsyncFile. Also thread save.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5178
diff changeset
10 import json
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
11 import os
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
12 import sys
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
13 import traceback
9473
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
14
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
15 from collections import namedtuple
3f23dbf37dbe Resorted the import statements using isort.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9221
diff changeset
16 from inspect import iscode, isframe
5258
cfca063afa07 Optimizations in sending data in AsyncFile. Also thread save.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents: 5178
diff changeset
17
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 #
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 # Taken from inspect.py of Python 3.4
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 #
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 # Create constants for the compiler flags in Include/code.h
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 # We try to get them from dis to avoid duplication, but fall
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25 # back to hardcoding so the dependency is optional
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 try:
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 from dis import COMPILER_FLAG_NAMES
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 except ImportError:
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 CO_OPTIMIZED, CO_NEWLOCALS = 0x1, 0x2
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 CO_VARARGS, CO_VARKEYWORDS = 0x4, 0x8
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31 CO_NESTED, CO_GENERATOR, CO_NOFREE = 0x10, 0x20, 0x40
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 else:
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 mod_dict = globals()
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 for k, v in COMPILER_FLAG_NAMES.items():
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 mod_dict["CO_" + v] = k
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
37 ArgInfo = namedtuple("ArgInfo", "args varargs keywords locals")
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 def getargvalues(frame):
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 """
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 Function to get information about arguments passed into a
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 particular frame.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
44
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
45 @param frame reference to a frame object to be processed
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
46 @type frame
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
47 @return tuple of four things, where 'args' is a list of the argument names,
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
48 'varargs' and 'varkw' are the names of the * and ** arguments or None
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 and 'locals' is the locals dictionary of the given frame.
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 @exception TypeError raised if the input parameter is not a frame object
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 """
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 if not isframe(frame):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
53 raise TypeError("{0!r} is not a frame object".format(frame))
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 args, varargs, kwonlyargs, varkw = _getfullargs(frame.f_code)
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 return ArgInfo(args + kwonlyargs, varargs, varkw, frame.f_locals)
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 def _getfullargs(co):
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 """
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 Protected function to get information about the arguments accepted
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 by a code object.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
63
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
64 @param co reference to a code object to be processed
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65 @type code
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 @return tuple of four things, where 'args' and 'kwonlyargs' are lists of
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 argument names, and 'varargs' and 'varkw' are the names of the
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 * and ** arguments or None.
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69 @exception TypeError raised if the input parameter is not a code object
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 """
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 if not iscode(co):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
72 raise TypeError("{0!r} is not a code object".format(co))
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
74 nargs = co.co_argcount
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
75 names = co.co_varnames
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
76 nkwargs = co.co_kwonlyargcount
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 args = list(names[:nargs])
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
78 kwonlyargs = list(names[nargs : nargs + nkwargs])
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 nargs += nkwargs
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 varargs = None
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82 if co.co_flags & CO_VARARGS:
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 varargs = co.co_varnames[nargs]
8217
385f60c94548 Applied some more code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8205
diff changeset
84 nargs += 1
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 varkw = None
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86 if co.co_flags & CO_VARKEYWORDS:
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 varkw = co.co_varnames[nargs]
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 return args, varargs, kwonlyargs, varkw
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
91 def formatargvalues(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
92 args,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
93 varargs,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
94 varkw,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
95 localsDict,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
96 formatarg=str,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
97 formatvarargs=lambda name: "*" + name,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
98 formatvarkw=lambda name: "**" + name,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
99 formatvalue=lambda value: "=" + repr(value),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
100 ):
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
101 """
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
102 Function to format an argument spec from the 4 values returned
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
103 by getargvalues.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
104
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
105 @param args list of argument names
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
106 @type list of str
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
107 @param varargs name of the variable arguments
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
108 @type str
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
109 @param varkw name of the keyword arguments
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
110 @type str
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
111 @param localsDict reference to the local variables dictionary
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
112 @type dict
7900
72b88fb20261 Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7895
diff changeset
113 @param formatarg argument formatting function
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
114 @type func
7900
72b88fb20261 Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7895
diff changeset
115 @param formatvarargs variable arguments formatting function
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
116 @type func
7900
72b88fb20261 Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7895
diff changeset
117 @param formatvarkw keyword arguments formatting function
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
118 @type func
7900
72b88fb20261 Corrected the use of '@keyparam' in the source documentation.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7895
diff changeset
119 @param formatvalue value formating functtion
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
120 @type func
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
121 @return formatted call signature
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
122 @rtype str
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
123 """
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
124 specs = []
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
125 for i in range(len(args)):
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
126 name = args[i]
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
127 specs.append(formatarg(name) + formatvalue(localsDict[name]))
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
128 if varargs:
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
129 specs.append(formatvarargs(varargs) + formatvalue(localsDict[varargs]))
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
130 if varkw:
5587
ea526b78ee6c Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 5389
diff changeset
131 specs.append(formatvarkw(varkw) + formatvalue(localsDict[varkw]))
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
132 argvalues = "(" + ", ".join(specs) + ")"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
133 if "__return__" in localsDict:
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
134 argvalues += " -> " + formatvalue(localsDict["__return__"])
4455
ca13a6f6c452 Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
135 return argvalues
4543
2e6a880670e9 Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4455
diff changeset
136
5129
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
137
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
138 def prepareJsonCommand(method, params):
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
139 """
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
140 Function to prepare a single command or response for transmission to
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
141 the IDE.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
142
5129
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
143 @param method command or response name to be sent
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
144 @type str
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
145 @param params dictionary of named parameters for the command or response
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
146 @type dict
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
147 @return prepared JSON command or response string
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
148 @rtype str
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
149 """
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
150 commandDict = {
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
151 "jsonrpc": "2.0",
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
152 "method": method,
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
153 "params": params,
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
154 }
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
155 return json.dumps(commandDict) + "\n"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
156
5129
e4ab234cf071 Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 4631
diff changeset
157
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
158 ###########################################################################
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
159 ## Things related to monkey patching below
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
160 ###########################################################################
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
161
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
162
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
163 PYTHON_NAMES = ["python", "pypy"]
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
164
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
165
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
166 def isWindowsPlatform():
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
167 """
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
168 Function to check, if this is a Windows platform.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
169
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
170 @return flag indicating Windows platform
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
171 @rtype bool
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
172 """
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
173 return sys.platform.startswith(("win", "cygwin"))
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
174
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
175
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
176 def isExecutable(program):
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
177 """
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
178 Function to check, if the given program is executable.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
179
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
180 @param program program path to be checked
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
181 @type str
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
182 @return flag indicating an executable program
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
183 @rtype bool
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
184 """
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
185 return os.access(os.path.abspath(program), os.X_OK)
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
186
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
187
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
188 def startsWithShebang(program):
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
189 """
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
190 Function to check, if the given program start with a Shebang line.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
191
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
192 @param program program path to be checked
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
193 @type str
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
194 @return flag indicating an existing and valid shebang line
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
195 @rtype bool
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
196 """
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
197 try:
7892
bd6b9e401166 DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7873
diff changeset
198 if os.path.exists(program):
bd6b9e401166 DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7873
diff changeset
199 with open(program) as f:
bd6b9e401166 DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7873
diff changeset
200 for line in f:
bd6b9e401166 DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7873
diff changeset
201 line = line.strip()
bd6b9e401166 DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7873
diff changeset
202 if line:
9500
5771348ded12 Corrected some code style issues and changed some suppressed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
203 return any(
5771348ded12 Corrected some code style issues and changed some suppressed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
204 line.startswith("#!/usr/bin/env {0}".format(name))
5771348ded12 Corrected some code style issues and changed some suppressed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
205 or (line.startswith("#!") and name in line)
5771348ded12 Corrected some code style issues and changed some suppressed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
206 for name in PYTHON_NAMES
5771348ded12 Corrected some code style issues and changed some suppressed code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9473
diff changeset
207 )
7892
bd6b9e401166 DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7873
diff changeset
208 else:
bd6b9e401166 DebugUtilities: fixed a little issue.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7873
diff changeset
209 return False
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
210 except UnicodeDecodeError:
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
211 return False
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
212 except Exception:
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
213 traceback.print_exc()
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
214 return False
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
215
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
216
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
217 def isPythonProgram(program):
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
218 """
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
219 Function to check, if the given program is a Python interpreter or
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
220 program.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
221
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
222 @param program program to be checked
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
223 @type str
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
224 @return flag indicating a Python interpreter or program
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
225 @rtype bool
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
226 """
7421
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7420
diff changeset
227 if not program:
4a9900aef04e Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7420
diff changeset
228 return False
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
229
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
230 prog = os.path.basename(program).lower()
8221
0572a215bd2f Applied some more code simplifications suggested by the new Simplify checker (Y110, Y111: use any() or all()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8217
diff changeset
231 if any(pyname in prog for pyname in PYTHON_NAMES):
0572a215bd2f Applied some more code simplifications suggested by the new Simplify checker (Y110, Y111: use any() or all()).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8217
diff changeset
232 return True
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
233
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
234 return (
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
235 not isWindowsPlatform() and isExecutable(program) and startsWithShebang(program)
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
236 )
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
237
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
238
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
239 def removeQuotesFromArgs(args):
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
240 """
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
241 Function to remove quotes from the arguments list.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
242
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
243 @param args list of arguments
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
244 @type list of str
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
245 @return list of unquoted strings
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
246 @rtype list of str
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
247 """
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
248 if isWindowsPlatform():
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
249 newArgs = []
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
250 for x in args:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
251 if len(x) > 1 and x.startswith('"') and x.endswith('"'):
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
252 x = x[1:-1]
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
253 newArgs.append(x)
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
254 return newArgs
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
255 else:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
256 return args
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
257
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
258
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
259 def quoteArgs(args):
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
260 """
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
261 Function to quote the given list of arguments.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
262
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
263 @param args list of arguments to be quoted
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
264 @type list of str
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
265 @return list of quoted arguments
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
266 @rtype list of str
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
267 """
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
268 if isWindowsPlatform():
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
269 quotedArgs = []
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
270 for x in args:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
271 if x.startswith('"') and x.endswith('"'):
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
272 quotedArgs.append(x)
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
273 else:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
274 if " " in x:
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
275 x = x.replace('"', '\\"')
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
276 quotedArgs.append('"{0}"'.format(x))
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
277 else:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
278 quotedArgs.append(x)
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
279 return quotedArgs
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
280 else:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
281 return args
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
282
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
283
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
284 def patchArguments(debugClient, arguments, noRedirect=False):
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
285 """
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
286 Function to patch the arguments given to start a program in order to
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
287 execute it in our debugger.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
288
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
289 @param debugClient reference to the debug client object
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
290 @type DebugClient
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
291 @param arguments list of program arguments
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
292 @type list of str
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
293 @param noRedirect flag indicating to not redirect stdin and stdout
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
294 @type bool
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
295 @return modified argument list
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
296 @rtype list of str
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
297 """
9571
0e2ab682dfa3 Fixed an issue in the multi process debugger causing a corrupted command line for an external non-Python program (e.g. if call via subprocess.Popen) (see issue466).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9500
diff changeset
298 if not isPythonProgram(arguments[0]):
0e2ab682dfa3 Fixed an issue in the multi process debugger causing a corrupted command line for an external non-Python program (e.g. if call via subprocess.Popen) (see issue466).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9500
diff changeset
299 # it is not a Python program
0e2ab682dfa3 Fixed an issue in the multi process debugger causing a corrupted command line for an external non-Python program (e.g. if call via subprocess.Popen) (see issue466).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9500
diff changeset
300 return arguments
0e2ab682dfa3 Fixed an issue in the multi process debugger causing a corrupted command line for an external non-Python program (e.g. if call via subprocess.Popen) (see issue466).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9500
diff changeset
301
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
302 debugClientScript = os.path.join(os.path.dirname(__file__), "DebugClient.py")
7873
cb2badbdf26c MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7871
diff changeset
303 if debugClientScript in arguments:
cb2badbdf26c MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7871
diff changeset
304 # it is already patched
cb2badbdf26c MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7871
diff changeset
305 return arguments
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
306
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
307 args = list(arguments[:]) # create a copy of the arguments list
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
308 args = removeQuotesFromArgs(args)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
309
7420
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
310 # support for shebang line
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
311 program = os.path.basename(args[0]).lower()
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
312 for pyname in PYTHON_NAMES:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
313 if pyname in program:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
314 break
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
315 else:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
316 if (not isWindowsPlatform() and startsWithShebang(args[0])) or (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
317 isWindowsPlatform() and args[0].lower().endswith(".py")
8228
772103b14c18 Applied some more code simplifications suggested by the new Simplify checker (Y114: use logical or for multiple if).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8221
diff changeset
318 ):
772103b14c18 Applied some more code simplifications suggested by the new Simplify checker (Y114: use logical or for multiple if).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8221
diff changeset
319 # 1. insert our interpreter as first argument if not Windows
772103b14c18 Applied some more code simplifications suggested by the new Simplify checker (Y114: use logical or for multiple if).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8221
diff changeset
320 # 2. insert our interpreter as first argument if on Windows and
772103b14c18 Applied some more code simplifications suggested by the new Simplify checker (Y114: use logical or for multiple if).
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8221
diff changeset
321 # it is a Python script
7873
cb2badbdf26c MultiProcessDebugExtension: commented out the support for os.exec, os.spawn and os.posix_spawn.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7871
diff changeset
322 args.insert(0, sys.executable)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
323
7420
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
324 # extract list of interpreter arguments, i.e. all arguments before the
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
325 # first one not starting with '-'.
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
326 interpreter = args.pop(0)
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
327 interpreterArgs = []
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
328 hasCode = False
7895
554fdb07c856 Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7892
diff changeset
329 hasScriptModule = False
7420
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
330 while args:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
331 if args[0].startswith("-"):
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
332 if args[0] in ("-W", "-X"):
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
333 # take two elements off the list
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
334 interpreterArgs.append(args.pop(0))
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
335 interpreterArgs.append(args.pop(0))
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
336 elif args[0] == "-c":
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
337 # -c indicates code to be executed and ends the
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
338 # arguments list
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
339 args.pop(0)
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
340 hasCode = True
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
341 break
7895
554fdb07c856 Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7892
diff changeset
342 elif args[0] == "-m":
554fdb07c856 Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7892
diff changeset
343 # -m indicates a module to be executed as a script
554fdb07c856 Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7892
diff changeset
344 # and ends the arguments list
554fdb07c856 Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7892
diff changeset
345 args.pop(0)
554fdb07c856 Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7892
diff changeset
346 hasScriptModule = True
554fdb07c856 Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7892
diff changeset
347 break
7420
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
348 else:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
349 interpreterArgs.append(args.pop(0))
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
350 else:
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
351 break
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
352
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
353 (
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
354 wd,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
355 host,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
356 port,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
357 exceptions,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
358 tracePython,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
359 redirect,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
360 noencoding,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
361 ) = debugClient.startOptions[:7]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
362
7420
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
363 modifiedArguments = [interpreter]
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
364 modifiedArguments.extend(interpreterArgs)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
365 modifiedArguments.extend(
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
366 [
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
367 debugClientScript,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
368 "-h",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
369 host,
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
370 "-p",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
371 str(port),
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
372 "--no-passive",
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
373 ]
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
374 )
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
375
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
376 if wd:
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
377 modifiedArguments.extend(["-w", wd])
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
378 if not exceptions:
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
379 modifiedArguments.append("-e")
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
380 if tracePython:
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
381 modifiedArguments.append("-t")
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
382 if noRedirect or not redirect:
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
383 modifiedArguments.append("-n")
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
384 if noencoding:
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
385 modifiedArguments.append("--no-encoding")
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
386 if debugClient.multiprocessSupport:
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
387 modifiedArguments.append("--multiprocess")
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
388 if hasCode:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
389 modifiedArguments.append("--code")
7895
554fdb07c856 Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7892
diff changeset
390 modifiedArguments.append(args.pop(0))
554fdb07c856 Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7892
diff changeset
391 if hasScriptModule:
554fdb07c856 Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7892
diff changeset
392 modifiedArguments.append("--module")
554fdb07c856 Debugger: added support for the -m option to debug a module as a script.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7892
diff changeset
393 modifiedArguments.append(args.pop(0))
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
394 modifiedArguments.append("--")
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
395 # end the arguments for DebugClient
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
396
7419
9c1163735448 Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7412
diff changeset
397 # append the arguments for the program to be debugged
7420
0d596bb4a60d Added multi process support for programs with a shebang line.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7419
diff changeset
398 modifiedArguments.extend(args)
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
399 modifiedArguments = quoteArgs(modifiedArguments)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
400
7412
0a995393d2ba Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7360
diff changeset
401 return modifiedArguments
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
402
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
403
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
404 def stringToArgumentsWindows(args):
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
405 """
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
406 Function to prepare a string of arguments for Windows platform.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
407
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
408 @param args list of command arguments
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
409 @type str
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
410 @return list of command arguments
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
411 @rtype list of str
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
412 @exception RuntimeError raised to indicate an illegal arguments parsing
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
413 condition
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
414 """
8921
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
415 # see http://msdn.microsoft.com/en-us/library/a1y7w461.aspx
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
416 result = []
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
417
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
418 DEFAULT = 0
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
419 ARG = 1
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
420 IN_DOUBLE_QUOTE = 2
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
421
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
422 state = DEFAULT
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
423 backslashes = 0
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
424 buf = ""
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
425
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
426 argsLen = len(args)
8925
8375eb895f70 Fixed some code style issues.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8921
diff changeset
427 i = 0
8921
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
428 while i < argsLen:
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
429 ch = args[i]
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
430 if ch == "\\":
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
431 backslashes += 1
8921
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
432 i += 1
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
433 continue
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
434 elif backslashes != 0:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
435 if ch == '"':
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
436 while backslashes >= 2:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
437 backslashes -= 2
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
438 buf += "\\"
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
439 if backslashes == 1:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
440 if state == DEFAULT:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
441 state = ARG
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
442
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
443 buf += '"'
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
444 backslashes = 0
8921
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
445 i += 1
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
446 continue
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
447 else:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
448 # false alarm, treat passed backslashes literally...
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
449 if state == DEFAULT:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
450 state = ARG
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
451
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
452 while backslashes > 0:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
453 backslashes -= 1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
454 buf += "\\"
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
455
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
456 if ch in (" ", "\t"):
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
457 if state == DEFAULT:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
458 # skip
8921
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
459 i += 1
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
460 continue
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
461 elif state == ARG:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
462 state = DEFAULT
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
463 result.append(buf)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
464 buf = ""
8921
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
465 i += 1
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
466 continue
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
467
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
468 if state not in (DEFAULT, ARG, IN_DOUBLE_QUOTE):
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
469 raise RuntimeError("Illegal condition")
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
470
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
471 if state == IN_DOUBLE_QUOTE:
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
472 if ch == '"':
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
473 if i + 1 < argsLen and args[i + 1] == '"':
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
474 # Undocumented feature in Windows:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
475 # Two consecutive double quotes inside a double-quoted
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
476 # argument are interpreted as a single double quote.
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
477 buf += '"'
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
478 i += 1
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
479 elif len(buf) == 0:
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
480 result.append('""')
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
481 state = DEFAULT
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
482 else:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
483 state = ARG
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
484 else:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
485 buf += ch
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
486
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
487 else:
8205
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
488 if ch == '"':
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
489 state = IN_DOUBLE_QUOTE
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
490 else:
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
491 state = ARG
4a0f1f896341 Applied some code simplifications suggested by the new Simplify checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7923
diff changeset
492 buf += ch
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
493
8921
8459c7e1b904 Debug Client
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 8881
diff changeset
494 i += 1
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
495
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
496 if len(buf) > 0 or state != DEFAULT:
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
497 result.append(buf)
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
498
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
499 return result
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
500
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
501
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
502 def patchArgumentStringWindows(debugClient, argStr):
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
503 """
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
504 Function to patch an argument string for Windows.
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
505
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
506 @param debugClient reference to the debug client object
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
507 @type DebugClient
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
508 @param argStr argument string
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
509 @type str
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
510 @return patched argument string
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
511 @rtype str
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
512 """
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
513 args = stringToArgumentsWindows(argStr)
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
514 if not args or not isPythonProgram(args[0]):
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
515 return argStr
9221
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
516
bf71ee032bb4 Reformatted the source code using the 'Black' utility.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 9209
diff changeset
517 argStr = " ".join(patchArguments(debugClient, args))
7871
eb65864ca038 Added some more process creation function overrides.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 7646
diff changeset
518 return argStr

eric ide

mercurial