##// END OF EJS Templates
hgweb: add support for 100-continue as recommended by PEP 333.
Augie Fackler -
r13570:617a87cb default
parent child Browse files
Show More
@@ -78,6 +78,23 b' class ErrorResponse(Exception):'
78 self.message = message
78 self.message = message
79 self.headers = headers
79 self.headers = headers
80
80
81 class continuereader(object):
82 def __init__(self, f, write):
83 self.f = f
84 self._write = write
85 self.continued = False
86
87 def read(self, amt=-1):
88 if not self.continued:
89 self.continued = True
90 self._write('HTTP/1.1 100 Continue\r\n\r\n')
91 return self.f.read(amt)
92
93 def __getattr__(self, attr):
94 if attr in ('close', 'readline', 'readlines', '__iter__'):
95 return getattr(self.f, attr)
96 raise AttributeError()
97
81 def _statusmessage(code):
98 def _statusmessage(code):
82 from BaseHTTPServer import BaseHTTPRequestHandler
99 from BaseHTTPServer import BaseHTTPRequestHandler
83 responses = BaseHTTPRequestHandler.responses
100 responses = BaseHTTPRequestHandler.responses
@@ -8,6 +8,7 b''
8
8
9 import os, sys, errno, urllib, BaseHTTPServer, socket, SocketServer, traceback
9 import os, sys, errno, urllib, BaseHTTPServer, socket, SocketServer, traceback
10 from mercurial import util, error
10 from mercurial import util, error
11 from mercurial.hgweb import common
11 from mercurial.i18n import _
12 from mercurial.i18n import _
12
13
13 def _splitURI(uri):
14 def _splitURI(uri):
@@ -111,6 +112,9 b' class _httprequesthandler(BaseHTTPServer'
111 env['SERVER_PROTOCOL'] = self.request_version
112 env['SERVER_PROTOCOL'] = self.request_version
112 env['wsgi.version'] = (1, 0)
113 env['wsgi.version'] = (1, 0)
113 env['wsgi.url_scheme'] = self.url_scheme
114 env['wsgi.url_scheme'] = self.url_scheme
115 if env.get('HTTP_EXPECT', '').lower() == '100-continue':
116 self.rfile = common.continuereader(self.rfile, self.wfile.write)
117
114 env['wsgi.input'] = self.rfile
118 env['wsgi.input'] = self.rfile
115 env['wsgi.errors'] = _error_logger(self)
119 env['wsgi.errors'] = _error_logger(self)
116 env['wsgi.multithread'] = isinstance(self.server,
120 env['wsgi.multithread'] = isinstance(self.server,
@@ -10,6 +10,7 b''
10
10
11 import os, sys
11 import os, sys
12 from mercurial import util
12 from mercurial import util
13 from mercurial.hgweb import common
13
14
14 def launch(application):
15 def launch(application):
15 util.set_binary(sys.stdin)
16 util.set_binary(sys.stdin)
@@ -23,7 +24,11 b' def launch(application):'
23 if environ['PATH_INFO'].startswith(scriptname):
24 if environ['PATH_INFO'].startswith(scriptname):
24 environ['PATH_INFO'] = environ['PATH_INFO'][len(scriptname):]
25 environ['PATH_INFO'] = environ['PATH_INFO'][len(scriptname):]
25
26
26 environ['wsgi.input'] = sys.stdin
27 stdin = sys.stdin
28 if environ.get('HTTP_EXPECT', '').lower() == '100-continue':
29 stdin = common.continuereader(stdin, sys.stdout.write)
30
31 environ['wsgi.input'] = stdin
27 environ['wsgi.errors'] = sys.stderr
32 environ['wsgi.errors'] = sys.stderr
28 environ['wsgi.version'] = (1, 0)
33 environ['wsgi.version'] = (1, 0)
29 environ['wsgi.multithread'] = False
34 environ['wsgi.multithread'] = False
General Comments 0
You need to be logged in to leave comments. Login now