55#
66
77import os
8- import cgi
98import weakref
109
1110from roundup .anypy .html import html_escape
2019BaseHTTPRequestHandler = http_ .server .BaseHTTPRequestHandler
2120DEFAULT_ERROR_MESSAGE = http_ .server .DEFAULT_ERROR_MESSAGE
2221
22+
2323class Headers (object ):
2424 """ Idea more or less stolen from the 'apache.py' in same directory.
2525 Except that wsgi stores http headers in environment.
@@ -36,22 +36,25 @@ def mangle_name(self, name):
3636 return n
3737 return 'HTTP_' + n
3838
39- def get (self , name , default = None ):
39+ def get (self , name , default = None ):
4040 return self .environ .get (self .mangle_name (name ), default )
4141 getheader = get
4242
43+
4344class Writer (object ):
4445 '''Perform a start_response if need be when we start writing.'''
4546 def __init__ (self , request ):
46- self .request = request #weakref.ref(request)
47+ self .request = request #weakref.ref(request)
48+
4749 def write (self , data ):
4850 f = self .request .get_wfile ()
4951 self .write = lambda data : f (bs2b (data ))
5052 return self .write (data )
5153
54+
5255class RequestDispatcher (object ):
5356 def __init__ (self , home , debug = False , timing = False , lang = None ):
54- assert os .path .isdir (home ), '%r is not a directory' % (home ,)
57+ assert os .path .isdir (home ), '%r is not a directory' % (home ,)
5558 self .home = home
5659 self .debug = debug
5760 self .timing = timing
@@ -71,7 +74,7 @@ def __call__(self, environ, start_response):
7174 request .__wfile = None
7275 request .headers = Headers (environ )
7376
74- if environ ['REQUEST_METHOD' ] == 'OPTIONS' :
77+ if environ ['REQUEST_METHOD' ] == 'OPTIONS' :
7578 if environ ["PATH_INFO" ][:5 ] == "/rest" :
7679 # rest does support options
7780 # This I hope will result in self.form=None
@@ -83,7 +86,7 @@ def __call__(self, environ, start_response):
8386 ('Connection' , 'close' )], code )
8487 request .wfile .write (s2b (DEFAULT_ERROR_MESSAGE % locals ()))
8588 return []
86-
89+
8790 tracker = roundup .instance .open (self .home , not self .debug )
8891
8992 # need to strip the leading '/'
@@ -93,32 +96,32 @@ def __call__(self, environ, start_response):
9396
9497 form = BinaryFieldStorage (fp = environ ['wsgi.input' ], environ = environ )
9598
96- if environ ['REQUEST_METHOD' ] in ("OPTIONS" , "DELETE" ):
99+ if environ ['REQUEST_METHOD' ] in ("OPTIONS" , "DELETE" ):
97100 # these methods have no data. When we init tracker.Client
98101 # set form to None and request.rfile to None to get a
99102 # properly initialized empty form.
100103 form = None
101104 request .rfile = None
102105
103106 client = tracker .Client (tracker , request , environ , form ,
104- request .translator )
107+ request .translator )
105108 try :
106109 client .main ()
107110 except roundup .cgi .client .NotFound :
108111 request .start_response ([('Content-Type' , 'text/html' )], 404 )
109- request .wfile .write (s2b ('Not found: %s' % html_escape (client .path )))
112+ request .wfile .write (s2b ('Not found: %s' %
113+ html_escape (client .path )))
110114
111115 # all body data has been written using wfile
112116 return []
113117
114118 def start_response (self , headers , response_code ):
115119 """Set HTTP response code"""
116120 message , explain = BaseHTTPRequestHandler .responses [response_code ]
117- self .__wfile = self .__start_response ('%d %s' % (response_code ,
118- message ), headers )
121+ self .__wfile = self .__start_response ('%d %s' % (response_code ,
122+ message ), headers )
119123
120124 def get_wfile (self ):
121125 if self .__wfile is None :
122126 raise ValueError ('start_response() not called' )
123127 return self .__wfile
124-
0 commit comments