Hi CMF people, I patched the getDefaultAddableTypes method in Products.ATContentTypes, see: https://dev.plone.org/collective/changeset/88621 https://dev.plone.org/collective/changeset/88622
and I see there is almost the same code at Products.CMFCore.PortalFolder.PortalFolderBase.allowedContentTypes which is used by ATContentTypes.allowedContentTypes if mode=DISABLED. If anyone want to patch CMFCore, please do so. Please see the story below: -- Vincent Fretin On Mon, Jun 22, 2009 at 8:52 PM, Alexander Limi<l...@plone.org> wrote: > That's a nice optimization, kudos! > > > On Mon, 22 Jun 2009 10:32:15 -0700, Vincent Fretin > <vincent.fre...@gmail.com> wrote: > >> Hi, >> >> About this change, it speed sup a lot the creation of a Folder. >> I have a case where a user belong to 44 groups and there are a lot of >> local >> roles involved. >> The creation of a Folder took 4minutes, yes 4 minutes. >> >> At the creation of a Folder, for each field of the Schema, we execute >> setDefault. >> setDefault for locallyAllowedTypes field call getDefaultAddableTypes. >> getDefaultAddableTypes takes all the types from portal_types and check if >> you can add it to the not yet created Folder. Then it filters for allowed >> types specified by the FTI. >> My patch do the contrary, filter the allowed types specified by the FTI, >> then check isConstructionAllowed. >> >> The problem was that the execution of isConstructionAllowed call at the >> end >> checkLocalRolesAllowed from borg/localrole/workspace.py, and the >> execution >> of this method to check if I can add CMFTopic for example takes 2-3 >> seconds, >> simply because it need the Manager role, so the algorithm execute until >> the >> end. >> An unnecessary check because CMFTopic is filtered afterwards. >> >> Now my Folder creation take 10s with this change. >> >> >> On Mon, Jun 22, 2009 at 7:06 PM, Vincent Fretin >> <svn-chan...@plone.org>wrote: >> >>> Author: vincentfretin >>> Date: Mon Jun 22 17:06:49 2009 >>> New Revision: 88621 >>> >>> Modified: >>> >>> Products.ATContentTypes/branches/1.3/Products/ATContentTypes/lib/constraintypes.py >>> Products.ATContentTypes/branches/1.3/docs/HISTORY.txt >>> Log: >>> Modified lib/constraintypes.py:getDefaultAddableTypes method to check >>> isConstructionAllowed only for allowed types, not for all content types >>> in portal_types. isConstructionAllowed was called twice for each types. >>> >>> >>> Modified: >>> Products.ATContentTypes/branches/1.3/Products/ATContentTypes/lib/constraintypes.py >>> >>> ============================================================================== >>> --- >>> Products.ATContentTypes/branches/1.3/Products/ATContentTypes/lib/constraintypes.py >>> (original) >>> +++ >>> Products.ATContentTypes/branches/1.3/Products/ATContentTypes/lib/constraintypes.py >>> Mon Jun 22 17:06:49 2009 >>> @@ -297,15 +297,15 @@ >>> if context is None: >>> context = self >>> >>> - result = [] >>> portal_types = getToolByName(self, 'portal_types') >>> myType = portal_types.getTypeInfo(self) >>> - if myType is not None: >>> - for contentType in portal_types.listTypeInfo(context): >>> - if myType.allowType( contentType.getId() ): >>> - result.append( contentType ) >>> - else: >>> result = portal_types.listTypeInfo() >>> + # Don't give parameter context to portal_types.listTypeInfo(). >>> If >>> we do that, >>> + # listTypeInfo will execute t.isConstructionAllowed(context) >>> for >>> each content type >>> + # in portal_types. >>> + # The isConstructionAllowed should be done only on allowed >>> types. >>> + if myType is not None: >>> + return [t for t in result if myType.allowType(t.getId()) >>> and >>> t.isConstructionAllowed(context)] >>> >>> return [ t for t in result if t.isConstructionAllowed(context) ] >>> >>> >>> Modified: Products.ATContentTypes/branches/1.3/docs/HISTORY.txt >>> >>> ============================================================================== >>> --- Products.ATContentTypes/branches/1.3/docs/HISTORY.txt >>> (original) >>> +++ Products.ATContentTypes/branches/1.3/docs/HISTORY.txt Mon Jun >>> 22 >>> 17:06:49 2009 >>> @@ -1,6 +1,11 @@ >>> 1.3.3 unreleased >>> ================ >>> >>> +* Modified lib/constraintypes.py:getDefaultAddableTypes method to check >>> + isConstructionAllowed only for allowed types, not for all content >>> types >>> + in portal_types. isConstructionAllowed was called twice for each >>> types. >>> + [vincentfretin] >>> + >>> * Fix XHTML error in criterion_edit_form.cpt >>> [davisagli] >>> >>> >>> >>> ------------------------------------------------------------------------------ >>> Are you an open source citizen? Join us for the Open Source Bridge >>> conference! >>> Portland, OR, June 17-19. Two days of sessions, one day of unconference: >>> $250. >>> Need another reason to go? 24-hour hacker lounge. Register today! >>> >>> http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridge.org >>> _______________________________________________ >>> Collective-checkins mailing list >>> collective-check...@lists.sourceforge.net >>> https://lists.sourceforge.net/lists/listinfo/collective-checkins >>> >> >> >> > > > > -- > Alexander Limi · http://limi.net > > > ------------------------------------------------------------------------------ > Are you an open source citizen? Join us for the Open Source Bridge conference! > Portland, OR, June 17-19. Two days of sessions, one day of unconference: $250. > Need another reason to go? 24-hour hacker lounge. Register today! > http://ad.doubleclick.net/clk;215844324;13503038;v?http://opensourcebridge.org > _______________________________________________ > Plone-developers mailing list > plone-develop...@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/plone-developers > _______________________________________________ Zope-CMF maillist - Zope-CMF@lists.zope.org http://mail.zope.org/mailman/listinfo/zope-cmf See https://bugs.launchpad.net/zope-cmf/ for bug reports and feature requests