Changeset 856
- Timestamp:
- 12/03/05 12:44:11
- Files:
-
- trunk/CHANGELOG.txt (modified) (1 diff)
- trunk/cherrypy/__init__.py (modified) (3 diffs)
- trunk/cherrypy/_cperror.py (modified) (5 diffs)
- trunk/cherrypy/_cphttpserver.py (modified) (9 diffs)
- trunk/cherrypy/_cphttptools.py (modified) (22 diffs)
- trunk/cherrypy/_cpserver.py (modified) (12 diffs)
- trunk/cherrypy/_cputil.py (modified) (16 diffs)
- trunk/cherrypy/_cpwsgi.py (modified) (6 diffs)
- trunk/cherrypy/config.py (modified) (9 diffs)
- trunk/cherrypy/filters/__init__.py (modified) (2 diffs)
- trunk/cherrypy/filters/basefilter.py (modified) (1 diff)
- trunk/cherrypy/filters/baseurlfilter.py (modified) (1 diff)
- trunk/cherrypy/filters/cachefilter.py (modified) (6 diffs)
- trunk/cherrypy/filters/decodingfilter.py (modified) (2 diffs)
- trunk/cherrypy/filters/encodingfilter.py (modified) (4 diffs)
- trunk/cherrypy/filters/gzipfilter.py (modified) (3 diffs)
- trunk/cherrypy/filters/logdebuginfofilter.py (modified) (2 diffs)
- trunk/cherrypy/filters/nsgmlsfilter.py (modified) (5 diffs)
- trunk/cherrypy/filters/sessionauthenticatefilter.py (modified) (2 diffs)
- trunk/cherrypy/filters/sessionfilter.py (modified) (22 diffs)
- trunk/cherrypy/filters/staticfilter.py (modified) (4 diffs)
- trunk/cherrypy/filters/tidyfilter.py (modified) (5 diffs)
- trunk/cherrypy/filters/xmlrpcfilter.py (modified) (10 diffs)
- trunk/cherrypy/lib/covercp.py (modified) (1 diff)
- trunk/cherrypy/lib/cptools.py (modified) (9 diffs)
- trunk/cherrypy/lib/form.py (modified) (3 diffs)
- trunk/cherrypy/lib/profiler.py (modified) (2 diffs)
- trunk/cherrypy/test/helper.py (modified) (4 diffs)
- trunk/cherrypy/test/test.py (modified) (1 diff)
- trunk/cherrypy/test/test_baseurl_filter.py (modified) (1 diff)
- trunk/cherrypy/test/test_cache_filter.py (modified) (2 diffs)
- trunk/cherrypy/test/test_combinedfilters.py (modified) (1 diff)
- trunk/cherrypy/test/test_config.py (modified) (1 diff)
- trunk/cherrypy/test/test_core.py (modified) (20 diffs)
- trunk/cherrypy/test/test_decodingencoding_filter.py (modified) (2 diffs)
- trunk/cherrypy/test/test_gzip_filter.py (modified) (1 diff)
- trunk/cherrypy/test/test_logdebuginfo_filter.py (modified) (3 diffs)
- trunk/cherrypy/test/test_objectmapping.py (modified) (1 diff)
- trunk/cherrypy/test/test_session_filter.py (modified) (2 diffs)
- trunk/cherrypy/test/test_sessionauthenticate_filter.py (modified) (2 diffs)
- trunk/cherrypy/test/test_states.py (modified) (8 diffs)
- trunk/cherrypy/test/test_static_filter.py (modified) (2 diffs)
- trunk/cherrypy/test/test_tutorials.py (modified) (3 diffs)
- trunk/cherrypy/test/test_xmlrpc_filter.py (modified) (1 diff)
- trunk/cherrypy/test/webtest.py (modified) (1 diff)
- trunk/cherrypy/tutorial/tut07_sessions.py (modified) (1 diff)
- trunk/cherrypy/tutorial/tut10_http_errors.py (modified) (3 diffs)
- trunk/docs/book/xml/apireference.xml (modified) (13 diffs)
- trunk/docs/book/xml/designchoices.xml (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/CHANGELOG.txt
r744 r856 1 2005-12-03: 2 * Huge change: switching to lowercase_with_underscore names everywhere ... CP keeps backward compatibility though (remi) 3 1 4 2005-10-21: 2 5 * CherryPy-2.1.0 released trunk/cherrypy/__init__.py
r835 r856 48 48 response = _ThreadLocalProxy('response') 49 49 50 # Create threadData object as a thread-specific all-purpose storage 51 threadData = local() 50 # Create thread_data object as a thread-specific all-purpose storage 51 thread_data = local() 52 threadData = thread_data # Backward compatibility 52 53 53 54 # Create variables needed for session (see lib/sessionfilter.py for more info) 54 55 from filters import sessionfilter 55 56 session = sessionfilter.SessionWrapper() 56 _session DataHolder = {} # Needed for RAM sessions only57 _session LockDict = {} # Needed for RAM sessions only58 _session LastCleanUpTime = datetime.datetime.now()57 _session_data_holder = {} # Needed for RAM sessions only 58 _session_lock_dict = {} # Needed for RAM sessions only 59 _session_last_clean_up_time = datetime.datetime.now() 59 60 60 61 def expose(func=None, alias=None): … … 65 66 if alias is not None: 66 67 if isinstance(alias, basestring): 67 parent Dict[alias] = func68 parents[alias] = func 68 69 else: 69 70 for a in alias: 70 parent Dict[a] = func71 parents[a] = func 71 72 return func 72 73 73 parent Dict= sys._getframe(1).f_locals74 parents = sys._getframe(1).f_locals 74 75 if isinstance(func, (types.FunctionType, types.MethodType)): 75 76 # expose is being called directly, before the method has been bound … … 86 87 # to allow profiler and coverage tools to work on it. 87 88 import _cputil 88 logfunc = _cputil.get SpecialAttribute('_cpLogMessage')89 logfunc = _cputil.get_special_attribute('_cp_log_message', '_cpLogMessage') 89 90 logfunc(msg, context, severity) 90 91 trunk/cherrypy/_cperror.py
r839 r856 21 21 """Exception raised when processing should be handled by a different path. 22 22 23 If you supply 'params', it will be used to re-populate param Map.23 If you supply 'params', it will be used to re-populate params. 24 24 If 'params' is a dict, it will be used directly. 25 25 If 'params' is a string, it will be converted to a dict using cgi.parse_qs. 26 26 27 If you omit 'params', the param Mapfrom the original request will27 If you omit 'params', the params from the original request will 28 28 remain in effect, including any POST parameters. 29 29 """ … … 45 45 if len(val) == 1: 46 46 pm[key] = val[0] 47 request.param Map= pm47 request.params = pm 48 48 else: 49 49 request.queryString = urllib.urlencode(params) 50 request.param Map= params.copy()50 request.params = params.copy() 51 51 52 52 Exception.__init__(self, path, params) … … 101 101 response = cherrypy.response 102 102 response.status = status = self.status 103 response.header Map['Content-Type'] = "text/html"103 response.headers['Content-Type'] = "text/html" 104 104 105 105 if status in (300, 301, 302, 303, 307): 106 106 # "The ... URI SHOULD be given by the Location field 107 107 # in the response." 108 response.header Map['Location'] = self.urls[0]108 response.headers['Location'] = self.urls[0] 109 109 110 110 # "Unless the request method was HEAD, the entity of the response … … 129 129 # Use Proxy. 130 130 # self.urls[0] should be the URI of the proxy. 131 response.header Map['Location'] = self.urls[0]131 response.headers['Location'] = self.urls[0] 132 132 response.body = None 133 133 else: … … 152 152 def set_response(self): 153 153 import cherrypy 154 handler = cherrypy._cputil.get SpecialAttribute("_cpOnHTTPError")154 handler = cherrypy._cputil.get_special_attribute("_cp_on_http_error", "_cpOnHTTPError") 155 155 handler(self.status, self.message) 156 156 trunk/cherrypy/_cphttpserver.py
r851 r856 18 18 19 19 def address_string(self): 20 """ Try to do a reverse DNS based on server.reverse DNSin the config file """21 if cherrypy.config.get('server.reverse DNS'):20 """ Try to do a reverse DNS based on server.reverse_dns in the config file """ 21 if cherrypy.config.get('server.reverse_dns'): 22 22 return BaseHTTPRequestHandler.address_string(self) 23 23 else: … … 42 42 def parse_request(self): 43 43 # Extended to provide header and body length limits. 44 mhs = int(cherrypy.config.get('server.max RequestHeaderSize',44 mhs = int(cherrypy.config.get('server.max_request_header_size', 45 45 500 * 1024)) 46 46 self.rfile = httptools.SizeCheckWrapper(self.rfile, mhs) … … 60 60 if path == "*": 61 61 path = "global" 62 mbs = int(cherrypy.config.get('server.max RequestBodySize',62 mbs = int(cherrypy.config.get('server.max_request_body_size', 63 63 100 * 1024 * 1024, path=path)) 64 64 self.rfile.maxlen = mbs … … 79 79 request = cherrypy.server.request(self.client_address, 80 80 self.address_string(), "http") 81 request.multithread = cherrypy.config.get("server.thread Pool") > 181 request.multithread = cherrypy.config.get("server.thread_pool") > 1 82 82 request.multiprocess = False 83 83 response = request.run(self.raw_requestline, self._headerlist(), … … 90 90 tb = _cputil.formatExc() 91 91 cherrypy.log(tb) 92 if not cherrypy.config.get("server.show Tracebacks", False):92 if not cherrypy.config.get("server.show_tracebacks", False): 93 93 tb = "" 94 94 s, h, b = _cputil.bareError(tb) … … 175 175 176 176 # Set protocol_version 177 httpproto = cherrypy.config.get('server.protocol Version') or "HTTP/1.0"177 httpproto = cherrypy.config.get('server.protocol_version') or "HTTP/1.0" 178 178 self.RequestHandlerClass.protocol_version = httpproto 179 179 180 self.request_queue_size = cherrypy.config.get('server.socket QueueSize')180 self.request_queue_size = cherrypy.config.get('server.socket_queue_size') 181 181 182 182 # Select the appropriate server based on config options 183 sockFile = cherrypy.config.get('server.socket File')183 sockFile = cherrypy.config.get('server.socket_file') 184 184 if sockFile: 185 185 # AF_UNIX socket … … 199 199 else: 200 200 # AF_INET or AF_INET6 socket 201 host = cherrypy.config.get('server.socket Host')202 port = cherrypy.config.get('server.socket Port')201 host = cherrypy.config.get('server.socket_host') 202 port = cherrypy.config.get('server.socket_port') 203 203 self.server_address = (host, port) 204 204 … … 307 307 308 308 def __init__(self): 309 self.numThreads = cherrypy.config.get('server.thread Pool')309 self.numThreads = cherrypy.config.get('server.thread_pool') 310 310 self.ThreadClass = ServerThread 311 311 self.requestQueue = Queue.Queue() … … 392 392 393 393 # Select the appropriate server based on config options 394 if cherrypy.config.get('server.thread Pool', 1) > 1:394 if cherrypy.config.get('server.thread_pool', 1) > 1: 395 395 ServerClass = PooledThreadServer 396 396 else: trunk/cherrypy/_cphttptools.py
r851 r856 34 34 self.closed = True 35 35 try: 36 applyFilters('on EndRequest')36 applyFilters('on_end_request', 'onEndRequest') 37 37 except (KeyboardInterrupt, SystemExit): 38 38 raise … … 58 58 """ 59 59 self.requestLine = requestLine.strip() 60 self.header s= list(headers)60 self.header_list = list(headers) 61 61 self.rfile = rfile 62 62 … … 70 70 71 71 try: 72 self.headerMap = httptools.HeaderMap() 72 self.headers = httptools.HeaderMap() 73 self.headerMap = self.headers # Backward compatibility 73 74 self.simpleCookie = Cookie.SimpleCookie() 74 75 … … 79 80 80 81 try: 81 applyFilters('on StartResource')82 applyFilters('on_start_resource', 'onStartResource') 82 83 83 84 try: 84 85 self.processHeaders() 85 86 86 applyFilters('before RequestBody')87 applyFilters('before_request_body', 'beforeRequestBody') 87 88 if self.processRequestBody: 88 89 self.processBody() 89 90 90 applyFilters('before Main')91 applyFilters('before_main', 'beforeMain') 91 92 if self.executeMain: 92 93 self.main() 93 94 94 applyFilters('before Finalize')95 applyFilters('before_finalize', 'beforeFinalize') 95 96 cherrypy.response.finalize() 96 97 except cherrypy.RequestHandled: … … 101 102 # we return the redirect or error page immediately 102 103 inst.set_response() 103 applyFilters('before Finalize')104 applyFilters('before_finalize', 'before_finalize') 104 105 cherrypy.response.finalize() 105 106 finally: 106 applyFilters('on EndResource')107 applyFilters('on_end_resource', 'onEndResource') 107 108 except (KeyboardInterrupt, SystemExit): 108 109 raise … … 114 115 cherrypy.response.body = [] 115 116 116 _cputil.get SpecialAttribute("_cpLogAccess")()117 _cputil.get_special_attribute("_cp_log_access", "_cpLogAccess")() 117 118 118 119 def processRequestLine(self): … … 149 150 # cherrypy.request.version == request.protocol in a Version instance. 150 151 self.version = httptools.Version.from_http(self.protocol) 151 server_v = cherrypy.config.get("server.protocol Version", "HTTP/1.0")152 server_v = cherrypy.config.get("server.protocol_version", "HTTP/1.0") 152 153 server_v = httptools.Version.from_http(server_v) 153 154 … … 158 159 def processHeaders(self): 159 160 160 self.paramMap = httptools.parseQueryString(self.queryString) 161 162 # Process the headers into self.headerMap 163 for name, value in self.headers: 161 self.params = httptools.parseQueryString(self.queryString) 162 self.paramMap = self.params # Backward compatibility 163 164 # Process the headers into self.headers 165 for name, value in self.header_list: 164 166 value = value.strip() 165 167 # Warning: if there is more than one header entry for cookies (AFAIK, 166 # only Konqueror does that), only the last one will remain in header Map168 # only Konqueror does that), only the last one will remain in headers 167 169 # (but they will be correctly stored in request.simpleCookie). 168 self.header Map[name] = value170 self.headers[name] = value 169 171 170 172 # Handle cookies differently because on Konqueror, multiple … … 175 177 # Save original values (in case they get modified by filters) 176 178 # This feature is deprecated in 2.2 and will be removed in 2.3. 177 self._original ParamMap = self.paramMap.copy()179 self._original_params = self.params.copy() 178 180 179 181 if self.version >= "1.1": … … 181 183 # (Bad Request) status code to any HTTP/1.1 request message 182 184 # which lacks a Host header field. 183 if not self.header Map.has_key("Host"):185 if not self.headers.has_key("Host"): 184 186 msg = "HTTP/1.1 requires a 'Host' request header." 185 187 raise cherrypy.HTTPError(400, msg) 186 self.base = "%s://%s" % (self.scheme, self.header Map.get('Host', ''))187 188 def _get_original_param _map(self):188 self.base = "%s://%s" % (self.scheme, self.headers.get('Host', '')) 189 190 def _get_original_params(self): 189 191 # This feature is deprecated in 2.2 and will be removed in 2.3. 190 return self._original ParamMap191 original ParamMap = property(_get_original_param_map,192 doc="Deprecated. A copy of the original param Map.")192 return self._original_params 193 original_params = property(_get_original_params, 194 doc="Deprecated. A copy of the original params.") 193 195 194 196 def _get_browserUrl(self): … … 201 203 202 204 def processBody(self): 203 # Create a copy of header Mapwith lowercase keys because205 # Create a copy of headers with lowercase keys because 204 206 # FieldStorage doesn't work otherwise 205 207 lowerHeaderMap = {} 206 for key, value in self.header Map.items():208 for key, value in self.headers.items(): 207 209 lowerHeaderMap[key.lower()] = value 208 210 … … 222 224 self.body = forms.file 223 225 else: 224 self.param Map.update(httptools.paramsFromCGIForm(forms))226 self.params.update(httptools.paramsFromCGIForm(forms)) 225 227 226 228 def main(self, path=None): … … 239 241 self.objectPath = '/' + '/'.join(object_path[1:]) 240 242 try: 241 body = page_handler(*virtual_path, **self.param Map)243 body = page_handler(*virtual_path, **self.params) 242 244 except Exception, x: 243 245 x.args = x.args + (page_handler,) … … 302 304 icofile = os.path.join(os.path.dirname(__file__), "favicon.ico") 303 305 cptools.serveFile(icofile) 304 applyFilters('before Finalize')306 applyFilters('before_finalize', 'beforeFinalize') 305 307 cherrypy.response.finalize() 306 308 raise cherrypy.RequestHandled() … … 373 375 def __init__(self): 374 376 self.status = None 375 self.header s= None377 self.header_list = None 376 378 self.body = None 377 379 378 self.headerMap = httptools.HeaderMap() 379 self.headerMap.update({ 380 self.headers = httptools.HeaderMap() 381 self.headerMap = self.headers # Backward compatibility 382 self.headers.update({ 380 383 "Content-Type": "text/html", 381 384 "Server": "CherryPy/" + cherrypy.__version__, … … 392 395 393 396 def finalize(self): 394 """Transform header Map (and cookies) into cherrypy.response.headers."""397 """Transform headers (and cookies) into cherrypy.response.header_list.""" 395 398 396 399 try: … … 409 412 if stream: 410 413 try: 411 del self.header Map['Content-Length']414 del self.headers['Content-Length'] 412 415 except KeyError: 413 416 pass … … 415 418 # Responses which are not streamed should have a Content-Length, 416 419 # but allow user code to set Content-Length if desired. 417 if self.header Map.get('Content-Length') is None:420 if self.headers.get('Content-Length') is None: 418 421 content = self.collapse_body() 419 self.header Map['Content-Length'] = len(content)422 self.headers['Content-Length'] = len(content) 420 423 421 424 # Headers 422 header s= []423 for key, valueList in self.header Map.iteritems():425 header_list = [] 426 for key, valueList in self.headers.iteritems(): 424 427 order = _header_order_map.get(key, 3) 425 428 if not isinstance(valueList, list): 426 429 valueList = [valueList] 427 430 for value in valueList: 428 header s.append((order, (key, str(value))))431 header_list.append((order, (key, str(value)))) 429 432 # RFC 2616: '... it is "good practice" to send general-header 430 433 # fields first, followed by request-header or response-header 431 434 # fields, and ending with the entity-header fields.' 432 header s.sort()433 self.header s = [item[1] for item in headers]435 header_list.sort() 436 self.header_list = [item[1] for item in header_list] 434 437 435 438 cookie = self.simpleCookie.output() … … 438 441 for line in lines: 439 442 name, value = line.split(": ", 1) 440 self.header s.append((name, value))443 self.header_list.append((name, value)) 441 444 442 445 dbltrace = "\n===First Error===\n\n%s\n\n===Second Error===\n\n%s\n\n" … … 445 448 """Set status, headers, and body when an unanticipated error occurs.""" 446 449 try: 447 applyFilters('before ErrorResponse')450 applyFilters('before_error_response', 'beforeErrorResponse') 448 451 449 # _cp OnError will probably change self.body.450 # It may also change the header Map, etc.451 _cputil.get SpecialAttribute('_cpOnError')()452 # _cp_on_error will probably change self.body. 453 # It may also change the headers, etc. 454 _cputil.get_special_attribute('_cp_on_error', '_cpOnError')() 452 455 453 456 self.finalize() 454 457 455 applyFilters('after ErrorResponse')458 applyFilters('after_error_response', 'afterErrorResponse') 456 459 return 457 460 except cherrypy.HTTPRedirect, inst: … … 471 474 pass 472 475 473 # Failure in _cp OnError, error filter, or finalize.476 # Failure in _cp_on_error, error filter, or finalize. 474 477 # Bypass them all. 475 if cherrypy.config.get('server.show Tracebacks', False):478 if cherrypy.config.get('server.show_tracebacks', False): 476 479 body = self.dbltrace % (_cputil.formatExc(exc), 477 480 _cputil.formatExc()) … … 481 484 482 485 def setBareError(self, body=None): 483 self.status, self.header s, self.body = _cputil.bareError(body)484 486 self.status, self.header_list, self.body = _cputil.bareError(body) 487 trunk/cherrypy/_cpserver.py
r844 r856 30 30 31 31 # Set some special attributes for adding hooks 32 self.onStartServerList = [] 33 self.onStartThreadList = [] 34 self.onStopServerList = [] 35 self.onStopThreadList = [] 32 self.on_start_server_list = [] 33 self.on_start_thread_list = [] 34 self.on_stop_server_list = [] 35 self.on_stop_thread_list = [] 36 37 # Backward compatibility: 38 self.onStopServerList = self.on_stop_server_list 39 self.onStartThreadList = self.on_start_thread_list 40 self.onStartServerList = self.on_start_server_list 41 self.onStopThreadList = self.on_stop_thread_list 36 42 37 43 def start(self, initOnly=False, serverClass=_missing): … … 82 88 def _start(self): 83 89 # Output config options to log 84 if cherrypy.config.get("server.log ConfigOptions", True):90 if cherrypy.config.get("server.log_config_options", True): 85 91 cherrypy.config.outputConfigMap() 86 92 … … 88 94 configure() 89 95 90 for func in cherrypy.server.on StartServerList:96 for func in cherrypy.server.on_start_server_list: 91 97 func() 92 98 self.start_http_server() … … 117 123 return 118 124 119 if cherrypy.config.get('server.socket Port'):120 host = cherrypy.config.get('server.socket Host')121 port = cherrypy.config.get('server.socket Port')125 if cherrypy.config.get('server.socket_port'): 126 host = cherrypy.config.get('server.socket_host') 127 port = cherrypy.config.get('server.socket_port') 122 128 123 129 wait_for_free_port(host, port) … … 125 131 if not host: 126 132 host = 'localhost' 127 on What = "http://%s:%s/" % (host, port)133 on_what = "http://%s:%s/" % (host, port) 128 134 else: 129 on What = "socket file: %s" % cherrypy.config.get('server.socketFile')135 on_what = "socket file: %s" % cherrypy.config.get('server.socket_file') 130 136 131 137 # Instantiate the server. … … 146 152 self.wait_for_http_ready() 147 153 148 cherrypy.log("Serving HTTP on %s" % on What, 'HTTP')154 cherrypy.log("Serving HTTP on %s" % on_what, 'HTTP') 149 155 150 156 def wait_for_http_ready(self): … … 154 160 155 161 # Wait for port to be occupied 156 if cherrypy.config.get('server.socket Port'):157 host = cherrypy.config.get('server.socket Host')158 port = cherrypy.config.get('server.socket Port')162 if cherrypy.config.get('server.socket_port'): 163 host = cherrypy.config.get('server.socket_host') 164 port = cherrypy.config.get('server.socket_port') 159 165 wait_for_occupied_port(host, port) 160 166 … … 181 187 seen_threads[threadID] = i 182 188 183 for func in self.on StartThreadList:189 for func in self.on_start_thread_list: 184 190 func(i) 185 191 … … 195 201 196 202 for thread_ident, i in seen_threads.iteritems(): 197 for func in self.on StopThreadList:203 for func in self.on_stop_thread_list: 198 204 func(i) 199 205 seen_threads.clear() 200 206 201 for func in self.on StopServerList:207 for func in self.on_stop_server_list: 202 208 func() 203 209 … … 221 227 """Restart, including any HTTP servers.""" 222 228 self.stop() 223 for func in self.on StartServerList:229 for func in self.on_start_server_list: 224 230 func() 225 231 self.start_http_server() … … 263 269 # If sessions are stored in files and we 264 270 # use threading, we need a lock on the file 265 if (conf('server.thread Pool') > 1266 and conf('session.storage Type') == 'file'):271 if (conf('server.thread_pool') > 1 272 and conf('session.storage_type') == 'file'): 267 273 cherrypy._sessionFileLock = threading.RLock() 268 274 269 275 # set cgi.maxlen which will limit the size of POST request bodies 270 cgi.maxlen = conf('server.max RequestSize')276 cgi.maxlen = conf('server.max_request_size') 271 277 272 278 # Set up the profiler if requested. … … 283 289 def check_port(host, port): 284 290 """Raise an error if the given port is not free on the given host.""" 285 sock File = cherrypy.config.get('server.socketFile')286 if sock File:291 sock_file = cherrypy.config.get('server.socket_file') 292 if sock_file: 287 293 return 288 294 trunk/cherrypy/_cputil.py
r837 r856 55 55 return objectTrail 56 56 57 def get SpecialAttribute(name):57 def get_special_attribute(name, alternate_name = None): 58 58 """Return the special attribute. A special attribute is one that 59 59 applies to all of the children from where it is defined, such as 60 _cp FilterList."""60 _cp_filters.""" 61 61 62 62 # First, we look in the right-most object to see if this special … … 74 74 return globals()[name] 75 75 except KeyError: 76 if alternate_name: 77 return get_special_attribute(alternate_name) 76 78 msg = "Special attribute %s could not be found" % repr(name) 77 79 raise cherrypy.HTTPError(500, msg) … … 80 82 """Default handler for a Request-URI of '*'.""" 81 83 response = cherrypy.response 82 response.header Map['Content-Type'] = 'text/plain'84 response.headers['Content-Type'] = 'text/plain' 83 85 84 86 # OPTIONS is defined in HTTP 1.1 and greater 85 87 request = cherrypy.request 86 88 if request.method == 'OPTIONS' and request.version >= 1.1: 87 response.header Map['Allow'] = 'HEAD, GET, POST, PUT, OPTIONS'89 response.headers['Allow'] = 'HEAD, GET, POST, PUT, OPTIONS' 88 90 else: 89 response.header Map['Allow'] = 'HEAD, GET, POST'91 response.headers['Allow'] = 'HEAD, GET, POST' 90 92 return "" 91 93 _cpGlobalHandler.exposed = True … … 97 99 now.day, month, now.year, now.hour, now.minute, now.second) 98 100 99 def _cp LogAccess():101 def _cp_log_access(): 100 102 """ Default method for logging access """ 101 103 … … 107 109 'r': cherrypy.request.requestLine, 108 110 's': cherrypy.response.status.split(" ", 1)[0], 109 'b': cherrypy.response.header Map.get('Content-Length', '') or "-",111 'b': cherrypy.response.headers.get('Content-Length', '') or "-", 110 112 } 111 113 112 if cherrypy.config.get('server.log ToScreen', True):114 if cherrypy.config.get('server.log_to_screen', True): 113 115 print s 114 116 115 fname = cherrypy.config.get('server.log AccessFile', '')117 fname = cherrypy.config.get('server.log_access_file', '') 116 118 if fname: 117 119 f = open(fname, 'ab') … … 122 124 _log_severity_levels = {0: "INFO", 1: "WARNING", 2: "ERROR"} 123 125 124 def _cp LogMessage(msg, context = '', severity = 0):126 def _cp_log_message(msg, context = '', severity = 0): 125 127 """Default method for logging messages (error log). 126 128 … … 133 135 s = ' '.join((logtime(), context, level, msg)) 134 136 135 if cherrypy.config.get('server.log ToScreen', True):137 if cherrypy.config.get('server.log_to_screen', True): 136 138 print s 137 139 138 fname = cherrypy.config.get('server.log File', '')140 fname = cherrypy.config.get('server.log_file', '') 139 141 #logdir = os.path.dirname(fname) 140 142 #if logdir and not os.path.exists(logdir): … … 204 206 205 207 template = _HTTPErrorTemplate 206 error PageFile = cherrypy.config.get('errorPage.%s' % code, '')207 if error PageFile:208 error_page_file = cherrypy.config.get('error_page.%s' % code, '') 209 if error_page_file: 208 210 try: 209 template = file(error PageFile, 'rb').read()211 template = file(error_page_file, 'rb').read() 210 212 except: 211 213 m = kwargs['message'] … … 219 221 220 222 221 def _cp OnHTTPError(status, message):222 """ Default _cp OnHTTPError method.223 def _cp_on_http_error(status, message): 224 """ Default _cp_on_http_error method. 223 225 224 226 status should be an int. … … 227 229 logmsg = "" 228 230 229 if cherrypy.config.get('server.log Tracebacks', True):231 if cherrypy.config.get('server.log_tracebacks', True): 230 232 logmsg = tb 231 if cherrypy.config.get('server.log RequestHeaders', True):232 h = [" %s: %s" % (k, v) for k, v in cherrypy.request.header s]233 if cherrypy.config.get('server.log_request_headers', True): 234 h = [" %s: %s" % (k, v) for k, v in cherrypy.request.header_list] 233 235 logmsg += 'Request Headers:\n' + '\n'.join(h) 234 236 if logmsg: 235 237 cherrypy.log(logmsg, "HTTP") 236 238 237 if not cherrypy.config.get('server.show Tracebacks', False):239 if not cherrypy.config.get('server.show_tracebacks', False): 238 240 tb = None 239 241 … … 245 247 "Vary", "Content-Encoding", "Content-Length", "Expires", 246 248 "Content-Location", "Content-MD5", "Last-Modified"]: 247 if response.header Map.has_key(key):248 del response.header Map[key]249 if response.headers.has_key(key): 250 del response.headers[key] 249 251 250 252 if status != 416: … … 255 257 # A response with status code 206 (Partial Content) MUST NOT 256 258 # include a Content-Range field with a byte-range- resp-spec of "*". 257 if response.header Map.has_key("Content-Range"):258 del response.header Map["Content-Range"]259 if response.headers.has_key("Content-Range"): 260 del response.headers["Content-Range"] 259 261 260 262 # In all cases, finalize will be called after this method, … … 263 265 content = getErrorPage(status, traceback=tb, message=message) 264 266 response.body = content 265 response.header Map['Content-Length'] = len(content)266 response.header Map['Content-Type'] = "text/html"267 response.headers['Content-Length'] = len(content) 268 response.headers['Content-Type'] = "text/html" 267 269 268 270 be_ie_unfriendly(status) … … 297 299 content = content + (" " * (s - l)) 298 300 response.body = content 299 response.headerMap['Content-Length'] = len(content) 301 response.headers['Content-Length'] = len(content) 302 303 def lower_to_camel(s): 304 """Turns lowercase_with_underscore into camelCase.""" 305 sp = s.split('_') 306 new_sp = [] 307 for i, s in enumerate(sp): 308 if i != 0: 309 s = s[0].upper() + s[1:] 310 new_sp.append(s) 311 return ''.join(new_sp) 300 312 301 313 def formatExc(exc=None): … … 334 346 [body]) 335 347 336 def _cp OnError():337 """ Default _cp OnError method """348 def _cp_on_error(): 349 """ Default _cp_on_error method """ 338 350 # Allow logging of only *unexpected* HTTPError's. 339 if (not cherrypy.config.get('server.log Tracebacks', True)340 and cherrypy.config.get('server.log UnhandledTracebacks', True)):351 if (not cherrypy.config.get('server.log_tracebacks', True) 352 and cherrypy.config.get('server.log_unhandled_tracebacks', True)): 341 353 cherrypy.log(formatExc()) 342 354 … … 344 356 345 357 346 _cp FilterList= []347 358 _cp_filters = [] 359 trunk/cherrypy/_cpwsgi.py
r851 r856 55 55 56 56 # Trap screen output from BaseHTTPRequestHandler.log_message() 57 if not cherrypy.config.get('server.log ToScreen'):57 if not cherrypy.config.get('server.log_to_screen'): 58 58 sys.stderr = NullWriter() 59 59 … … 73 73 translate_headers(environ), 74 74 environ['wsgi.input']) 75 s, h, b = response.status, response.header s, response.body75 s, h, b = response.status, response.header_list, response.body 76 76 exc = None 77 77 except (KeyboardInterrupt, SystemExit): … … 80 80 tb = _cputil.formatExc() 81 81 cherrypy.log(tb) 82 if not cherrypy.config.get("server.show Tracebacks", False):82 if not cherrypy.config.get("server.show_tracebacks", False): 83 83 tb = "" 84 84 s, h, b = _cputil.bareError(tb) … … 125 125 def __init__(self, socket, addr, server): 126 126 _cpwsgiserver.HTTPRequest.__init__(self, socket, addr, server) 127 mhs = int(cherrypy.config.get('server.max RequestHeaderSize',127 mhs = int(cherrypy.config.get('server.max_request_header_size', 128 128 500 * 1024)) 129 129 &
