[Erp5-report] r15685 - in /erp5/trunk/products/ERP5Type: Core/Folder.py WebDAVSupport.py

nobody at svn.erp5.org nobody at svn.erp5.org
Thu Aug 16 02:43:19 CEST 2007


Author: jp
Date: Thu Aug 16 02:43:18 2007
New Revision: 15685

URL: http://svn.erp5.org?rev=15685&view=rev
Log:
New WebDAV PUT method handles much better catalog and uid related issues in ContributionTool. The main difference with the standard one is that we call here constructContent with is_indexable=0. This way, documents which are created are not indexed.

Modified:
    erp5/trunk/products/ERP5Type/Core/Folder.py
    erp5/trunk/products/ERP5Type/WebDAVSupport.py

Modified: erp5/trunk/products/ERP5Type/Core/Folder.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/Core/Folder.py?rev=15685&r1=15684&r2=15685&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/Core/Folder.py (original)
+++ erp5/trunk/products/ERP5Type/Core/Folder.py Thu Aug 16 02:43:18 2007
@@ -41,6 +41,7 @@
 from Products.ERP5Type.XMLExportImport import Folder_asXML
 from Products.ERP5Type.Cache import CachingMethod
 from Products.ERP5Type.Utils import sortValueList
+from Products.ERP5Type.WebDAVSupport import Folder as WebDAVFolder
 
 try:
   from Products.CMFCore.CMFBTreeFolder import CMFBTreeFolder
@@ -294,7 +295,7 @@
     """
     return self.countFolder(**kw)[0][0]
 
-class Folder( CopyContainer, CMFBTreeFolder, Base, FolderMixIn):
+class Folder( CopyContainer, CMFBTreeFolder, Base, FolderMixIn, WebDAVFolder):
   """
   A Folder is a subclass of Base but not of XMLObject.
   Folders are not considered as documents and are therefore
@@ -353,6 +354,7 @@
   _edit = Base._edit
   _setPropValue = Base._setPropValue
   _propertyMap = Base._propertyMap # are there any others XXX ?
+  PUT_factory = WebDAVFolder.PUT_factory
   # XXX Prevent inheritance from PortalFolderBase
   description = None
 

Modified: erp5/trunk/products/ERP5Type/WebDAVSupport.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5Type/WebDAVSupport.py?rev=15685&r1=15684&r2=15685&view=diff
==============================================================================
--- erp5/trunk/products/ERP5Type/WebDAVSupport.py (original)
+++ erp5/trunk/products/ERP5Type/WebDAVSupport.py Thu Aug 16 02:43:18 2007
@@ -13,9 +13,11 @@
 ##############################################################################
 
 import re
+from Acquisition import aq_parent, aq_inner, aq_base
 from AccessControl import ClassSecurityInfo, ModuleSecurityInfo
 from Products.ERP5Type import Permissions, PropertySheet, Constraint, Interface
 from Products.CMFCore.PortalContent import NoWL, ResourceLockedError
+from Products.CMFCore.utils import getToolByName
 from Products.CMFDefault.utils import parseHeadersBody
 from Products.CMFDefault.utils import html_headcheck
 from Products.CMFDefault.utils import bodyfinder
@@ -189,4 +191,43 @@
   security.declareProtected(Permissions.View, 'get_size')
   def get_size( self ):
     """ Used for FTP and apparently the ZMI now too """
-    return len(self.manage_FTPget())
+    return len(self.manage_FTPget())
+
+
+class Folder:
+  """
+  Taken from CMFCore.PortalFolder
+  """
+  def PUT_factory( self, name, typ, body ):
+    """ Factory for PUT requests to objects which do not yet exist.
+
+    Used by NullResource.PUT.
+
+    Returns -- Bare and empty object of the appropriate type (or None, if
+    we don't know what to do)
+    """
+    registry = getToolByName(self, 'content_type_registry', None)
+    if registry is None:
+      return None
+
+    portal_type = registry.findTypeName( name, typ, body )
+    if portal_type is None:
+      return None
+
+    # The code bellow is inspired from ERP5Type.Core.Folder.newContent
+    pt = self._getTypesTool()
+    myType = pt.getTypeInfo(self)
+    if myType is not None and not myType.allowType( portal_type ) and \
+       'portal_trash' not in self.getPhysicalPath():
+      raise ValueError('Disallowed subobject type: %s' % portal_type)
+    pt.constructContent( type_name=portal_type,
+                         container=self,
+                         id=name,
+                         is_indexable=0
+                         ) # **kw) removed due to CMF bug
+
+    # constructContent does too much, so the object has to be removed again
+    obj = aq_base( self._getOb( name ) )
+    self._delObject( name ) # _delObject will not invoke the catalog since is_indexable was set to 0
+    delattr(obj, 'isIndexable') # Allow indexing again (standard case)
+    return obj




More information about the Erp5-report mailing list