ยปCore Development>Code coverage>Lib/idlelib/ObjectBrowser.py

Python code coverage for Lib/idlelib/ObjectBrowser.py

#countcontent
1n/a# XXX TO DO:
2n/a# - popup menu
3n/a# - support partial or total redisplay
4n/a# - more doc strings
5n/a# - tooltips
6n/a
7n/a# object browser
8n/a
9n/a# XXX TO DO:
10n/a# - for classes/modules, add "open source" to object browser
11n/a
12n/afrom idlelib.TreeWidget import TreeItem, TreeNode, ScrolledCanvas
13n/a
14n/afrom reprlib import Repr
15n/a
16n/amyrepr = Repr()
17n/amyrepr.maxstring = 100
18n/amyrepr.maxother = 100
19n/a
20n/aclass ObjectTreeItem(TreeItem):
21n/a def __init__(self, labeltext, object, setfunction=None):
22n/a self.labeltext = labeltext
23n/a self.object = object
24n/a self.setfunction = setfunction
25n/a def GetLabelText(self):
26n/a return self.labeltext
27n/a def GetText(self):
28n/a return myrepr.repr(self.object)
29n/a def GetIconName(self):
30n/a if not self.IsExpandable():
31n/a return "python"
32n/a def IsEditable(self):
33n/a return self.setfunction is not None
34n/a def SetText(self, text):
35n/a try:
36n/a value = eval(text)
37n/a self.setfunction(value)
38n/a except:
39n/a pass
40n/a else:
41n/a self.object = value
42n/a def IsExpandable(self):
43n/a return not not dir(self.object)
44n/a def GetSubList(self):
45n/a keys = dir(self.object)
46n/a sublist = []
47n/a for key in keys:
48n/a try:
49n/a value = getattr(self.object, key)
50n/a except AttributeError:
51n/a continue
52n/a item = make_objecttreeitem(
53n/a str(key) + " =",
54n/a value,
55n/a lambda value, key=key, object=self.object:
56n/a setattr(object, key, value))
57n/a sublist.append(item)
58n/a return sublist
59n/a
60n/aclass ClassTreeItem(ObjectTreeItem):
61n/a def IsExpandable(self):
62n/a return True
63n/a def GetSubList(self):
64n/a sublist = ObjectTreeItem.GetSubList(self)
65n/a if len(self.object.__bases__) == 1:
66n/a item = make_objecttreeitem("__bases__[0] =",
67n/a self.object.__bases__[0])
68n/a else:
69n/a item = make_objecttreeitem("__bases__ =", self.object.__bases__)
70n/a sublist.insert(0, item)
71n/a return sublist
72n/a
73n/aclass AtomicObjectTreeItem(ObjectTreeItem):
74n/a def IsExpandable(self):
75n/a return 0
76n/a
77n/aclass SequenceTreeItem(ObjectTreeItem):
78n/a def IsExpandable(self):
79n/a return len(self.object) > 0
80n/a def keys(self):
81n/a return range(len(self.object))
82n/a def GetSubList(self):
83n/a sublist = []
84n/a for key in self.keys():
85n/a try:
86n/a value = self.object[key]
87n/a except KeyError:
88n/a continue
89n/a def setfunction(value, key=key, object=self.object):
90n/a object[key] = value
91n/a item = make_objecttreeitem("%r:" % (key,), value, setfunction)
92n/a sublist.append(item)
93n/a return sublist
94n/a
95n/aclass DictTreeItem(SequenceTreeItem):
96n/a def keys(self):
97n/a keys = list(self.object.keys())
98n/a try:
99n/a keys.sort()
100n/a except:
101n/a pass
102n/a return keys
103n/a
104n/adispatch = {
105n/a int: AtomicObjectTreeItem,
106n/a float: AtomicObjectTreeItem,
107n/a str: AtomicObjectTreeItem,
108n/a tuple: SequenceTreeItem,
109n/a list: SequenceTreeItem,
110n/a dict: DictTreeItem,
111n/a type: ClassTreeItem,
112n/a}
113n/a
114n/adef make_objecttreeitem(labeltext, object, setfunction=None):
115n/a t = type(object)
116n/a if t in dispatch:
117n/a c = dispatch[t]
118n/a else:
119n/a c = ObjectTreeItem
120n/a return c(labeltext, object, setfunction)
121n/a
122n/a# Test script
123n/a
124n/adef _test():
125n/a import sys
126n/a from tkinter import Tk
127n/a root = Tk()
128n/a root.configure(bd=0, bg="yellow")
129n/a root.focus_set()
130n/a sc = ScrolledCanvas(root, bg="white", highlightthickness=0, takefocus=1)
131n/a sc.frame.pack(expand=1, fill="both")
132n/a item = make_objecttreeitem("sys", sys)
133n/a node = TreeNode(sc.canvas, None, item)
134n/a node.update()
135n/a root.mainloop()
136n/a
137n/aif __name__ == '__main__':
138n/a _test()