[Zope3-dev] How to provide some default utilities for sub-site

Dominik Huber dominik.huber at perse.ch
Fri Nov 4 06:48:57 EST 2005


Hi Adam
You need location information (-> __parent__) for this setup. Regularly 
the object knows that information not until its addition to a container. 
Subscribe to ObjectAdded event and do the same setup within the handler 
and it will work.

Regards,
Dominik

Adam Groszer wrote:

>I'd like to provide some default utilities for my sub-site.
>As I checked there is the nice ensureUtility method but as it turns
>out it failes with
>
>...
>  Module szscreen.app, line 339, in __init__
>    'WorkflowUtility', WorkflowUtility, 'wfu')
>  Module zope.app.appsetup.bootstrap, line 66, in ensureUtility
>    name, **kw
>  Module zope.app.appsetup.bootstrap, line 74, in addConfigureUtility
>    utility_name = addUtility(root_folder, utility_type, utility_factory, **kw)
>  Module zope.app.appsetup.bootstrap, line 83, in addUtility
>    package = getSiteManagerDefault(root_folder)
>  Module zope.app.appsetup.bootstrap, line 105, in getSiteManagerDefault
>    package = traverse(root_folder, package_name)
>  Module zope.app.traversing.api, line 96, in traverse
>    return traverser.traverse(path, request=request)
>  Module zope.app.traversing.adapters, line 120, in traverse
>    curr = IPhysicallyLocatable(self.context).getRoot()
>  Module zope.app.location.traversing, line 90, in getRoot
>    raise TypeError("Not enough context to determine location root")
>TypeError: Not enough context to determine location root
>
>when it checks the existence of the utility it uses
>  sm = root_folder.getSiteManager()
>but when it wants to add the non existing utility
>  package = getSiteManagerDefault(root_folder)
>which in turn wants to traverse like this
>  package_name = '/++etc++site/default'
>  package = traverse(root_folder, package_name)
>
>Is there any way to easily solve the task?
>
>Excerpt from szscreen.app:
>
>class IApplication(IReadContainer, IPossibleSite, IAttributeAnnotatable):
>      ""
>
>class Application(Persistent, SampleContainer, SiteManagerContainer):
>
>        implements(IApplication)
>        
>        def __init__(self):
>                SampleContainer.__init__(self)
>                
>                sm = LocalSiteManager(self)
>                self.setSiteManager(sm)
>
>                ...
>                
>                ensureUtility(self, IWorkflowUtility,
>                        'WorkflowUtility', WorkflowUtility, 'wfu')
>
>  
>


-- 
Dominik Huber

Perse Engineering GmbH
Jurastrasse 9a
CH-5406 Baden
              
E-Mail: dominik.huber at perse.ch
Telefon: ++41 56 534 7730

-------------- next part --------------
A non-text attachment was scrubbed...
Name: dominik.huber.vcf
Type: text/x-vcard
Size: 154 bytes
Desc: not available
Url : http://mail.zope.org/pipermail/zope3-dev/attachments/20051104/05c28d54/dominik.huber.vcf


More information about the Zope3-dev mailing list