--- handlers.py 2007-08-31 02:04:24.000000000 +0200 +++ handlers.py 2008-12-04 12:05:15.000000000 +0100 @@ -175,20 +175,23 @@ """Transmit version/status/date/server, via self._write()""" if self.origin_server: if self.client_is_modern(): - self._write('HTTP/%s %s\r\n' % (self.http_version,self.status)) + self._write(('HTTP/%s %s\r\n' % (self.http_version,self.status)).encode('ISO8859-1')) if 'Date' not in self.headers: self._write( - 'Date: %s\r\n' % format_date_time(time.time()) + ('Date: %s\r\n' % format_date_time(time.time())).encode('ISO8859-1') ) if self.server_software and 'Server' not in self.headers: - self._write('Server: %s\r\n' % self.server_software) + self._write(('Server: %s\r\n' % self.server_software).encode('ISO8859-1')) else: - self._write('Status: %s\r\n' % self.status) + self._write(('Status: %s\r\n' % self.status).encode('ISO8859-1')) def write(self, data): """'write()' callable as specified by PEP 333""" - assert type(data) is str,"write() argument must be string" + if hasattr(data, "encode"): + data = data.encode('ISO8859-1') + + assert type(data) is bytes,"write() argument must be string or bytes" if not self.status: raise AssertionError("write() before start_response()") @@ -253,7 +256,7 @@ self.headers_sent = True if not self.origin_server or self.client_is_modern(): self.send_preamble() - self._write(str(self.headers)) + self._write(str(self.headers).encode('ISO8859-1')) def result_is_file(self):