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.