hgweb: separate out start_response() calling
authorDirkjan Ochtman <dirkjan@ochtman.nl>
Fri, 18 Jan 2008 19:53:38 +0100
changeset 5888 956afc025c0f
parent 5887 41a3fce17625
child 5889 209577095f20
hgweb: separate out start_response() calling
mercurial/hgweb/request.py
--- a/mercurial/hgweb/request.py	Fri Jan 18 19:53:38 2008 +0100
+++ b/mercurial/hgweb/request.py	Fri Jan 18 19:53:38 2008 +0100
@@ -24,7 +24,7 @@
         self.run_once = wsgienv['wsgi.run_once']
         self.env = wsgienv
         self.form = cgi.parse(self.inp, self.env, keep_blank_values=1)
-        self.start_response = start_response
+        self._start_response = start_response
         self.headers = []
 
     def __iter__(self):
@@ -33,24 +33,31 @@
     def read(self, count=-1):
         return self.inp.read(count)
 
+    def start_response(self, status):
+        if self._start_response is not None:
+            if not self.headers:
+                raise RuntimeError("request.write called before headers sent" +
+                	               " (%s)." % thing)
+
+            if isinstance(status, ErrorResponse):
+                status = statusmessage(status.code)
+            elif isinstance(status, int):
+                status = statusmessage(status)
+
+            self.server_write = self._start_response(status, self.headers)
+            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)
-                if self.server_write is None:
-                    if not self.headers:
-                        raise RuntimeError("request.write called before headers sent (%s)." % thing)
-                    if isinstance(status, ErrorResponse):
-                        status = statusmessage(status.code)
-                    elif isinstance(status, int):
-                        status = statusmessage(status)
-                    self.server_write = self.start_response(status,
-                                                            self.headers)
-                    self.start_response = None
-                    self.headers = []
+                self.start_response(status)
                 try:
                     self.server_write(thing)
                 except socket.error, inst: