On Fri, Mar 26, 2010 at 9:03 AM, andres <[email protected]> wrote: > Hi, > > I'm in the process of upgrading to Pylons 1.0 and I have some > questions about runtime configuration. > > According to the documentation (http://pylonshq.com/docs/en/1.0/ > configuration/) the proper way to access the runtime configuration is > via the pylons.config object: > > from pylons import config > > This works fine within the context of a WSGI app instance but outside > the context of an app instance (e.g. testing environment), the config > object is a bare-bones pylons config rather than the runtime > configuration I expect. For example, if I create a simple library > function to test for the presence of a runtime config key: > > # myapp/lib/util.py > from pylons import config > > def has_config_key(key): > return key in config > > then I see the following behavior when I run this test: > > # myapp/tests/functional/test_runtimeconfig.py > from myapp.tests import TestController > from myapp.lib.util import has_config_key > > class ConfigTest(TestController): > def test_app(self): > response = > self.app.get(url(controller='proxy',action='util_has_config_key',key='sqlalchemy.ur')) > self.assertEqual('True' in response.body, True) > > def test_func(self): > haskey = has_config_key('sqlalchemy.url') > self.assertEqual(haskey, False) > > This means that for code that depends on the runtime configuration but > which I want to execute outside the context of an WSGI app instance I > need to access the runtime configuration via a different method. One > way around this problem is to avoid "pylons.config" and instead > configure everything in myapp.config.environment.load_environment(). > Maybe that is a better design pattern. Another option is to cache > global_conf and local_conf in load_environment(). Before doing either > of these things though, I wanted to make sure I wasn't missing > something. > > How does Pylons recommend accessing the runtime configuration?
Are you calling nosetests with "--with-pylons=test.ini", or does setup.cfg contain the equivalent in the [nosetests] section? Does your TestController.__init__() method call paste.deploy.loadapp()? These should be enough to set up the 'config' object, call environment.py, and initialize the model. If your Pylons application is old, you may want to upgrade it to add these features. Pylons 1.0 / 0.10 changes the way the config is initialized. ``load_environment()`` returns it, so a standalone utility can access it without having to initialize the globals. That may be useful if you just need the config but aren't doing full application requests. Parsing the config manually is quite a hassle, as you can see from the source to loadapp(). So you'd want to avoid that. You can parse it using the standard ConfigParser, but it won't do some things Paste does such as "%(here)s" interpolation and underscored keys. -- Mike Orr <[email protected]> -- You received this message because you are subscribed to the Google Groups "pylons-discuss" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/pylons-discuss?hl=en.
