diff options
| author | ianb <devnull@localhost> | 2005-06-14 04:23:28 +0000 |
|---|---|---|
| committer | ianb <devnull@localhost> | 2005-06-14 04:23:28 +0000 |
| commit | 513f5efb4edee571c21f85f55b00f6e8ec2db69f (patch) | |
| tree | 41a4e88b6cb5fe681edcadfe572df19ab6442fda | |
| parent | 8f170ee6078e099e3d2b2109d7b3ea8fcf74246a (diff) | |
| download | paste-513f5efb4edee571c21f85f55b00f6e8ec2db69f.tar.gz | |
Added new document on configuration
| -rw-r--r-- | docs/configuration.txt | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/docs/configuration.txt b/docs/configuration.txt new file mode 100644 index 0000000..a7f155d --- /dev/null +++ b/docs/configuration.txt @@ -0,0 +1,159 @@ +Configuration In Paste +====================== + +:author: Ian Bicking <ianb@colorstudy.com> +:revision: $Rev$ +:date: $LastChangedDate$ + +.. contents:: + +Introduction +------------ + +This document covers Paste configuration; both how to use the +configuration from your application, and how to configure Paste +applications. + +Configuration Format +-------------------- + +Configuration files are Python syntax. That means any Python +expression can go in the files, and of course that they must be valid +Python. + +By default Paste will look for a configuration file named +``server.conf``, though you can specify a different (or additional) +configuration file with the ``-f`` option to ``paster``. + +All global variables in a configuration file are put into the +configuration. So a configuration file just looks like:: + + connection_string = 'dbname=foo' + server = 'wsgiutils' + port = 5000 + publish_object = 'myapp:app' + framework = 'fancy_framework' + +This configuration will be given to nearly all parts of the system, +and those parts will pick out variables that are of interest to them. +For example ``server = 'wsgiutils'`` is used by ``paster serve`` to +pick a server. ``framework = 'fancy_framework'`` is used to build +your WSGI application from the configuration file. +``connection_string = 'dbname=foo'`` is, presumably, used by your +application to open a database connection. + +Command-line Options +-------------------- + +The ``paster serve`` command also takes arbitrary command-line options, +and turns them into configuration values. So +``--connection-string=dbname=foo`` will add or overwrite the +configuration value. + +If the application or component cannot accept strings for a +configuration value, this will not work. Most components included +with Paste accept strings. Note that the empty string is false (e.g., +``--do-something=``) and a non-empty string is true (e.g., +``--do-something=t``). ``--do-something=f`` is **true** (since all +non-empty strings are true in Python). + +Other ``paster`` commands do not take arbitrary configuration values +like this. + +Including and Nesting Configuration +----------------------------------- + +Several configuration files can be loaded, and configuration files can +include other configuration files. Two commands in particular are +important for this:: + + include('filename.conf') + options = load('filename.conf') + +``include(filename)`` loads the given file, and uses all its +configuration values. ``load(filename)`` loads the file, but +*returns* all its configuration values -- this is for nested +configuration. So in this example ``options`` would be a dictionary +of configuration values. In most cases you'll use ``include()``. + +When a configuration file is being evaluated, it also has access to +all the values already loaded. So you can do:: + + index_files = ['index', 'main'] + include('other_file.conf') + +And in ``other_file.conf``:: + + index_files.append('default') + +This kind of flexibility is very useful, and gives +sub-configuration-files the ability to augment or replace previous +values. You can also use any other Python commands you like, +including things like:: + + js_url = '/js-lib' + calendar_url = js_url + '/calendar' + +One useful thing is to have "profiles". So you would start your +server like:: + + $ paster serve --profile=devel + +And in your configuration:: + + value1 = ... + (and other defaults) + include(profile + '.conf') + +This is a good way for overriding configuration for development and +production environments. + +Accessing Configuration +----------------------- + +When in a request, the object ``environ['paste.config']`` will give +you the configuration. This object is a dictionary-like object. You +can change values, and load more configuration files with +``conf.load(filename)``. For instance, you could use this to load +additional configuration for different requests. The configuration is +copied for every request, so modifications to the configuration do not +effect future or concurrent requests. As an example, if you are using +``urlparser.URLParser`` you could put this in your ``__init__.py``:: + + def urlparser_hook(environ): + environ['paste.config'].load( + os.path.join(os.path.dirname(__file__), 'dir.conf')) + +Frameworks are free to make this variable available through more +convenient means. + +Often, though, you'll find you need a configuration value in some +routine, and the request or the configuration was not passed in. In +these cases you can use ``paste.CONFIG``, which acts like a dictionary +and represents the current configuration (for this request or +process). + +``paste.CONFIG`` is a global object that can have configuration +*registered*. You do this like:: + + from paste import CONFIG + from paste.pyconfig import Config + conf = Config() + conf.load('file.conf') + CONFIG.push_process_config(conf) + +You can also use ``CONFIG.push_thread_config(conf)`` to just set the +configuration for the current thread. During a web request this is +done for you, so you can safely use ``paste.CONFIG`` to access the +configuration. If you are using the same configuration for other +means, like a background process, you can use ``push_process_config`` +to load the configuration manually. Also, the "main" +(``server.conf``) configuration is loaded as the process configuration +when using ``paster serve``. + +More Information +---------------- + +For more details of the configuration object and its use, see the +`reference documentation +<http://pythonpaste.org/docs/reference.html#module-paste-pyconfig>`_. |
