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

Ticket #801 (defect)

Opened 7 months ago

Last modified 6 months ago

cherrypy._cpwsgi.CPWSGIApp is incompatible with twill 0.9b1

Status: new

Reported by: mchapman87501@gmail.com Assigned to: rdelon
Priority: normal Milestone:
Component: CherryPy code Keywords:
Cc:

In trying to write nose/twill unit tests for a CherryPy 3 application, I was unable to use cherrypy._cpwsgi.CPWSGIApp as the twill app-creation function. My specific CherryPy application class worked fine as the app-creation function.

Here's a script to demonstrate the problem.

#!/usr/bin/env python
# encoding: utf-8
import sys, logging, StringIO, twill, cherrypy
from twill import commands
from cherrypy._cpwsgi import CPWSGIApp

class DemoApp(object):
    @cherrypy.expose
    def index(self, *args, **kw):
        return '''<html><head><title>Test</title></head>
        <body><p>This is a test.</p></body>
        </html>'''
    
class TestCase(object):
    def setup(self):
        siteSettings = {'server.environment': 'development',
                        'server.socket_port': 8080, 'log.screen': False}
        cherrypy.config.update(siteSettings)
        wsgi_app = cherrypy.tree.mount(DemoApp(), "/", {})
        cherrypy.engine.start()
        
        def getApp():
            # return wsgi_app   # This works.
            return CPWSGIApp   # This does not.
            
        twill.add_wsgi_intercept('localhost', 8080, getApp)
        self.outp = StringIO.StringIO()
        twill.set_output(self.outp)
        
    def teardown(self):
        twill.remove_wsgi_intercept('localhost', 8080)
        cherrypy.engine.stop()
        logging.debug("Twill output:\n%s" % self.outp.getvalue())
            
    def test1(self):
        commands.go("http://localhost:8080/index")
        
def main():
    logging.basicConfig(level=logging.DEBUG)

    import nose
    logging.debug("sys.platform: %s" % sys.platform)
    logging.debug("Using CherryPy %s, twill %s, nose %s" % 
                  (cherrypy.__version__, twill.__version__, nose.__version__))
    nose.main(defaultTest=__file__)
    
if __name__ == "__main__":
    main()

When run with Python 2.5.2, CherryPy 3.1.0beta3, twill 0.9b1 and nose 0.10.1 on Mac OS X 10.5.2, this produces a traceback ending in

File ".../lib/python2.5/site-packages/CherryPy-3.1b1-py2.5.egg/cherrypy/_cpwsgi.py", line 291, in __init__
    self.pipeline.extend(pipeline)
TypeError: 'function' object is not iterable

The problem was first observed with CherryPy 3.0.2.

Change History

04/26/08 20:34:06: Modified by fumanchu

I don't see how. It would be nice to have the complete traceback.

Hosted by WebFaction

Log in as guest/cpguest to create tickets