[Checkins] SVN: Products.CMFCore/trunk/Products/CMFCore/ Optimize `SkinnableObjectManager.__getattr__` to short circuit view (`@`) and traverser (`+`) lookup in addition to `_` and `aq_`.

Hanno Schlichting hannosch at hannosch.eu
Sun Jul 17 14:53:16 EDT 2011


Log message for revision 122272:
  Optimize `SkinnableObjectManager.__getattr__` to short circuit view (`@`) and traverser (`+`) lookup in addition to `_` and `aq_`.
  

Changed:
  U   Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
  U   Products.CMFCore/trunk/Products/CMFCore/Skinnable.py

-=-
Modified: Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2011-07-17 18:49:11 UTC (rev 122271)
+++ Products.CMFCore/trunk/Products/CMFCore/CHANGES.txt	2011-07-17 18:53:15 UTC (rev 122272)
@@ -4,6 +4,9 @@
 2.3.0-alpha (unreleased)
 ------------------------
 
+- Optimize `SkinnableObjectManager.__getattr__` to short circuit view (`@`) and
+  traverser (`+`) lookup in addition to `_` and `aq_`.
+
 - Avoid a shallow dependency on `Products.ZReST`.
 
 - Fixed types tool test to only test creation for type infos.

Modified: Products.CMFCore/trunk/Products/CMFCore/Skinnable.py
===================================================================
--- Products.CMFCore/trunk/Products/CMFCore/Skinnable.py	2011-07-17 18:49:11 UTC (rev 122271)
+++ Products.CMFCore/trunk/Products/CMFCore/Skinnable.py	2011-07-17 18:53:15 UTC (rev 122272)
@@ -63,7 +63,9 @@
 
         This should be fast, flexible, and predictable.
         '''
-        if not name.startswith('_') and not name.startswith('aq_'):
+        if not name:
+            raise AttributeError(name)
+        if name[0] not in ('_', '@', '+') and not name.startswith('aq_'):
             sd = SKINDATA.get(get_ident())
             if sd is not None:
                 ob, skinname, ignore, resolve = sd
@@ -80,7 +82,7 @@
                         return retval
                     else:
                         ignore[name] = 1
-        raise AttributeError, name
+        raise AttributeError(name)
 
     security.declarePrivate('getSkin')
     def getSkin(self, name=None):



More information about the checkins mailing list