X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=pdm%2Fsrv.py;h=80f9a260d688a438e0000a248f805c6129e64ef2;hb=HEAD;hp=abf7d89ef76517f4458cf99c6109c4b7468b0275;hpb=98ecc02e068d7108325210c9fd9f510ec7bae66c;p=pdm.git diff --git a/pdm/srv.py b/pdm/srv.py index abf7d89..2ddb9e7 100644 --- a/pdm/srv.py +++ b/pdm/srv.py @@ -10,6 +10,7 @@ which describes the functioning of the REPL and PERF protocols. import os, sys, socket, threading, grp, select import types, pprint, traceback import pickle, struct +from . import perf as mperf __all__ = ["repl", "perf", "listener", "unixlistener", "tcplistener", "listen"] @@ -62,8 +63,10 @@ class repl(object): self.echo(eval(ccode, self.mod.__dict__)) self.cl.send(b"+OK\n") except: - for line in traceback.format_exception(*sys.exc_info()): - self.cl.send(b" " + line.encode("utf-8")) + lines = ("".join(traceback.format_exception(*sys.exc_info()))).split("\n") + while len(lines) > 0 and lines[-1] == "": lines = lines[:-1] + for line in lines: + self.cl.send(b" " + line.encode("utf-8") + b"\n") self.cl.send(b"+EXC\n") def handle(self, buf): @@ -195,7 +198,7 @@ class perf(object): def bindob(self, id, ob): if not hasattr(ob, "pdm_protocols"): - raise ValueError("Object does not support PDM introspection") + raise mperf.nosuchname("Object does not support PDM introspection") try: proto = ob.pdm_protocols() except Exception as exc: @@ -206,12 +209,12 @@ class perf(object): def bind(self, id, module, obnm): resmod = sys.modules.get(module) if resmod is None: - self.send("-", ImportError("No such module: %s" % module)) + self.send("-", mperf.nosuchname("No such module: %s" % module)) return try: ob = getattr(resmod, obnm) except AttributeError: - self.send("-", AttributeError("No such object: %s" % obnm)) + self.send("-", mperf.nosuchname("No such object: %s" % obnm)) return try: proto = self.bindob(id, ob) @@ -227,7 +230,7 @@ class perf(object): return None ob, protos = ob if proto not in protos: - self.send("-", ValueError("Object does not support that protocol")) + self.send("-", mperf.nosuchproto("Object does not support that protocol: " + proto)) return None return ob @@ -238,7 +241,7 @@ class perf(object): try: ob = src.lookup(obnm) except KeyError as exc: - self.send("-", exc) + self.send("-", mperf.nosuchname(obnm)) return try: proto = self.bindob(tgtid, ob)