[Zope3-Users] Can't make site of a BTreeContainer

Florian Lindner mailinglists at xgm.de
Sat Mar 11 16:54:46 EST 2006


Am Samstag, 11. März 2006 16:59 schrieb Thierry FLORAC:
>   Hi,
>
> I'm currently building a photo management application for which I need
> to setup local utilities (a catalog...), so I want to make a site of my
> main folder, which is called a gallery.
> My current problem is that I can't define the folder as a site manager
> if it is subclassed from BTreeContainer ; the same code that follows
> works perfectly if my Gallery class just inherits from Folder.
> Here is the main structure of my code, mainly extracted from the "cubic"
> portal :
>
>         class IGalleryContainer (IContainer):
>             """Marker interface"""
>
>         class IGalleryFolder (IGalleryContainer):
>             """Photo management folder"""
>             def __setitem__ (name, object):
>                 """Add a new sub-folder"""
>             __setitem__.precondition =
> ItemTypePrecondition(IGalleryContainer,IGalleryPhoto)
>
>         class IGallery (IGalleryFolder):
>             """Marker interface"""
>
>         class GalleryFolder (BTreeContainer):
>             """Photo management folder"""
>
>             implements (IGalleryFolder)
>
>         class Gallery (GalleryFolder, SiteManagerContainer):
>             """Main gallery site"""
>
>             implements (IGallery)
>
>             def setupSiteManager(self):
>                 """Setup a sitemanager and related utilities
>
>                 Invoked through the setupGallery handler
>                 """
>                 self.setSiteManager(LocalSiteManager(self))
>                 setSite(self)
>
>                 default = self.getSiteManager()['default']
>                 reg_manager = default.registrationManager
>
>                 if 'intid' not in default:
>                     intids = IntIds()
>                     default['intid'] = intids
>                     intids_reg = UtilityRegistration('', IIntIds, intids)
>                     reg_manager.addRegistration(intids_reg)
>                     intids_reg.status = ActiveStatus
>
>                 if 'catalog' not in default:
>                     catalog = Catalog()
>                     default['catalog'] = catalog
>                     catalog_reg = UtilityRegistration('catalog', ICatalog,
> catalog) reg_manager.addRegistration(catalog_reg)
>                     catalog_reg.status = ActiveStatus
>
>                 catalog = default['catalog']
>                 index = SetIndex(field_name='getPathElements',
> interface=IPathElements, field_callable=True) catalog['path'] = index
>                 ...
>
> In fact, at the end of the "setupSiteManager" method, which is called
> through an event subscriber, "zapi.getPath(default)" returns the correct
> path (/mygallery/++etc++site/default) and the gallery folder is
> correctly marked as being a site in introspector. No exception is raised
> while setting the site, but any try to follow the "Site management" link
> returns an error, and the ++etc++site "sub-folder" seems to be
> vanished !
> The same problem appears if I don't call the "setupSiteManager" and try
> to create the site through the "Make a site" link.


Hi,

try to also derive your interface of the object that should become a site from 
zope.app.component.interfaces.IPossibleSite

 class IGallery (IGalleryFolder, IPossibleSite):


Hope this helps,

Florian


More information about the Zope3-users mailing list