diff --git a/product/ERP5Type/Core/Folder.py b/product/ERP5Type/Core/Folder.py index 61abe681394f1e6b3e9eb670fe77f0fa6f0704f5..73c0dc52f01a78835802d3d823136c6332604bdd 100644 --- a/product/ERP5Type/Core/Folder.py +++ b/product/ERP5Type/Core/Folder.py @@ -375,10 +375,7 @@ class CMFBTreeFolderHandler(FolderHandler): return getattr(CMFBTreeFolder, id) def isApplicable(self, folder): - result = False - if getattr(folder, '_tree', None) is not None: - result = True - return result + return '_tree' in getattr(folder, '__dict__', tuple()) class CMFHBTreeFolderHandler(FolderHandler): @@ -389,10 +386,7 @@ class CMFHBTreeFolderHandler(FolderHandler): return getattr(CMFHBTreeFolder, id) def isApplicable(self, folder): - result = False - if getattr(folder, '_htree', None) is not None: - result = True - return result + return '_htree' in getattr(folder, '__dict__', tuple()) class OFSFolderHandler(FolderHandler): @@ -403,10 +397,22 @@ class OFSFolderHandler(FolderHandler): return getattr(OFSFolder, id) def isApplicable(self, folder): - result = False - if getattr(folder, '_objects', None) is not None: - result = True - return result + """ + XXX: until folder handlers are prioritized and OFS Folder Handler is + made last, OR if OFS Folder Handler is the default fallback, the + definition of an OFS Folder is only possible as "not a BTreeFolder2 nor + a HBTreeFolder2'. + This is very dirty, but will be sufficient to fix current folder format + detection code. + + Original idea is: + return '_objects' in getattr(folder, '__dict__', tuple()) + But this code is invalid because existing empty folders contain no + '_object' property (it's actually defined on the class, not on the + instance). + """ + return not('_tree' in getattr(folder, '__dict__', tuple())) \ + and not('_htree' in getattr(folder, '__dict__', tuple())) global folder_handler_dict folder_handler_dict = {}