404

[ Avaa Bypassed ]




Upload:

Command:

elspacio@18.119.163.163: ~ $
# XXX TO DO:
# - popup menu
# - support partial or total redisplay
# - more doc strings
# - tooltips

# object browser

# XXX TO DO:
# - for classes/modules, add "open source" to object browser
from reprlib import Repr

from idlelib.tree import TreeItem, TreeNode, ScrolledCanvas

myrepr = Repr()
myrepr.maxstring = 100
myrepr.maxother = 100

class ObjectTreeItem(TreeItem):
    def __init__(self, labeltext, object, setfunction=None):
        self.labeltext = labeltext
        self.object = object
        self.setfunction = setfunction
    def GetLabelText(self):
        return self.labeltext
    def GetText(self):
        return myrepr.repr(self.object)
    def GetIconName(self):
        if not self.IsExpandable():
            return "python"
    def IsEditable(self):
        return self.setfunction is not None
    def SetText(self, text):
        try:
            value = eval(text)
            self.setfunction(value)
        except:
            pass
        else:
            self.object = value
    def IsExpandable(self):
        return not not dir(self.object)
    def GetSubList(self):
        keys = dir(self.object)
        sublist = []
        for key in keys:
            try:
                value = getattr(self.object, key)
            except AttributeError:
                continue
            item = make_objecttreeitem(
                str(key) + " =",
                value,
                lambda value, key=key, object=self.object:
                    setattr(object, key, value))
            sublist.append(item)
        return sublist

class ClassTreeItem(ObjectTreeItem):
    def IsExpandable(self):
        return True
    def GetSubList(self):
        sublist = ObjectTreeItem.GetSubList(self)
        if len(self.object.__bases__) == 1:
            item = make_objecttreeitem("__bases__[0] =",
                self.object.__bases__[0])
        else:
            item = make_objecttreeitem("__bases__ =", self.object.__bases__)
        sublist.insert(0, item)
        return sublist

class AtomicObjectTreeItem(ObjectTreeItem):
    def IsExpandable(self):
        return False

class SequenceTreeItem(ObjectTreeItem):
    def IsExpandable(self):
        return len(self.object) > 0
    def keys(self):
        return range(len(self.object))
    def GetSubList(self):
        sublist = []
        for key in self.keys():
            try:
                value = self.object[key]
            except KeyError:
                continue
            def setfunction(value, key=key, object=self.object):
                object[key] = value
            item = make_objecttreeitem("%r:" % (key,), value, setfunction)
            sublist.append(item)
        return sublist

class DictTreeItem(SequenceTreeItem):
    def keys(self):
        keys = list(self.object.keys())
        try:
            keys.sort()
        except:
            pass
        return keys

dispatch = {
    int: AtomicObjectTreeItem,
    float: AtomicObjectTreeItem,
    str: AtomicObjectTreeItem,
    tuple: SequenceTreeItem,
    list: SequenceTreeItem,
    dict: DictTreeItem,
    type: ClassTreeItem,
}

def make_objecttreeitem(labeltext, object, setfunction=None):
    t = type(object)
    if t in dispatch:
        c = dispatch[t]
    else:
        c = ObjectTreeItem
    return c(labeltext, object, setfunction)


def _object_browser(parent):  # htest #
    import sys
    from tkinter import Toplevel
    top = Toplevel(parent)
    top.title("Test debug object browser")
    x, y = map(int, parent.geometry().split('+')[1:])
    top.geometry("+%d+%d" % (x + 100, y + 175))
    top.configure(bd=0, bg="yellow")
    top.focus_set()
    sc = ScrolledCanvas(top, bg="white", highlightthickness=0, takefocus=1)
    sc.frame.pack(expand=1, fill="both")
    item = make_objecttreeitem("sys", sys)
    node = TreeNode(sc.canvas, None, item)
    node.update()

if __name__ == '__main__':
    from unittest import main
    main('idlelib.idle_test.test_debugobj', verbosity=2, exit=False)

    from idlelib.idle_test.htest import run
    run(_object_browser)

Filemanager

Name Type Size Permission Actions
Icons Folder 0755
__pycache__ Folder 0755
idle_test Folder 0755
CREDITS.txt File 1.82 KB 0644
ChangeLog File 55.04 KB 0644
HISTORY.txt File 10.07 KB 0644
NEWS.txt File 38.91 KB 0644
NEWS2x.txt File 26.54 KB 0644
README.txt File 9.37 KB 0644
TODO.txt File 8.28 KB 0644
__init__.py File 396 B 0644
__main__.py File 159 B 0644
_pyclbr.py File 14.84 KB 0644
autocomplete.py File 9.11 KB 0644
autocomplete_w.py File 19.36 KB 0644
autoexpand.py File 3.14 KB 0644
browser.py File 8.09 KB 0644
calltip.py File 5.92 KB 0644
calltip_w.py File 6.94 KB 0644
codecontext.py File 10.24 KB 0644
colorizer.py File 11.01 KB 0644
config-extensions.def File 2.21 KB 0644
config-highlight.def File 2.62 KB 0644
config-keys.def File 10.52 KB 0644
config-main.def File 3.05 KB 0644
config.py File 37.97 KB 0644
config_key.py File 13.09 KB 0644
configdialog.py File 98.69 KB 0644
debugger.py File 18.65 KB 0644
debugger_r.py File 11.86 KB 0644
debugobj.py File 3.96 KB 0644
debugobj_r.py File 1.06 KB 0644
delegator.py File 1.02 KB 0644
dynoption.py File 1.97 KB 0644
editor.py File 65.7 KB 0644
extend.txt File 3.56 KB 0644
filelist.py File 3.8 KB 0644
grep.py File 6.58 KB 0644
help.html File 53.82 KB 0644
help.py File 11.06 KB 0644
help_about.py File 8.77 KB 0644
history.py File 3.95 KB 0644
hyperparser.py File 12.58 KB 0644
idle.py File 454 B 0644
idle.pyw File 570 B 0644
iomenu.py File 20.25 KB 0644
macosx.py File 9.43 KB 0644
mainmenu.py File 3.62 KB 0644
multicall.py File 18.21 KB 0644
outwin.py File 5.67 KB 0644
paragraph.py File 7 KB 0644
parenmatch.py File 7.04 KB 0644
pathbrowser.py File 3.12 KB 0644
percolator.py File 3.06 KB 0644
pyparse.py File 19.65 KB 0644
pyshell.py File 56.38 KB 0755
query.py File 12.14 KB 0644
redirector.py File 6.71 KB 0644
replace.py File 7.33 KB 0644
rpc.py File 20.64 KB 0644
rstrip.py File 868 B 0644
run.py File 16.87 KB 0644
runscript.py File 7.66 KB 0644
scrolledlist.py File 4.35 KB 0644
search.py File 3.09 KB 0644
searchbase.py File 7.28 KB 0644
searchengine.py File 7.3 KB 0644
squeezer.py File 13 KB 0644
stackviewer.py File 4.35 KB 0644
statusbar.py File 1.41 KB 0644
textview.py File 5.98 KB 0644
tooltip.py File 6.33 KB 0644
tree.py File 14.74 KB 0644
undo.py File 10.79 KB 0644
window.py File 2.53 KB 0644
zoomheight.py File 1.31 KB 0644
zzdummy.py File 961 B 0644