Mercurial > p > roundup > code
view roundup/cgi/exceptions.py @ 3808:36eb9e8faf30
Real handling of network errors.
Fix for correctly ignoring net errors: It seems that (at least in
my installed Debian version of python2.4) socket.error does not have an
errno attribute but is simply a tuple of (errno, strerror). So we now
try to get errno first and if this fails we try to use err [0]. This
works for a simple test-script to which I can connect with telnet on
port 4711 -- it will correctly detect errno.EPIPE if I terminate the
telnet session:
#!/usr/bin/python2.4
import socket
import errno
from SocketServer import TCPServer, BaseRequestHandler
class Server (BaseRequestHandler) :
def handle (self) :
self.file = self.request.makefile ()
try :
while True :
print >> self.file, "Testing..."
except socket.error, err :
print getattr (err, 'errno', "Has no errno")
print err [0]
print err [0] == errno.EPIPE
raise
# end def handle
# end class Server
server_address = ('', 4711)
s = TCPServer (server_address, Server)
s.serve_forever ()
Sorry for the verbose log-message but I hope to document my debugging
activities
| author | Ralf Schlatterbeck <schlatterbeck@users.sourceforge.net> |
|---|---|
| date | Tue, 16 Jan 2007 10:16:08 +0000 |
| parents | df4a3355ee8f |
| children | bbab97f8ffb2 |
line wrap: on
line source
#$Id: exceptions.py,v 1.6 2004-11-18 14:10:27 a1s Exp $ '''Exceptions for use in Roundup's web interface. ''' __docformat__ = 'restructuredtext' import cgi class HTTPException(Exception): pass class LoginError(HTTPException): pass class Unauthorised(HTTPException): pass class Redirect(HTTPException): pass class NotFound(HTTPException): pass class NotModified(HTTPException): pass class FormError(ValueError): """An 'expected' exception occurred during form parsing. That is, something we know can go wrong, and don't want to alarm the user with. We trap this at the user interface level and feed back a nice error to the user. """ pass class SendFile(Exception): """Send a file from the database.""" class SendStaticFile(Exception): """Send a static file from the instance html directory.""" class SeriousError(Exception): """Raised when we can't reasonably display an error message on a templated page. The exception value will be displayed in the error page, HTML escaped. """ def __str__(self): return ''' <html><head><title>Roundup issue tracker: An error has occurred</title> <link rel="stylesheet" type="text/css" href="@@file/style.css"> </head> <body class="body" marginwidth="0" marginheight="0"> <p class="error-message">%s</p> </body></html> '''%cgi.escape(self.args[0]) # vim: set filetype=python sts=4 sw=4 et si :
