Set product configuration globally in zope.conf
I have a Zope product that needs to write in a centralized location, across multiple instances. The classic Python solution would be to write a variable in a config.py module and read that location from the code, but this feels unelegant in an environment that uses zc.buildout for deployment. The solution I have found is, as follows:
In buildout.cfg, in the instance part definition, add:
zope-conf-additional = <environment> mylocation ${buildout:directory}/var/mylocation </environment>
Next, inside the product code I have:
from App.config import getConfiguration import os conf = getConfiguration() dest = conf.environment['mylocation'] if not os.path.exists(dest): os.mkdir(dest)
There were 2 things that I had to research for this task: reading the global zope configuration (that's done with App.config.getConfiguration()) and the fact that you can't add arbitrary key/values in zope.conf and have to use the <environment> section.
Previous: Running Products.Gloworm on Plone 4