[Zope3-Users] Re: Creating objects in software space when making site

Florian Lindner mailinglists at xgm.de
Tue Mar 7 06:49:30 EST 2006


Hello,
I've tried from __init__ so content is self in my case (at least I think so):

from zope.app.component import site
from zope.proxy import removeAllProxies

class Centershock(BTreeContainer, SiteManagerContainer):
    __doc__ = ICentershock.__doc__
    
    implements(ICentershock)    
        
    def __init__(self):
        """ Makes this object a site and add some required utitlies."""
        bare = removeAllProxies(self)
        sm = site.LocalSiteManager(bare)
        self.setSiteManager(sm)


That gives the wierd error:

  File "/home/florian/Zope3/src/zope/interface/adapter.py", line 481, in 
subscribers
    subscribers = [subscription(*objects)
  File "/home/florian/Zope3/src/zope/app/container/contained.py", line 183, in 
dispatchToSublocations
    for sub in subs.sublocations():
  File "/home/florian/Zope3/src/zope/app/container/contained.py", line 214, in 
sublocations
    for key in container:
  File "/home/florian/Zope3/src/zope/app/container/sample.py", line 56, in 
__iter__
    return iter(self.__data)
AttributeError: 'Centershock' object has no attribute '_SampleContainer__data'


Any idea?

Thanks,

Florian



Am Dienstag, 7. März 2006 10:05 schrieb Andreas Elvers:
> Florian Lindner wrote:
> > Hello,
> > my content object depends on a number of utilities to be present. It is
> > usually also used as a site. During development it happens often that I
> > delete and recreate it.
> > Can I install a hook or something so I can make that these utilies are
> > being created when my objects becomes a site? How do I create utitlies in
> > software space?
>
> Hi,
>
> I'm creating a special add view of my application (). If you add a foo
> it will be created with a LocalSiteManager and a catalog. Hope this
> helps.
>
> Now create the view class you defined in the browser configure.zcml
> inside foo.py:
>
> from zope.app import zapi
> from zope.proxy import removeAllProxies
> from zope.app.component import site
> from zope.app.catalog.catalog import Catalog
> from zope.app.catalog.interfaces import ICatalog
> from zope.app.event.objectevent import ObjectCreatedEvent
> from zope.event import notify
> from myapp.helper import addLocalUtility
>
> class Foo(object):
>     class AddFoo(object):
>      """ Add a foo.
>      This special addform class is needed to add special initialization.
> (Catalog init)
>      """
>
>      def createAndAdd(self,data):
>          content = super(AddFoo, self).createAndAdd(data)
>          # get foo object, stripping off security proxy
>          bare = removeAllProxies(content)
>          # create a LocalSiteManager
>          sm = site.LocalSiteManager(bare)
>          # and assign it to Labor folder
>          content.setSiteManager(sm)


More information about the Zope3-users mailing list