Many places in the configuration take pyref attributes. These reference a module/function name. The general pattern is:
pyref="location:function_name"
The location can be a module name, or file:/path/to/filename.py. If it is a literal filename, then the file is exec’d and turned into a module that way. All references are to functions (or callable objects), and so you must give the function name. Note that the file: case isn’t a URL, just a path.
pyarg-foo="bar"
You can pass extra ad hoc arguments to the function using attributes in this form. This would add the keyword argument foo="bar" to the function call. All arguments have string (well, unicode) values.
You can use a <theme> like:
<theme pyref="file:/home/me/src/customize-deliverance.py:get_theme"
pyarg-default_theme="default"
pyarg-base="/home/me/src/custom-themes"
pyarg-base_url="/custom-themes" />
<proxy path="/custom-themes">
<dest href="file:///home/me/src/custom-themes" />
</proxy>
Then your code might look like:
def get_theme(request, response, log, default_theme, base, base_url): host = request.host.split(':')[0] if os.path.exists(os.path.join(base, host, 'theme.html'): return base_url + '/' + host + '/theme.html' elif not default_theme: log.fatal(None, "Theme for host %r doesn't exist and no default theme was given" % host) raise AbortTheme("No theme found") else: log.debug(None, "Falling back to default theme") return base_url + '/' + default_theme + '/theme.html'
You can disallow Python references using deliverance-proxy with:
<server-settings>
<execute-pyref>false</execute-pyref>
</server-settings>