I've got a webapp running on CherryPy that needs to access the CherryPy config files before a user creates a request. The docs say to use:
host = cherrypy.request.app.config['database']['host']
But that won't work outside of a user request. You can also use the application object when you start the app like so:
...
application = cherrypy.tree.mount(root, '/', app_conf) host = application.config['database']['host'] ...
But I can see no way of accessing 'application' from other classes outside of a user request.
I ask because our app looks at several databases a开发者_StackOverflow社区nd we set them up when the app starts rather than on user request. I have a feeling this would be useful in other places too; so is there any way to store a reference to 'application' somewhere or access it through the CherryPy API?
You can access it via the same cherrypy.tree object using the script name (minus the trailing slash):
application = cherrypy.tree.apps['']
host = application.config['database']['host']
However, as alluded to in other answers there are likely better ways to structure your code.
is there any way to store a reference to 'application' somewhere...
Just use normal Python. For a package called 'myapp':
# __init__.py
...
application = cherrypy.tree.mount(root, '/', app_conf)
...
# notarequest.py
import myapp
host = myapp.application.config['database']['host']
However, I would recommend using config to set up your database objects, and then inspect those database objects instead of inspecting the config.
精彩评论