Changeset 891
- Timestamp:
- 12/28/05 21:13:13
- Files:
-
- trunk/cherrypy/filters/__init__.py (modified) (3 diffs)
- trunk/cherrypy/test/test.py (modified) (1 diff)
- trunk/cherrypy/test/test_core.py (modified) (3 diffs)
- trunk/cherrypy/test/test_custom_filters.py (added)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/cherrypy/filters/__init__.py
r883 r891 2 2 from cherrypy import _cputil 3 3 4 4 5 # These are in order for a reason! 5 # They must be strings matching keys in classMap6 6 _input_order = [ 7 'CacheFilter',8 'LogDebugInfoFilter',9 'BaseUrlFilter',10 'VirtualHostFilter',11 'DecodingFilter',12 'SessionFilter',13 'SessionAuthenticateFilter',14 'StaticFilter',15 'NsgmlsFilter',16 'TidyFilter',17 'XmlRpcFilter',7 "cherrypy.filters.cachefilter.CacheFilter", 8 "cherrypy.filters.logdebuginfofilter.LogDebugInfoFilter", 9 "cherrypy.filters.baseurlfilter.BaseUrlFilter", 10 "cherrypy.filters.virtualhostfilter.VirtualHostFilter", 11 "cherrypy.filters.decodingfilter.DecodingFilter", 12 "cherrypy.filters.sessionfilter.SessionFilter", 13 "cherrypy.filters.sessionauthenticatefilter.SessionAuthenticateFilter", 14 "cherrypy.filters.staticfilter.StaticFilter", 15 "cherrypy.filters.nsgmlsfilter.NsgmlsFilter", 16 "cherrypy.filters.tidyfilter.TidyFilter", 17 "cherrypy.filters.xmlrpcfilter.XmlRpcFilter", 18 18 ] 19 19 20 20 _output_order = [ 21 'ResponseHeadersFilter',22 'XmlRpcFilter',23 'EncodingFilter',24 'TidyFilter',25 'NsgmlsFilter',26 'LogDebugInfoFilter',27 'GzipFilter',28 'SessionFilter',29 'CacheFilter',21 "cherrypy.filters.responseheadersfilter.ResponseHeadersFilter", 22 "cherrypy.filters.xmlrpcfilter.XmlRpcFilter", 23 "cherrypy.filters.encodingfilter.EncodingFilter", 24 "cherrypy.filters.tidyfilter.TidyFilter", 25 "cherrypy.filters.nsgmlsfilter.NsgmlsFilter", 26 "cherrypy.filters.logdebuginfofilter.LogDebugInfoFilter", 27 "cherrypy.filters.gzipfilter.GzipFilter", 28 "cherrypy.filters.sessionfilter.SessionFilter", 29 "cherrypy.filters.cachefilter.CacheFilter", 30 30 ] 31 31 … … 45 45 } 46 46 47 47 48 def init(): 48 49 """Initialize the filters.""" 49 50 from cherrypy.filters import baseurlfilter, cachefilter, \ 51 decodingfilter, encodingfilter, gzipfilter, logdebuginfofilter, \ 52 staticfilter, nsgmlsfilter, tidyfilter, xmlrpcfilter, \ 53 sessionauthenticatefilter, sessionfilter, \ 54 responseheadersfilter, virtualhostfilter 55 56 classMap = { 57 'BaseUrlFilter' : baseurlfilter.BaseUrlFilter, 58 'CacheFilter' : cachefilter.CacheFilter, 59 'DecodingFilter' : decodingfilter.DecodingFilter, 60 'EncodingFilter' : encodingfilter.EncodingFilter, 61 'GzipFilter' : gzipfilter.GzipFilter, 62 'LogDebugInfoFilter' : logdebuginfofilter.LogDebugInfoFilter, 63 'NsgmlsFilter' : nsgmlsfilter.NsgmlsFilter, 64 'ResponseHeadersFilter': 65 responseheadersfilter.ResponseHeadersFilter, 66 'SessionAuthenticateFilter': 67 sessionauthenticatefilter.SessionAuthenticateFilter, 68 'SessionFilter' : sessionfilter.SessionFilter, 69 'StaticFilter' : staticfilter.StaticFilter, 70 'TidyFilter' : tidyfilter.TidyFilter, 71 'VirtualHostFilter' : virtualhostfilter.VirtualHostFilter, 72 'XmlRpcFilter' : xmlrpcfilter.XmlRpcFilter, 73 } 50 from cherrypy.lib import cptools 74 51 75 52 instances = {} … … 78 55 conf = cherrypy.config.get 79 56 80 for name in _input_order + conf('server.inputFilters', []):81 f = instances.get( name)57 for clsname in _input_order + conf('server.inputFilters', []): 58 f = instances.get(clsname) 82 59 if f is None: 83 f = instances[name] = classMap[name]() 60 cls = cptools.attributes(clsname) 61 f = instances[clsname] = cls() 84 62 inputs.append(f) 85 63 86 for name in conf('server.outputFilters', []) + _output_order:87 f = instances.get( name)64 for clsname in conf('server.outputFilters', []) + _output_order: 65 f = instances.get(clsname) 88 66 if f is None: 89 f = instances[name] = classMap[name]() 67 cls = cptools.attributes(clsname) 68 f = instances[clsname] = cls() 90 69 outputs.append(f) 91 70 trunk/cherrypy/test/test.py
r884 r891 318 318 'test_config', 319 319 'test_core', 320 'test_custom_filters', 320 321 'test_decodingencoding_filter', 321 322 'test_gzip_filter', trunk/cherrypy/test/test_core.py
r884 r891 326 326 327 327 328 class NadsatFilter:329 330 def before_finalize(self):331 self.ended = False332 def nadsat_it_up(body):333 for chunk in body:334 chunk = chunk.replace("good", "horrorshow")335 chunk = chunk.replace("piece", "lomtick")336 yield chunk337 cherrypy.response.body = nadsat_it_up(cherrypy.response.body)338 339 def on_end_request(self):340 # This runs after the request has been completely written out.341 cherrypy.response.body = "razdrez"342 self.ended = True343 344 _nf = NadsatFilter()345 346 class CPFilterList(Test):347 348 _cp_filters = [_nf]349 350 def index(self):351 return "A good piece of cherry pie"352 353 def err(self):354 raise ValueError()355 356 def errinstream(self):357 raise ValueError()358 yield "confidential"359 360 361 328 log_file = os.path.join(localDir, "error.log") 362 329 log_access_file = os.path.join(localDir, "access.log") … … 399 366 '/error/rethrow': { 400 367 'server.throw_errors': True, 401 },402 '/cpfilterlist/errinstream': {403 'streamResponse': True,404 368 }, 405 369 }) … … 610 574 else: 611 575 self.assertBody("(['http://127.0.0.1:8000/'], 302)") 612 613 def testCPFilterList(self):614 self.getPage("/cpfilterlist/")615 # If body is "razdrez", then on_end_request is being called too early.616 self.assertBody("A horrorshow lomtick of cherry pie")617 # If this fails, then on_end_request isn't being called at all.618 self.assertEqual(_nf.ended, True)619 620 ignore = helper.webtest.ignored_exceptions621 ignore.append(ValueError)622 try:623 valerr = '\n raise ValueError()\nValueError'624 self.getPage("/cpfilterlist/err")625 # If body is "razdrez", then on_end_request is being called too early.626 self.assertErrorPage(500, pattern=valerr)627 # If this fails, then on_end_request isn't being called at all.628 self.assertEqual(_nf.ended, True)629 630 # If body is "razdrez", then on_end_request is being called too early.631 if cherrypy.server.httpserver is None:632 self.assertRaises(ValueError, self.getPage,633 "/cpfilterlist/errinstream")634 else:635 self.getPage("/cpfilterlist/errinstream")636 # Because this error is raised after the response body has637 # started, the status should not change to an error status.638 self.assertStatus("200 OK")639 self.assertBody("Unrecoverable error in the server.")640 # If this fails, then on_end_request isn't being called at all.641 self.assertEqual(_nf.ended, True)642 finally:643 ignore.pop()644 576 645 577 def testFlatten(self):

