Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Changeset 1805

Show
Ignore:
Timestamp:
10/29/07 00:43:34
Author:
fumanchu
Message:

Final 3.0.x fix for #718 (High count of uncollectable objects).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • branches/cherrypy-3.0.x/cherrypy/test/test_wsgi_ns.py

    r1430 r1805  
    77def setup_server(): 
    88     
     9    class WSGIResponse(object): 
     10         
     11        def __init__(self, appresults): 
     12            self.appresults = appresults 
     13            self.iter = iter(appresults) 
     14         
     15        def __iter__(self): 
     16            return self 
     17         
     18        def next(self): 
     19            return self.iter.next() 
     20         
     21        def close(self): 
     22            if hasattr(self.appresults, "close"): 
     23                self.appresults.close() 
     24     
     25     
    926    class ChangeCase(object): 
    1027         
     
    1431         
    1532        def __call__(self, environ, start_response): 
    16             res = ''.join(self.app(environ, start_response)) 
    17             return [getattr(res, self.to)()] 
     33            res = self.app(environ, start_response) 
     34            class CaseResults(WSGIResponse): 
     35                def next(this): 
     36                    return getattr(this.iter.next(), self.to)() 
     37            return CaseResults(res) 
    1838     
    19     def replace(app, map={}): 
    20         def replace_app(environ, start_response): 
    21             for line in app(environ, start_response): 
    22                 for k, v in map.iteritems(): 
    23                     line = line.replace(k, v) 
    24                 yield line 
    25         return replace_app 
     39    class Replacer(object): 
     40         
     41        def __init__(self, app, map={}): 
     42            self.app = app 
     43            self.map = map 
     44         
     45        def __call__(self, environ, start_response): 
     46            res = self.app(environ, start_response) 
     47            class ReplaceResults(WSGIResponse): 
     48                def next(this): 
     49                    line = this.iter.next() 
     50                    for k, v in self.map.iteritems(): 
     51                        line = line.replace(k, v) 
     52                    return line 
     53            return ReplaceResults(res) 
    2654     
    2755    class Root(object): 
     
    3260     
    3361     
    34     root_conf = {'wsgi.pipeline': [('replace', replace)], 
     62    root_conf = {'wsgi.pipeline': [('replace', Replacer)], 
    3563                 'wsgi.replace.map': {'L': 'X', 'l': 'r'}, 
    3664                 } 
  • branches/cherrypy-3.0.x/cherrypy/test/test_wsgiapps.py

    r1586 r1805  
    2020            output.append('%s: %s\n' % (k,environ[k])) 
    2121        return output 
    22  
     22     
    2323    def test_empty_string_app(environ, start_response): 
    2424        status = '200 OK' 
     
    2727        return ['Hello', '', ' ', '', 'world'] 
    2828     
    29     def reversing_middleware(app): 
    30         def _app(environ, start_response): 
     29     
     30    class WSGIResponse(object): 
     31         
     32        def __init__(self, appresults): 
     33            self.appresults = appresults 
     34            self.iter = iter(appresults) 
     35         
     36        def __iter__(self): 
     37            return self 
     38         
     39        def next(self): 
     40            return self.iter.next() 
     41         
     42        def close(self): 
     43            if hasattr(self.appresults, "close"): 
     44                self.appresults.close() 
     45     
     46     
     47    class ReversingMiddleware(object): 
     48         
     49        def __init__(self, app): 
     50            self.app = app 
     51         
     52        def __call__(self, environ, start_response): 
    3153            results = app(environ, start_response) 
    32             if not isinstance(results, basestring): 
    33                 results = "".join(results) 
    34             results = list(results
    35             results.reverse() 
    36             return ["".join(results)] 
    37         return _app 
     54            class Reverser(WSGIResponse): 
     55                def next(this): 
     56                    line = list(this.iter.next()
     57                    line.reverse() 
     58                    return "".join(line) 
     59            return Reverser(results) 
    3860     
    3961    class Root: 
     
    6284    # be pulled from the WSGI environ each time. 
    6385    app = cherrypy.Application(Root(), script_name=None) 
    64     cherrypy.tree.graft(reversing_middleware(app), '/hosted/app2') 
     86    cherrypy.tree.graft(ReversingMiddleware(app), '/hosted/app2') 
    6587 
    6688from cherrypy.test import helper 

Hosted by WebFaction

Log in as guest/cpguest to create tickets