On Fri, Dec 14, 2007 at 07:29:59PM +0100, Christophe Combelles wrote:
> how do I automatically create some needed object at application startup?
>
> Do it by subscribing to IDatabaseOpenedWithRootEvent (from 
> zope.app.appsetup)
>
> Example code:
>
> @adapter(IDatabaseOpenedWithRootEvent)
> def CreateMyContainer(event):
>     conn = event.database.open()
>     root = conn.root()['Application']

I would use ZopePublication.root_name instead of hardcoding
'Application' here.  Or maybe reuse getInformationFromEvent from
zope.app.appsetup.bootstrap, although it smells like an internal
function.

>     if 'mycontainer' not in root:
>         root['mycontainer'] = MyContainer()
>     transaction.commit()
>     conn.close()
>
> Then register this subscriber in your configure.zcml:
> <subscriber handler="myapp.CreateMyContainer" />

Marius Gedminas
-- 
<niemeyer> I'm wondering why we have defineChecker() defined twice with exactly
           the same implementation under zope.security.checker...
<niemeyer> Is it some kind of high-availability system? :-)
                -- #zope3-dev

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Zope-Dev maillist  -  Zope-Dev@zope.org
http://mail.zope.org/mailman/listinfo/zope-dev
**  No cross posts or HTML encoding!  **
(Related lists - 
 http://mail.zope.org/mailman/listinfo/zope-announce
 http://mail.zope.org/mailman/listinfo/zope )

Reply via email to