[Zope-dev] SVN: Zope/branches/2.13/src/ micro optimization

Tres Seaver tseaver at palladion.com
Mon Aug 1 13:16:00 EDT 2011


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

On 08/01/2011 02:25 AM, Nikolay Kim wrote:
> Log message for revision 122433: micro optimization
> 
> Changed: U   Zope/branches/2.13/src/OFS/ObjectManager.py U
> Zope/branches/2.13/src/OFS/Traversable.py U
> Zope/branches/2.13/src/Products/PageTemplates/Expressions.py U
> Zope/branches/2.13/src/ZPublisher/HTTPRequest.py
> 
> -=- Modified: Zope/branches/2.13/src/OFS/ObjectManager.py 
> =================================================================== 
> --- Zope/branches/2.13/src/OFS/ObjectManager.py	2011-07-30 11:49:07
> UTC (rev 122432) +++ Zope/branches/2.13/src/OFS/ObjectManager.py
> 2011-08-01 06:25:44 UTC (rev 122433) @@ -425,7 +425,7 @@ # Returns a
> list of actual subobjects of the current object. # If 'spec' is
> specified, returns only objects whose meta_type # match 'spec'. -
> return [ self._getOb(id) for id in self.objectIds(spec) ] +
> return [ getattr(self, id) for id in self.objectIds(spec) ]
> 
> security.declareProtected(access_contents_information,
> 'objectItems') def objectItems(self, spec=None):

You cannot replace '_getOb' with 'getattr':  subclasses (e.g.,
BTreeFolder) don't necessarily use attributes to store items.  Even if
all the subclasses in the Zope tree also override the affected methods,
you cannot know that third-party code won't break here.


> @@ -763,7 +763,7 @@ return self.manage_delObjects(ids=[name])
> 
> def __getitem__(self, key): -        v=self._getOb(key, None) +
> v=getattr(self, key, None) if v is not None: return v if
> hasattr(self, 'REQUEST'): request=self.REQUEST

Same here.

> Modified:
> Zope/branches/2.13/src/Products/PageTemplates/Expressions.py 
> =================================================================== 
> --- Zope/branches/2.13/src/Products/PageTemplates/Expressions.py
> 2011-07-30 11:49:07 UTC (rev 122432) +++
> Zope/branches/2.13/src/Products/PageTemplates/Expressions.py
> 2011-08-01 06:25:44 UTC (rev 122433) @@ -71,7 +71,7 @@ while
> path_items: name = path_items.pop() if
> OFS.interfaces.ITraversable.providedBy(object): -            object =
> object.restrictedTraverse(name) +            object =
> object.unrestrictedTraverse(name, restricted=True) else: object =
> traversePathElement(object, name, path_items, request=request)

This change defeats a security check:  I don't believe it is suitable
for a stable release (one might argue for such a change on the trunk,
but it is *not* an "optimization").


> Modified: Zope/branches/2.13/src/ZPublisher/HTTPRequest.py 
> =================================================================== 
> --- Zope/branches/2.13/src/ZPublisher/HTTPRequest.py	2011-07-30
> 11:49:07 UTC (rev 122432) +++
> Zope/branches/2.13/src/ZPublisher/HTTPRequest.py	2011-08-01 06:25:44
> UTC (rev 122433) @@ -169,6 +169,9 @@
> 
> retry_max_count = 3
> 
> +    def __conform__(self, iface): +        return
> iface.__adapt__(self) + def supports_retry(self): if self.retry_count
> < self.retry_max_count: time.sleep(random.uniform(0, 2 **
> (self.retry_count)))

'__conform__' is intended to allow an object to do something different
than the standard adapation:  it makes no sense (and cannot be faster,
since it introduces another Python function call) to add a '__conform__'
which returns exactly what the code in 'Interface.__call__' would do.


Tres.
- -- 
===================================================================
Tres Seaver          +1 540-429-0999          tseaver at palladion.com
Palladion Software   "Excellence by Design"    http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/

iEYEARECAAYFAk4231AACgkQ+gerLs4ltQ4xygCeLTa8LWRPlKuzhmxQBq4vkS5u
9RkAn3K7LXdDQ1Z5/HNIzjp9tK9a8NhB
=1X2t
-----END PGP SIGNATURE-----



More information about the Zope-Dev mailing list