mercurial/hgweb/request.py
changeset 5993 948a41e77902
parent 5930 c301f15c965a
child 6136 acfb9fa494e2
--- a/mercurial/hgweb/request.py	Fri Feb 01 10:31:09 2008 +0100
+++ b/mercurial/hgweb/request.py	Fri Feb 01 10:31:13 2008 +0100
@@ -17,7 +17,6 @@
             raise RuntimeError("Unknown and unsupported WSGI version %d.%d"
                                % version)
         self.inp = wsgienv['wsgi.input']
-        self.server_write = None
         self.err = wsgienv['wsgi.errors']
         self.threaded = wsgienv['wsgi.multithread']
         self.multiprocess = wsgienv['wsgi.multiprocess']
@@ -25,6 +24,7 @@
         self.env = wsgienv
         self.form = cgi.parse(self.inp, self.env, keep_blank_values=1)
         self._start_response = start_response
+        self.server_write = None
         self.headers = []
 
     def __iter__(self):
@@ -33,8 +33,10 @@
     def read(self, count=-1):
         return self.inp.read(count)
 
-    def start_response(self, status):
+    def respond(self, status, type=None, filename=None, length=0):
         if self._start_response is not None:
+
+            self.httphdr(type, filename, length)
             if not self.headers:
                 raise RuntimeError("request.write called before headers sent")
 
@@ -44,6 +46,8 @@
 
             if isinstance(status, ErrorResponse):
                 status = statusmessage(status.code)
+            elif status == 200:
+                status = '200 Script output follows'
             elif isinstance(status, int):
                 status = statusmessage(status)
 
@@ -51,24 +55,17 @@
             self._start_response = None
             self.headers = []
 
-    def respond(self, status, *things):
-        if not things:
-            self.start_response(status)
-        for thing in things:
-            if hasattr(thing, "__iter__"):
-                for part in thing:
-                    self.respond(status, part)
-            else:
-                thing = str(thing)
-                self.start_response(status)
-                try:
-                    self.server_write(thing)
-                except socket.error, inst:
-                    if inst[0] != errno.ECONNRESET:
-                        raise
-
-    def write(self, *things):
-        self.respond('200 Script output follows', *things)
+    def write(self, thing):
+        if hasattr(thing, "__iter__"):
+            for part in thing:
+                self.write(part)
+        else:
+            thing = str(thing)
+            try:
+                self.server_write(thing)
+            except socket.error, inst:
+                if inst[0] != errno.ECONNRESET:
+                    raise
 
     def writelines(self, lines):
         for line in lines:
@@ -83,9 +80,10 @@
     def header(self, headers=[('Content-Type','text/html')]):
         self.headers.extend(headers)
 
-    def httphdr(self, type, filename=None, length=0, headers={}):
+    def httphdr(self, type=None, filename=None, length=0, headers={}):
         headers = headers.items()
-        headers.append(('Content-Type', type))
+        if type is not None:
+            headers.append(('Content-Type', type))
         if filename:
             headers.append(('Content-Disposition', 'inline; filename=%s' %
                             filename))