[Checkins] SVN: Zope/branches/2.13/src/ micro optimizations

Nikolay Kim fafhrd91 at gmail.com
Fri Jul 29 22:36:11 EDT 2011


Log message for revision 122429:
  micro optimizations

Changed:
  U   Zope/branches/2.13/src/OFS/PropertyManager.py
  U   Zope/branches/2.13/src/OFS/Traversable.py
  U   Zope/branches/2.13/src/ZPublisher/HTTPRequest.py

-=-
Modified: Zope/branches/2.13/src/OFS/PropertyManager.py
===================================================================
--- Zope/branches/2.13/src/OFS/PropertyManager.py	2011-07-29 19:11:59 UTC (rev 122428)
+++ Zope/branches/2.13/src/OFS/PropertyManager.py	2011-07-30 02:36:10 UTC (rev 122429)
@@ -144,8 +144,9 @@
         Returns the optional second argument or None if no such property is
         found.
         """
-        if self.hasProperty(id):
-            return getattr(self, id)
+        for p in self._properties:
+            if id==p['id']:
+                return getattr(self, id)
         return d
 
     security.declareProtected(access_contents_information, 'getPropertyType')

Modified: Zope/branches/2.13/src/OFS/Traversable.py
===================================================================
--- Zope/branches/2.13/src/OFS/Traversable.py	2011-07-29 19:11:59 UTC (rev 122428)
+++ Zope/branches/2.13/src/OFS/Traversable.py	2011-07-30 02:36:10 UTC (rev 122429)
@@ -39,6 +39,7 @@
 from zope.traversing.namespace import nsParse
 
 _marker = object()
+NullResource = None
 
 
 class Traversable:
@@ -142,30 +143,29 @@
         If true, then all of the objects along the path are validated with
         the security machinery. Usually invoked using restrictedTraverse().
         """
-        from webdav.NullResource import NullResource
         if not path:
             return self
 
-        if isinstance(path, str):
+        if type(path) is str:
             # Unicode paths are not allowed
             path = path.split('/')
         else:
             path = list(path)
 
         REQUEST = {'TraversalRequestNameStack': path}
-        path.reverse()
+        #path.reverse()
         path_pop = path.pop
 
-        if len(path) > 1 and not path[0]:
+        if len(path) > 1 and not path[-1]:
             # Remove trailing slash
-            path_pop(0)
+            path_pop()
 
         if restricted:
             validate = getSecurityManager().validate
 
-        if not path[-1]:
+        if not path[0]:
             # If the path starts with an empty string, go to the root first.
-            path_pop()
+            path_pop(0)
             obj = self.getPhysicalRoot()
             if restricted:
                 validate(None, None, None, obj) # may raise Unauthorized
@@ -174,8 +174,7 @@
 
         resource = _marker
         try:
-            while path:
-                name = path_pop()
+            for name in path:
                 __traceback_info__ = path, name
 
                 if name[0] == '_':
@@ -190,7 +189,7 @@
                         obj = next
                         continue
 
-                bobo_traverse = getattr(obj, '__bobo_traverse__', None)
+                bobo_traverse = None
                 try:
                     if name and name[:1] in '@+' and name != '+' and nsParse(name)[1]:
                         # Process URI segment parameters.
@@ -209,6 +208,7 @@
                     else:
                         next = UseTraversalDefault # indicator
                         try:
+                            bobo_traverse = getattr(obj, '__bobo_traverse__', None)
                             if bobo_traverse is not None:
                                 next = bobo_traverse(REQUEST, name)
                                 if restricted:
@@ -256,6 +256,10 @@
                                     # The item lookup may return a NullResource,
                                     # if this is the case we save it and return it
                                     # if all other lookups fail.
+                                    global NullResource
+                                    if NullResource is None:
+                                        from webdav.NullResource import NullResource
+
                                     if isinstance(next, NullResource):
                                         resource = next
                                         raise KeyError(name)

Modified: Zope/branches/2.13/src/ZPublisher/HTTPRequest.py
===================================================================
--- Zope/branches/2.13/src/ZPublisher/HTTPRequest.py	2011-07-29 19:11:59 UTC (rev 122428)
+++ Zope/branches/2.13/src/ZPublisher/HTTPRequest.py	2011-07-30 02:36:10 UTC (rev 122429)
@@ -332,7 +332,7 @@
         self.environ = environ
         get_env = environ.get
         self.response = response
-        other = self.other = {'RESPONSE': response}
+        other = self.other = {'REQUEST': self, 'RESPONSE': response}
         self.form = {}
         self.taintedform = {}
         self.steps = []
@@ -379,9 +379,8 @@
         while b and b[0] == '/':
             b = b[1:]
 
-        server_url = get_env('SERVER_URL',None)
-        if server_url is not None:
-            other['SERVER_URL'] = server_url = server_url.strip()
+        if 'SERVER_URL' in environ:
+            other['SERVER_URL'] = server_url = environ['SERVER_URL'].strip()
         else:
             if 'HTTPS' in environ and (
                 environ['HTTPS'] == "on" or environ['HTTPS'] == "ON"):
@@ -1255,8 +1254,6 @@
         """ #"
         other = self.other
         if key in other:
-            if key == 'REQUEST':
-                return self
             return other[key]
 
         if key[:1] == 'U':
@@ -1266,7 +1263,7 @@
                 path = self._script + self._steps
                 n = len(path) - int(n)
                 if n < 0:
-                    raise KeyError, key
+                    return default
                 if pathonly:
                     path = [''] + path[:n]
                 else:
@@ -1284,9 +1281,6 @@
                 return environ[key]
             return ''
 
-        if key == 'REQUEST':
-            return self
-
         if key[:1] == 'B':
             match = BASEmatch(key)
             if match is not None:
@@ -1296,7 +1290,7 @@
                 if n:
                     n = n - 1
                     if len(path) < n:
-                        raise KeyError, key
+                        return default
 
                     v = self._script + path[:n]
                 else:
@@ -1394,12 +1388,10 @@
         self._lazies[key] = callable
 
     def has_key(self, key, returnTaints=0):
-        try:
-            self.__getitem__(key, returnTaints=returnTaints)
-        except:
-            return 0
-        else:
-            return 1
+        v = self.get(key, _marker, returnTaints=returnTaints)
+        if v is _marker:
+            return False
+        return True
 
     def keys(self, returnTaints=0):
         keys = {}
@@ -1525,7 +1517,7 @@
                     base64.decodestring(auth.split()[-1]).split(':', 1)
                 return name, password
 
-    def taintWrapper(self, enabled=TAINTING_ENABLED):
+    def taintWrapper(self, enabled=False):
         return enabled and TaintRequestWrapper(self) or self
 
     def shiftNameToApplication(self):



More information about the checkins mailing list