[Zope3-Users] Problems with a catalog

Gary Poster gary at zope.com
Wed Sep 28 08:46:28 EDT 2005

On Sep 27, 2005, at 10:01 PM, Tom Dossis wrote:

> 1. How do I add a catalog to a site ?

Hi Tom.  Looks like you might have already worked yourself out of  
this, but I'll respond for the list, at least.

If you are creating and configuring a site programmatically within a  
single transaction, and adding multiple tools, some of which depend  
on the others, then you typically need to do a setSite dance around  
the whole thing.  For instance (and there are many variations, such  
as creating a site then letting event subscribers respond, but here's  
a simple case):


import zope.app.component.hooks # I believe this location is slated  
for improvement
import zope.event
import zope.app.event.objectevent

def makesite(container, name):
     object = MySiteFactory()
     container[name] = object
     sm = zope.app.component.site.LocalSiteManager(object)
     old_site = zope.app.component.hooks.getSite()
         # XXX build your tools in the site manager here, and do  
other configuration


Moreover, you may also need direction in adding local utilities.  The  
general pattern is this.  This also may be slated for improvement,  
like the location for the getSite/setSite import above.

Given an object that is a site (i.e., has a site manager):
- get the site manager (sm = site.getSiteManager())
- get the package into which you want to add the utility (pkg = sm 
- create the utility
- fire off a creation event, as illustrated in code above
- get a name chooser for the package and ask it to choose a name for  
the utility (name_in_package =  
(suggested_name, utility))
- add it to the package (pkg[name_in_container] = utility)
- make a utility registration for name and interface you are going to  
look up the utility with--note this is usually *not* the  
name_in_package above (reg = zope.app.utility.UtilityRegistration 
(name, interface, utility))
- add the registration to the package's registration manager  
- make the registration active (reg.status =  


Hope that helps


More information about the Zope3-users mailing list