[Zope-CMF] Re: Adding python packages to ProductsPath
Philipp von Weitershausen
philipp at weitershausen.de
Tue Jan 23 18:21:50 EST 2007
Wichert Akkerman wrote:
> At the moment it is not possible to use skin layers in pure python
> packages. This is caused by the DirectoryView implementation using
> a minimal path name for the layer id. This path name is created
> by CMFCore.utils.minimalpath, which uses the ProductsPaths list of
> directories to look for the filesystem directory and uses an absolute
> path if it can't find it. Since this absolute path will differ per
> install you can't use it in something like genericsetup profiles.
>
> The patch below fixes this by adding $INSTANCE_HOME/lib/python to the
> ProductsPaths list. This allows minimalpath to find python packages installed
> there.
>
> Are there any objections to commiting this to trunk?
I don't have any actual objections, but I find looking at
Products.__path__ a bit lame and way too close-minded, to be honest.
Your suggested addition doesn't make it better since you're broadening
the scope just a little bit. What about packages installed somewhere
else than instance/lib/python? The idea of using Python packages, after
all, is that they can be installed *anywhere* on the PYTHONPATH. The
whole thing would already break if a package would be installed as an
egg, even it was installed into lib/python.
The Right Thing(tm) IMO would be look at Zope's own products registry
and inspect that for directories in which to look for skins. This would
also be a future proof solution should
http://wiki.zope.org/zope2/EggifyingZopesExtensionMechanismQuotProductsQuot
be implemented.
Philipp
> Index: utils.py
> ===================================================================
> --- utils.py (revision 72192)
> +++ utils.py (working copy)
> @@ -719,8 +719,10 @@
> return os_path.normpath(p.replace('\\','/')).replace('\\','/')
>
> import Products
> -ProductsPath = [ abspath(ppath) for ppath in Products.__path__ ]
> +ProductsPath = [ abspath(ppath) for ppath in Products.__path__ ] + \
> + [ os_path.join(INSTANCE_HOME, 'lib', 'python') ]
>
> +
> security.declarePublic('expandpath')
> def expandpath(p):
> """ Convert minimal filepath to (expanded) filepath.
>
>
--
http://worldcookery.com -- Professional Zope documentation and training
Next Zope 3 training at Camp5: http://trizpug.org/boot-camp/camp5
More information about the Zope-CMF
mailing list