Re: [Zope-dev] advice on MountedFileStorage changes.
Anthony Baxter wrote
I've nearly completed the code to make MountedFileStorage able to create new FileStorages on demand, _however_...
I'm hitting a bit of a problem with the Product initialisation. Right now I'm just calling OFS.Application.initialize(), which goes through and re-imports all the products, and adds them to the global meta_types list. This is bad - it means it's slow as hell reimporting everything, and everything gets listed twice. It's fine after a restart, but that's not much help.
Ok, I've gone with the 'subclass Application' approach, and made a couple of slight changes to the core code. Now, stuff won't be added to global registries like Products.meta_types if the application doesn't have isTopLevelPrincipiaApplicationObject set to true. It seems to work well, patch follows - any comments? Anthony. This patch (against current CVS, 2000-06-11) stops the addition of a new MountedFileStorage adding all the products to the master meta_types list. It's not _essential_, but without it, you'll find you need to restart Zope to get the 'Add' list back to sanity. Index: OFS/Application.py =================================================================== RCS file: /cvs-repository/Zope2/lib/python/OFS/Application.py,v retrieving revision 1.128 diff -u -r1.128 Application.py --- Application.py 2000/06/09 23:52:45 1.128 +++ Application.py 2000/06/11 07:00:30 @@ -511,7 +511,8 @@ error=sys.exc_info()) get_transaction().abort() - Products.meta_types=Products.meta_types+tuple(meta_types) + if app.isTopLevelPrincipiaApplicationObject: + Products.meta_types=Products.meta_types+tuple(meta_types) Globals.default__class_init__(Folder) Index: App/ProductContext.py =================================================================== RCS file: /cvs-repository/Zope2/lib/python/App/ProductContext.py,v retrieving revision 1.22 diff -u -r1.22 ProductContext.py --- ProductContext.py 2000/06/09 01:22:13 1.22 +++ ProductContext.py 2000/06/11 07:00:30 @@ -202,12 +202,13 @@ if not hasattr(pack, '_m'): pack._m={} m=pack._m - Products.meta_types=Products.meta_types+( - { 'name': meta_type or instance_class.meta_type, - 'action': ('manage_addProduct/%s/%s' % (pid, name)), - 'product': pid, - 'permission': permission, - },) + if app.isTopLevelPrincipiaApplicationObject: + Products.meta_types=Products.meta_types+( + { 'name': meta_type or instance_class.meta_type, + 'action': ('manage_addProduct/%s/%s' % (pid, name)), + 'product': pid, + 'permission': permission, + },) m[name]=initial m[name+'__roles__']=pr
participants (1)
-
Anthony Baxter