RoutesDispatches causing Controller Class init to execute twice

Johan Hartzenberg <[email protected]> Thu, 3 Nov 2016 14:36:55 -0700 (PDT)
Newsgroups gmane.comp.python.cherrypy
Message-ID <[email protected]>
I have always wondered about the need to specify the controller in the 
dispatches connect and in the tree.mount call.

It is a bit of a pain since I initiate a pool of DB connections in my app 
class.

So in the main program I have

import cherrypy
from routehandlers import Echo_v1, setup_routes



if __name__ == '__main__':
    general_conf = {'/': {'tools.gzip.on': True,
                 'tools.trailing_slash.on': False,
                 'log.screen': False}}
    api_routes_conf = {}
    api_routes_conf.update(dict(general_conf))
    api_routes_conf['/'].update({'request.dispatch': setup_routes()})

    cherrypy.tree.mount(Echo_v1(), "/v1/", api_routes_conf)
    cherrypy.engine.start()
    cherrypy.engine.block()

And in the class def I have




import cherrypy

*# [...snip...]*

class Echo_v1(object):

    def __init__(self):
        dbname, dbuser, dbpass, dbhost = get_db_parameters()
        poolsize = cherrypy.config.get("db_conn_poolsize")
        self.dbpool = ConnectionPool(dbname, dbuser, dbpass, dbhost, poolsize)
        print("Created pool with %d Open DB connections" % self.dbpool.get_poolsize())


# [ ... snip ...]

def setup_routes():
    testCntrl = Echo_v1()
    d = cherrypy.dispatch.RoutesDispatcher()
    d.connect(name='echoback_route', route='/echoback',
              controller=testCntrl,
              action='echoaction')
    d.connect(name='index_route', route='/x',
              controller=testCntrl,
              action='index')



It works.... but the debug message appears twice and I see double the 
expected nr of open connections on the database.

So clearly the class __init__ runs twice, once in setup_routes and once in 
the main program when mounting the app.

I'm thinking I could create a class instance in the main and pass that to 
setup_routes and to the tree.mount call

But maybe setup_routes aught to be a special method in the app class.  And 
maybe I can have it update the app config all in one go?

Suggestions please!

-- 
You received this message because you are subscribed to the Google Groups "cherrypy-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to cherrypy-users+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
To post to this group, send email to cherrypy-users-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
Visit this group at https://groups.google.com/group/cherrypy-users.
For more options, visit https://groups.google.com/d/optout.