Mercurial > cpython-lru_cache-weakref
annotate Lib/idlelib/ObjectBrowser.py @ 80661:94de77bd0b4b 2.7
Issue #16194: document imp.load_dynamic problems
when read several extension modules from the same binary object file.
| author | Andrew Svetlov <andrew.svetlov@gmail.com> |
|---|---|
| date | Thu, 29 Nov 2012 19:51:28 +0200 |
| parents | b36cb4602e21 |
| children |
| rev | line source |
|---|---|
| 13975 | 1 # XXX TO DO: |
| 2 # - popup menu | |
| 3 # - support partial or total redisplay | |
| 4 # - more doc strings | |
| 5 # - tooltips | |
| 6 | |
| 7 # object browser | |
| 8 | |
| 9 # XXX TO DO: | |
| 10 # - for classes/modules, add "open source" to object browser | |
| 11 | |
|
63585
df378e44ba9a
Merged revisions 79576-79578 via svnmerge from
Ezio Melotti <ezio.melotti@gmail.com>
parents:
47221
diff
changeset
|
12 from idlelib.TreeWidget import TreeItem, TreeNode, ScrolledCanvas |
| 13975 | 13 |
|
47221
9fbc41abdd4b
Revert the renaming of repr to reprlib.
Brett Cannon <bcannon@gmail.com>
parents:
47183
diff
changeset
|
14 from repr import Repr |
| 13975 | 15 |
| 16 myrepr = Repr() | |
| 17 myrepr.maxstring = 100 | |
| 18 myrepr.maxother = 100 | |
| 19 | |
| 20 class ObjectTreeItem(TreeItem): | |
| 21 def __init__(self, labeltext, object, setfunction=None): | |
| 22 self.labeltext = labeltext | |
| 23 self.object = object | |
| 24 self.setfunction = setfunction | |
| 25 def GetLabelText(self): | |
| 26 return self.labeltext | |
| 27 def GetText(self): | |
| 28 return myrepr.repr(self.object) | |
| 29 def GetIconName(self): | |
| 30 if not self.IsExpandable(): | |
| 31 return "python" | |
| 32 def IsEditable(self): | |
| 33 return self.setfunction is not None | |
| 34 def SetText(self, text): | |
| 35 try: | |
| 36 value = eval(text) | |
| 37 self.setfunction(value) | |
| 38 except: | |
| 39 pass | |
| 40 else: | |
| 41 self.object = value | |
| 42 def IsExpandable(self): | |
| 43 return not not dir(self.object) | |
| 44 def GetSubList(self): | |
| 45 keys = dir(self.object) | |
| 46 sublist = [] | |
| 47 for key in keys: | |
| 48 try: | |
| 49 value = getattr(self.object, key) | |
| 50 except AttributeError: | |
| 51 continue | |
| 52 item = make_objecttreeitem( | |
| 53 str(key) + " =", | |
| 54 value, | |
| 55 lambda value, key=key, object=self.object: | |
| 56 setattr(object, key, value)) | |
| 57 sublist.append(item) | |
| 58 return sublist | |
| 59 | |
| 60 class InstanceTreeItem(ObjectTreeItem): | |
| 61 def IsExpandable(self): | |
| 25296 | 62 return True |
| 13975 | 63 def GetSubList(self): |
| 64 sublist = ObjectTreeItem.GetSubList(self) | |
| 65 sublist.insert(0, | |
| 66 make_objecttreeitem("__class__ =", self.object.__class__)) | |
| 67 return sublist | |
| 68 | |
| 69 class ClassTreeItem(ObjectTreeItem): | |
| 70 def IsExpandable(self): | |
| 25296 | 71 return True |
| 13975 | 72 def GetSubList(self): |
| 73 sublist = ObjectTreeItem.GetSubList(self) | |
| 74 if len(self.object.__bases__) == 1: | |
| 75 item = make_objecttreeitem("__bases__[0] =", | |
| 76 self.object.__bases__[0]) | |
| 77 else: | |
| 78 item = make_objecttreeitem("__bases__ =", self.object.__bases__) | |
| 79 sublist.insert(0, item) | |
| 80 return sublist | |
| 81 | |
| 82 class AtomicObjectTreeItem(ObjectTreeItem): | |
| 83 def IsExpandable(self): | |
| 84 return 0 | |
| 85 | |
| 86 class SequenceTreeItem(ObjectTreeItem): | |
| 87 def IsExpandable(self): | |
| 88 return len(self.object) > 0 | |
| 89 def keys(self): | |
| 90 return range(len(self.object)) | |
| 91 def GetSubList(self): | |
| 92 sublist = [] | |
| 93 for key in self.keys(): | |
| 94 try: | |
| 95 value = self.object[key] | |
| 96 except KeyError: | |
| 97 continue | |
| 98 def setfunction(value, key=key, object=self.object): | |
| 99 object[key] = value | |
|
31515
71a294bd7950
Replace backticks with repr() or "%r"
Walter Dörwald <walter@livinglogic.de>
parents:
25296
diff
changeset
|
100 item = make_objecttreeitem("%r:" % (key,), value, setfunction) |
| 13975 | 101 sublist.append(item) |
| 102 return sublist | |
| 103 | |
| 104 class DictTreeItem(SequenceTreeItem): | |
| 105 def keys(self): | |
| 106 keys = self.object.keys() | |
| 107 try: | |
| 108 keys.sort() | |
| 109 except: | |
| 110 pass | |
| 111 return keys | |
| 112 | |
| 113 from types import * | |
| 114 | |
| 115 dispatch = { | |
| 116 IntType: AtomicObjectTreeItem, | |
| 117 LongType: AtomicObjectTreeItem, | |
| 118 FloatType: AtomicObjectTreeItem, | |
| 119 StringType: AtomicObjectTreeItem, | |
| 120 TupleType: SequenceTreeItem, | |
| 121 ListType: SequenceTreeItem, | |
| 122 DictType: DictTreeItem, | |
| 123 InstanceType: InstanceTreeItem, | |
| 124 ClassType: ClassTreeItem, | |
| 125 } | |
| 126 | |
| 127 def make_objecttreeitem(labeltext, object, setfunction=None): | |
| 128 t = type(object) | |
|
56436
684960fb1cbf
replace has_key with 'in' operator
Benjamin Peterson <benjamin@python.org>
parents:
47221
diff
changeset
|
129 if t in dispatch: |
| 13975 | 130 c = dispatch[t] |
| 131 else: | |
| 132 c = ObjectTreeItem | |
| 133 return c(labeltext, object, setfunction) | |
| 134 | |
| 135 # Test script | |
| 136 | |
|
18550
09a5fe2a7426
py-cvs-rel2_1 (Rev 1.3) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
13975
diff
changeset
|
137 def _test(): |
| 13975 | 138 import sys |
|
47183
b53604fad54b
Tkinter rename reversal: remove tkinter package, adapt imports and docs.
Georg Brandl <georg@python.org>
parents:
47101
diff
changeset
|
139 from Tkinter import Tk |
|
18550
09a5fe2a7426
py-cvs-rel2_1 (Rev 1.3) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
13975
diff
changeset
|
140 root = Tk() |
| 13975 | 141 root.configure(bd=0, bg="yellow") |
| 142 root.focus_set() | |
| 143 sc = ScrolledCanvas(root, bg="white", highlightthickness=0, takefocus=1) | |
| 144 sc.frame.pack(expand=1, fill="both") | |
| 145 item = make_objecttreeitem("sys", sys) | |
| 146 node = TreeNode(sc.canvas, None, item) | |
|
18550
09a5fe2a7426
py-cvs-rel2_1 (Rev 1.3) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
13975
diff
changeset
|
147 node.update() |
|
09a5fe2a7426
py-cvs-rel2_1 (Rev 1.3) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
13975
diff
changeset
|
148 root.mainloop() |
| 13975 | 149 |
| 150 if __name__ == '__main__': | |
|
18550
09a5fe2a7426
py-cvs-rel2_1 (Rev 1.3) merge
Kurt B. Kaiser <kbk@shore.net>
parents:
13975
diff
changeset
|
151 _test() |
