[Python-checkins] r47066 - sandbox/trunk/pdb/README.txt sandbox/trunk/pdb/mconnection.py sandbox/trunk/pdb/mpdb.py
matt.fleming
python-checkins at python.org
Thu Jun 22 14:54:44 CEST 2006
Author: matt.fleming
Date: Thu Jun 22 14:54:44 2006
New Revision: 47066
Modified:
sandbox/trunk/pdb/README.txt
sandbox/trunk/pdb/mconnection.py
sandbox/trunk/pdb/mpdb.py
Log:
Added exceptions, no longer have the namespace corruption problem, imitate fileobject.close() method with disconnect().
Modified: sandbox/trunk/pdb/README.txt
==============================================================================
--- sandbox/trunk/pdb/README.txt (original)
+++ sandbox/trunk/pdb/README.txt Thu Jun 22 14:54:44 2006
@@ -10,13 +10,6 @@
-=[TODO]=-
* Write more unit tests, test the pdbserver and target commands.
-* sort out the namespace corruption -
- """
- c:\soc\pdb\test.py(3)x()
- -> print c[i+1], i
- (MPdb)p i
- *** NameError: <exceptions.NameError instance at 0x00BF6990>
- """
* Write a signal handler that scripts can import from mpdb that, when
the signal is received, start remote debugging.
* info target,threads command needs to be written.
Modified: sandbox/trunk/pdb/mconnection.py
==============================================================================
--- sandbox/trunk/pdb/mconnection.py (original)
+++ sandbox/trunk/pdb/mconnection.py Thu Jun 22 14:54:44 2006
@@ -4,6 +4,11 @@
NotImplementedMessage = "This method must be overriden in a subclass"
+### Exceptions
+class ConnectionRefused(Exception): pass
+class DroppedConnection(Exception): pass
+class ReadOnClose(Exception): pass
+
class MServerConnectionInterface(object):
""" This is an abstract class that specifies the interface a server
connection class must implement. If a target is given, we'll
@@ -15,8 +20,8 @@
raise NotImplementedError, NotImplementedMessage
def disconnect(self):
- """ This method is called to disconnect connections."""
- raise NotImplementedError, NotImplementedMessage
+ """ This method is called to disconnect connections."""
+ raise NotImplementedError, NotImplementedMessage
def readline(self):
""" This method reads a line of data of maximum length 'bufsize'
@@ -71,20 +76,29 @@
(e.g. /dev/ttyS0, /dev/ttya, COM1, etc.).
"""
self._dev = device
- self.output = open(self._dev, 'w')
- self.input = open(self._dev, 'r')
+ try:
+ self.output = open(self._dev, 'w')
+ self.input = open(self._dev, 'r')
+ except IOError:
+ raise ConnectionRefused
def disconnect(self):
""" Close the serial device. """
+ if self.output is None and self.input is None:
+ return
self.output.close()
self.input.close()
+
def readline(self, bufsize=2048):
line = self.input.readline(bufsize)
return line
def write(self, msg):
+ if msg[-1] is not '\n':
+ msg += '\n'
self.output.write(msg)
+ self.output.flush()
MClientConnectionSerial = MServerConnectionSerial
@@ -97,7 +111,7 @@
"""
def __init__(self):
self.listening = False
- self.output = self.input = None
+ self._sock = self.output = self.input = None
MServerConnectionInterface.__init__(self)
def connect(self, addr):
@@ -110,15 +124,22 @@
if not self.listening:
self._sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self._sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
- self._sock.bind((self.host, self.port))
+ try:
+ self._sock.bind((self.host, self.port))
+ except socket.error:
+ raise ConnectionRefused
self._sock.listen(1)
self.listening = True
self.output, addr = self._sock.accept()
self.input = self.output
def disconnect(self):
+ # These two should either _both_ be None, or neither should be None
+ if self.output is None and self._sock is None:
+ return
self.output.close()
self._sock.close()
+ self._sock = None
self.listening = False
def readline(self, bufsize=2048):
@@ -139,6 +160,7 @@
def __init__(self):
""" Specify the address to connection to. """
MClientConnectionInterface.__init__(self)
+ self._sock = self.output = self.input = None
def connect(self, addr):
"""Connect to the server. 'input' reads data from the
@@ -163,4 +185,10 @@
def disconnect(self):
""" Close the socket to the server. """
- self._sock.close()
+ # We shouldn't bail if we haven't been connected yet
+ if self._sock is None:
+ return
+ else:
+ self._sock.close()
+
+
Modified: sandbox/trunk/pdb/mpdb.py
==============================================================================
--- sandbox/trunk/pdb/mpdb.py (original)
+++ sandbox/trunk/pdb/mpdb.py Thu Jun 22 14:54:44 2006
@@ -45,7 +45,6 @@
self.prompt = '(MPdb)'
self.target = 'local' # local connections by default
self.connection = None
- print self._info_cmds
def _rebind_input(self, new_input):
""" This method rebinds the debugger's input to the object specified
@@ -160,8 +159,8 @@
if '.' in target:
if self.connection: self.connection.disconnect()
# We dynamically load the class for the connection
- base = cls[:cls.rfind('.')]
- cls = cls[cls.rfind('.')+1:]
+ base = target[:target.rfind('.')]
+ cls = target[target.rfind('.')+1:]
exec 'from ' + base + ' import ' + cls
else:
try:
More information about the Python-checkins
mailing list