Fri, 14 Feb 2020 19:52:37 +0100
Continued with the multiprocess debugger.
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 | |
7360
9190402e4505
Updated copyright for 2020.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
6942
diff
changeset
|
3 | # Copyright (c) 2015 - 2020 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 |
5258
cfca063afa07
Optimizations in sending data in AsyncFile. Also thread save.
T.Rzepka <Tobias.Rzepka@gmail.com>
parents:
5178
diff
changeset
|
12 | |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
13 | # |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
14 | # 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
|
15 | # |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
16 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
17 | from collections import namedtuple |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
18 | from inspect import iscode, isframe |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
19 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
20 | # 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
|
21 | # 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
|
22 | # 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
|
23 | try: |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
24 | 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
|
25 | 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
|
26 | 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
|
27 | 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
|
28 | 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
|
29 | else: |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
30 | 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
|
31 | 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
|
32 | 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
|
33 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
34 | ArgInfo = namedtuple('ArgInfo', 'args varargs keywords locals') |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
35 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
36 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
37 | 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
|
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 | 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
|
40 | particular 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 | @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
|
43 | @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
|
44 | @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
|
45 | '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
|
46 | 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
|
47 | @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
|
48 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
49 | if not isframe(frame): |
4543
2e6a880670e9
Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4455
diff
changeset
|
50 | 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
|
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 | 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
|
53 | 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
|
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 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
56 | 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
|
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 | 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
|
59 | by 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
|
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 | @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
|
62 | @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
|
63 | @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
|
64 | 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
|
65 | * 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
|
66 | @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
|
67 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
68 | if not iscode(co): |
4543
2e6a880670e9
Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4455
diff
changeset
|
69 | 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
|
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 | 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
|
72 | 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
|
73 | 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
|
74 | args = list(names[:nargs]) |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
75 | kwonlyargs = list(names[nargs: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
|
76 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
77 | 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
|
78 | 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
|
79 | 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
|
80 | varargs = 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
|
81 | nargs = nargs + 1 |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
82 | 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
|
83 | 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
|
84 | 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
|
85 | 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
|
86 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
87 | |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5389
diff
changeset
|
88 | def formatargvalues(args, varargs, varkw, localsDict, |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
89 | formatarg=str, |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
90 | formatvarargs=lambda name: '*' + name, |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
91 | formatvarkw=lambda name: '**' + name, |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
92 | formatvalue=lambda value: '=' + repr(value)): |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
93 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
94 | 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
|
95 | by getargvalues. |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
96 | |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
97 | @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
|
98 | @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
|
99 | @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
|
100 | @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
|
101 | @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
|
102 | @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
|
103 | @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
|
104 | @type dict |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
105 | @keyparam formatarg argument formatting function |
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 func |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
107 | @keyparam formatvarargs variable arguments formatting function |
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 func |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
109 | @keyparam formatvarkw keyword arguments formatting function |
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 func |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
111 | @keyparam formatvalue value formating functtion |
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 func |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
113 | @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
|
114 | @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
|
115 | """ |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
116 | specs = [] |
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
117 | 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
|
118 | 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
|
119 | 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
|
120 | 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
|
121 | 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
|
122 | 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
|
123 | specs.append(formatvarkw(varkw) + formatvalue(localsDict[varkw])) |
4455
ca13a6f6c452
Prepared the Python3 debug client for some obsolescences of the inspect.py module.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff
changeset
|
124 | argvalues = '(' + ', '.join(specs) + ')' |
5587
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5389
diff
changeset
|
125 | if '__return__' in localsDict: |
ea526b78ee6c
Started to fix code style issues detected by the extended style checker.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
5389
diff
changeset
|
126 | 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
|
127 | return argvalues |
4543
2e6a880670e9
Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4455
diff
changeset
|
128 | |
5129
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
129 | |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
130 | 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
|
131 | """ |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
132 | 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
|
133 | the IDE. |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
134 | |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
135 | @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
|
136 | @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
|
137 | @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
|
138 | @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
|
139 | @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
|
140 | @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
|
141 | """ |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
142 | commandDict = { |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
143 | "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
|
144 | "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
|
145 | "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
|
146 | } |
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 json.dumps(commandDict) + '\n' |
e4ab234cf071
Cleaned up the modified code for the modernized debugger interface (Python3 variant).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4631
diff
changeset
|
148 | |
7412
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
149 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
150 | def isPythonProgram(program, arguments): |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
151 | """ |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
152 | Function to check, if program is a Python interpreter and |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
153 | arguments don't include '-m'. |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
154 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
155 | @param program program to be executed |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
156 | @type str |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
157 | @param arguments list of command line arguments |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
158 | @type list of str |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
159 | @return flag indicating a python program and a tuple containing the |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
160 | interpreter to be used and the arguments |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
161 | @rtype tuple of (bool, tuple of (str, list of str)) |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
162 | """ |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
163 | prog = program.lower() |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
164 | ok = ( |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
165 | ("python" in prog and arguments[0] != '-m') or |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
166 | "pypy" in prog |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
167 | ) |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
168 | return ok, (program, arguments[:]) |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
169 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
170 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
171 | def patchArguments(debugClient, arguments, multiprocessSupport, |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
172 | noRedirect=False): |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
173 | """ |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
174 | 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
|
175 | execute it in our debugger. |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
176 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
177 | @param debugClient reference to the debug client object |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
178 | @type DebugClient |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
179 | @param arguments list of program arguments |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
180 | @type list of str |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
181 | @param multiprocessSupport flag indicating multi process debug support |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
182 | @type bool |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
183 | @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
|
184 | @type bool |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
185 | @return modified argument list |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
186 | @rtype list of str |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
187 | """ |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
188 | (wd, host, port, exceptions, tracePython, redirect, noencoding |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
189 | ) = debugClient.startOptions[:7] |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
190 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
191 | modifiedArguments = [ |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
192 | os.path.join(os.path.dirname(__file__), "DebugClient.py"), |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
193 | "-h", host, |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
194 | "-p", str(port), |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
195 | "--no-passive", |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
196 | ] |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
197 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
198 | if wd: |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
199 | modifiedArguments.extend(["-w", wd]) |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
200 | if not exceptions: |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
201 | modifiedArguments.append("-e") |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
202 | if tracePython: |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
203 | modifiedArguments.append("-t") |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
204 | if noRedirect or not redirect: |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
205 | modifiedArguments.append("-n") |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
206 | if noencoding: |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
207 | modifiedArguments.append("--no-encoding") |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
208 | if multiprocessSupport: |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
209 | modifiedArguments.append("--multiprocess") |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
210 | modifiedArguments.append("--") |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
211 | # end the arguments for DebugClient |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
212 | modifiedArguments.extend(arguments) |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
213 | |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
214 | return modifiedArguments |
0a995393d2ba
Continued with the multiprocess debugger.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
7360
diff
changeset
|
215 | |
4543
2e6a880670e9
Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4455
diff
changeset
|
216 | # |
2e6a880670e9
Fixed a few code style issues (forgotten future imports, copyrights,...).
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
4455
diff
changeset
|
217 | # eflag: noqa = M702 |