comparison roundup/cgi/client.py @ 3628:ed76f7ee34c4

handle connection loss when responding to web requests
author Richard Jones <richard@users.sourceforge.net>
date Tue, 06 Jun 2006 01:44:44 +0000
parents 04dc3eef67b7
children ff9f4ca42454
comparison
equal deleted inserted replaced
3627:023b44bc95d5 3628:ed76f7ee34c4
1 # $Id: client.py,v 1.225 2006-04-27 04:03:11 richard Exp $ 1 # $Id: client.py,v 1.226 2006-06-06 01:44:44 richard Exp $
2 2
3 """WWW request handler (also used in the stand-alone server). 3 """WWW request handler (also used in the stand-alone server).
4 """ 4 """
5 __docformat__ = 'restructuredtext' 5 __docformat__ = 'restructuredtext'
6 6
7 import base64, binascii, cgi, codecs, mimetypes, os 7 import base64, binascii, cgi, codecs, mimetypes, os
8 import random, re, rfc822, stat, time, urllib, urlparse 8 import random, re, rfc822, stat, time, urllib, urlparse
9 import Cookie 9 import Cookie, socket, errno
10 10
11 from roundup import roundupdb, date, hyperdb, password 11 from roundup import roundupdb, date, hyperdb, password
12 from roundup.cgi import templating, cgitb, TranslationService 12 from roundup.cgi import templating, cgitb, TranslationService
13 from roundup.cgi.actions import * 13 from roundup.cgi.actions import *
14 from roundup.exceptions import * 14 from roundup.exceptions import *
819 819
820 def write(self, content): 820 def write(self, content):
821 if not self.headers_done: 821 if not self.headers_done:
822 self.header() 822 self.header()
823 if self.env['REQUEST_METHOD'] != 'HEAD': 823 if self.env['REQUEST_METHOD'] != 'HEAD':
824 self.request.wfile.write(content) 824 try:
825 self.request.wfile.write(content)
826 except socket.error, error:
827 # the end-user has gone away
828 if error.errno != errno.EPIPE:
829 raise
825 830
826 def write_html(self, content): 831 def write_html(self, content):
827 if not self.headers_done: 832 if not self.headers_done:
828 # at this point, we are sure about Content-Type 833 # at this point, we are sure about Content-Type
829 self.additional_headers['Content-Type'] = \ 834 self.additional_headers['Content-Type'] = \
838 # recode output 843 # recode output
839 content = content.decode(self.STORAGE_CHARSET, 'replace') 844 content = content.decode(self.STORAGE_CHARSET, 'replace')
840 content = content.encode(self.charset, 'xmlcharrefreplace') 845 content = content.encode(self.charset, 'xmlcharrefreplace')
841 846
842 # and write 847 # and write
843 self.request.wfile.write(content) 848 try:
849 self.request.wfile.write(content)
850 except socket.error, error:
851 # the end-user has gone away
852 if error.errno != errno.EPIPE:
853 raise
844 854
845 def setHeader(self, header, value): 855 def setHeader(self, header, value):
846 '''Override a header to be returned to the user's browser. 856 '''Override a header to be returned to the user's browser.
847 ''' 857 '''
848 self.additional_headers[header] = value 858 self.additional_headers[header] = value

Roundup Issue Tracker: http://roundup-tracker.org/