| Index: third_party/twisted_8_1/twisted/manhole/_inspectro.py
|
| diff --git a/third_party/twisted_8_1/twisted/manhole/_inspectro.py b/third_party/twisted_8_1/twisted/manhole/_inspectro.py
|
| deleted file mode 100644
|
| index 12767ab1ee9858c8be2d02d79599b45571d67bb8..0000000000000000000000000000000000000000
|
| --- a/third_party/twisted_8_1/twisted/manhole/_inspectro.py
|
| +++ /dev/null
|
| @@ -1,369 +0,0 @@
|
| -# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
|
| -# See LICENSE for details.
|
| -
|
| -
|
| -"""An input/output window for the glade reactor inspector.
|
| -"""
|
| -
|
| -import time
|
| -import gtk
|
| -import gobject
|
| -import gtk.glade
|
| -from twisted.python.util import sibpath
|
| -from twisted.python import reflect
|
| -
|
| -from twisted.manhole.ui import gtk2manhole
|
| -from twisted.python.components import Adapter, registerAdapter
|
| -from twisted.python import log
|
| -from twisted.protocols import policies
|
| -from zope.interface import implements, Interface
|
| -
|
| -# the glade file uses stock icons, which requires gnome to be installed
|
| -import gnome
|
| -version = "$Revision: 1.1 $"[11:-2]
|
| -gnome.init("gladereactor Inspector", version)
|
| -
|
| -class ConsoleOutput(gtk2manhole.ConsoleOutput):
|
| - def _captureLocalLog(self):
|
| - self.fobs = log.FileLogObserver(gtk2manhole._Notafile(self, "log"))
|
| - self.fobs.start()
|
| -
|
| - def stop(self):
|
| - self.fobs.stop()
|
| - del self.fobs
|
| -
|
| -class ConsoleInput(gtk2manhole.ConsoleInput):
|
| - def sendMessage(self):
|
| - buffer = self.textView.get_buffer()
|
| - iter1, iter2 = buffer.get_bounds()
|
| - text = buffer.get_text(iter1, iter2, False)
|
| - self.do(text)
|
| -
|
| - def do(self, text):
|
| - self.toplevel.do(text)
|
| -
|
| -class INode(Interface):
|
| - """A node in the inspector tree model.
|
| - """
|
| -
|
| - def __adapt__(adaptable, default):
|
| - if hasattr(adaptable, "__dict__"):
|
| - return InstanceNode(adaptable)
|
| - return AttributesNode(adaptable)
|
| -
|
| -class InspectorNode(Adapter):
|
| - implements(INode)
|
| -
|
| - def postInit(self, offset, parent, slot):
|
| - self.offset = offset
|
| - self.parent = parent
|
| - self.slot = slot
|
| -
|
| - def getPath(self):
|
| - L = []
|
| - x = self
|
| - while x.parent is not None:
|
| - L.append(x.offset)
|
| - x = x.parent
|
| - L.reverse()
|
| - return L
|
| -
|
| - def __getitem__(self, index):
|
| - slot, o = self.get(index)
|
| - n = INode(o, persist=False)
|
| - n.postInit(index, self, slot)
|
| - return n
|
| -
|
| - def origstr(self):
|
| - return str(self.original)
|
| -
|
| - def format(self):
|
| - return (self.slot, self.origstr())
|
| -
|
| -
|
| -class ConstantNode(InspectorNode):
|
| - def __len__(self):
|
| - return 0
|
| -
|
| -class DictionaryNode(InspectorNode):
|
| - def get(self, index):
|
| - L = self.original.items()
|
| - L.sort()
|
| - return L[index]
|
| -
|
| - def __len__(self):
|
| - return len(self.original)
|
| -
|
| - def origstr(self):
|
| - return "Dictionary"
|
| -
|
| -class ListNode(InspectorNode):
|
| - def get(self, index):
|
| - return index, self.original[index]
|
| -
|
| - def origstr(self):
|
| - return "List"
|
| -
|
| - def __len__(self):
|
| - return len(self.original)
|
| -
|
| -class AttributesNode(InspectorNode):
|
| - def __len__(self):
|
| - return len(dir(self.original))
|
| -
|
| - def get(self, index):
|
| - L = dir(self.original)
|
| - L.sort()
|
| - return L[index], getattr(self.original, L[index])
|
| -
|
| -class InstanceNode(InspectorNode):
|
| - def __len__(self):
|
| - return len(self.original.__dict__) + 1
|
| -
|
| - def get(self, index):
|
| - if index == 0:
|
| - if hasattr(self.original, "__class__"):
|
| - v = self.original.__class__
|
| - else:
|
| - v = type(self.original)
|
| - return "__class__", v
|
| - else:
|
| - index -= 1
|
| - L = self.original.__dict__.items()
|
| - L.sort()
|
| - return L[index]
|
| -
|
| -import types
|
| -
|
| -for x in dict, types.DictProxyType:
|
| - registerAdapter(DictionaryNode, x, INode)
|
| -for x in list, tuple:
|
| - registerAdapter(ListNode, x, INode)
|
| -for x in int, str:
|
| - registerAdapter(ConstantNode, x, INode)
|
| -
|
| -
|
| -class InspectorTreeModel(gtk.GenericTreeModel):
|
| - def __init__(self, root):
|
| - gtk.GenericTreeModel.__init__(self)
|
| - self.root = INode(root, persist=False)
|
| - self.root.postInit(0, None, 'root')
|
| -
|
| - def on_get_flags(self):
|
| - return 0
|
| -
|
| - def on_get_n_columns(self):
|
| - return 1
|
| -
|
| - def on_get_column_type(self, index):
|
| - return gobject.TYPE_STRING
|
| -
|
| - def on_get_path(self, node):
|
| - return node.getPath()
|
| -
|
| - def on_get_iter(self, path):
|
| - x = self.root
|
| - for elem in path:
|
| - x = x[elem]
|
| - return x
|
| -
|
| - def on_get_value(self, node, column):
|
| - return node.format()[column]
|
| -
|
| - def on_iter_next(self, node):
|
| - try:
|
| - return node.parent[node.offset + 1]
|
| - except IndexError:
|
| - return None
|
| -
|
| - def on_iter_children(self, node):
|
| - return node[0]
|
| -
|
| - def on_iter_has_child(self, node):
|
| - return len(node)
|
| -
|
| - def on_iter_n_children(self, node):
|
| - return len(node)
|
| -
|
| - def on_iter_nth_child(self, node, n):
|
| - if node is None:
|
| - return None
|
| - return node[n]
|
| -
|
| - def on_iter_parent(self, node):
|
| - return node.parent
|
| -
|
| -
|
| -class Inspectro:
|
| - selected = None
|
| - def __init__(self, o=None):
|
| - self.xml = x = gtk.glade.XML(sibpath(__file__, "inspectro.glade"))
|
| - self.tree_view = x.get_widget("treeview")
|
| - colnames = ["Name", "Value"]
|
| - for i in range(len(colnames)):
|
| - self.tree_view.append_column(
|
| - gtk.TreeViewColumn(
|
| - colnames[i], gtk.CellRendererText(), text=i))
|
| - d = {}
|
| - for m in reflect.prefixedMethods(self, "on_"):
|
| - d[m.im_func.__name__] = m
|
| - self.xml.signal_autoconnect(d)
|
| - if o is not None:
|
| - self.inspect(o)
|
| - self.ns = {'inspect': self.inspect}
|
| - iwidget = x.get_widget('input')
|
| - self.input = ConsoleInput(iwidget)
|
| - self.input.toplevel = self
|
| - iwidget.connect("key_press_event", self.input._on_key_press_event)
|
| - self.output = ConsoleOutput(x.get_widget('output'))
|
| -
|
| - def select(self, o):
|
| - self.selected = o
|
| - self.ns['it'] = o
|
| - self.xml.get_widget("itname").set_text(repr(o))
|
| - self.xml.get_widget("itpath").set_text("???")
|
| -
|
| - def inspect(self, o):
|
| - self.model = InspectorTreeModel(o)
|
| - self.tree_view.set_model(self.model)
|
| - self.inspected = o
|
| -
|
| - def do(self, command):
|
| - filename = '<inspector>'
|
| - try:
|
| - print repr(command)
|
| - try:
|
| - code = compile(command, filename, 'eval')
|
| - except:
|
| - code = compile(command, filename, 'single')
|
| - val = eval(code, self.ns, self.ns)
|
| - if val is not None:
|
| - print repr(val)
|
| - self.ns['_'] = val
|
| - except:
|
| - log.err()
|
| -
|
| - def on_inspect(self, *a):
|
| - self.inspect(self.selected)
|
| -
|
| - def on_inspect_new(self, *a):
|
| - Inspectro(self.selected)
|
| -
|
| - def on_row_activated(self, tv, path, column):
|
| - self.select(self.model.on_get_iter(path).original)
|
| -
|
| -
|
| -class LoggingProtocol(policies.ProtocolWrapper):
|
| - """Log network traffic."""
|
| -
|
| - logging = True
|
| - logViewer = None
|
| -
|
| - def __init__(self, *args):
|
| - policies.ProtocolWrapper.__init__(self, *args)
|
| - self.inLog = []
|
| - self.outLog = []
|
| -
|
| - def write(self, data):
|
| - if self.logging:
|
| - self.outLog.append((time.time(), data))
|
| - if self.logViewer:
|
| - self.logViewer.updateOut(self.outLog[-1])
|
| - policies.ProtocolWrapper.write(self, data)
|
| -
|
| - def dataReceived(self, data):
|
| - if self.logging:
|
| - self.inLog.append((time.time(), data))
|
| - if self.logViewer:
|
| - self.logViewer.updateIn(self.inLog[-1])
|
| - policies.ProtocolWrapper.dataReceived(self, data)
|
| -
|
| - def __repr__(self):
|
| - r = "wrapped " + repr(self.wrappedProtocol)
|
| - if self.logging:
|
| - r += " (logging)"
|
| - return r
|
| -
|
| -
|
| -class LoggingFactory(policies.WrappingFactory):
|
| - """Wrap protocols with logging wrappers."""
|
| -
|
| - protocol = LoggingProtocol
|
| - logging = True
|
| -
|
| - def buildProtocol(self, addr):
|
| - p = self.protocol(self, self.wrappedFactory.buildProtocol(addr))
|
| - p.logging = self.logging
|
| - return p
|
| -
|
| - def __repr__(self):
|
| - r = "wrapped " + repr(self.wrappedFactory)
|
| - if self.logging:
|
| - r += " (logging)"
|
| - return r
|
| -
|
| -
|
| -class LogViewer:
|
| - """Display log of network traffic."""
|
| -
|
| - def __init__(self, p):
|
| - self.p = p
|
| - vals = [time.time()]
|
| - if p.inLog:
|
| - vals.append(p.inLog[0][0])
|
| - if p.outLog:
|
| - vals.append(p.outLog[0][0])
|
| - self.startTime = min(vals)
|
| - p.logViewer = self
|
| - self.xml = x = gtk.glade.XML(sibpath(__file__, "logview.glade"))
|
| - self.xml.signal_autoconnect(self)
|
| - self.loglist = self.xml.get_widget("loglist")
|
| - # setup model, connect it to my treeview
|
| - self.model = gtk.ListStore(str, str, str)
|
| - self.loglist.set_model(self.model)
|
| - self.loglist.set_reorderable(1)
|
| - self.loglist.set_headers_clickable(1)
|
| - # self.servers.set_headers_draggable(1)
|
| - # add a column
|
| - for col in [
|
| - gtk.TreeViewColumn('Time',
|
| - gtk.CellRendererText(),
|
| - text=0),
|
| - gtk.TreeViewColumn('D',
|
| - gtk.CellRendererText(),
|
| - text=1),
|
| - gtk.TreeViewColumn('Data',
|
| - gtk.CellRendererText(),
|
| - text=2)]:
|
| - self.loglist.append_column(col)
|
| - col.set_resizable(1)
|
| - r = []
|
| - for t, data in p.inLog:
|
| - r.append(((str(t - self.startTime), "R", repr(data)[1:-1])))
|
| - for t, data in p.outLog:
|
| - r.append(((str(t - self.startTime), "S", repr(data)[1:-1])))
|
| - r.sort()
|
| - for i in r:
|
| - self.model.append(i)
|
| -
|
| - def updateIn(self, (time, data)):
|
| - self.model.append((str(time - self.startTime), "R", repr(data)[1:-1]))
|
| -
|
| - def updateOut(self, (time, data)):
|
| - self.model.append((str(time - self.startTime), "S", repr(data)[1:-1]))
|
| -
|
| - def on_logview_destroy(self, w):
|
| - self.p.logViewer = None
|
| - del self.p
|
| -
|
| -
|
| -def main():
|
| - x = Inspectro()
|
| - x.inspect(x)
|
| - gtk.main()
|
| -
|
| -if __name__ == '__main__':
|
| - import sys
|
| - log.startLogging(sys.stdout)
|
| - main()
|
| -
|
|
|