Log message for revision 74261:
  Merge default value fix from trunk

Changed:
  U   Zope/branches/2.9/lib/python/AccessControl/requestmethod.py
  U   Zope/branches/2.9/lib/python/AccessControl/requestmethod.txt

-=-
Modified: Zope/branches/2.9/lib/python/AccessControl/requestmethod.py
===================================================================
--- Zope/branches/2.9/lib/python/AccessControl/requestmethod.py 2007-04-20 
14:30:39 UTC (rev 74260)
+++ Zope/branches/2.9/lib/python/AccessControl/requestmethod.py 2007-04-20 
14:32:04 UTC (rev 74261)
@@ -15,14 +15,16 @@
 from zExceptions import Forbidden
 from ZPublisher.HTTPRequest import HTTPRequest
 
+_default = []
+
 def _buildFacade(spec, docstring):
     """Build a facade function, matching the decorated method in signature.
     
-    Note that defaults are replaced by None, and _curried will reconstruct
+    Note that defaults are replaced by _default, and _curried will reconstruct
     these to preserve mutable defaults.
     
     """
-    args = inspect.formatargspec(formatvalue=lambda v: '=None', *spec)
+    args = inspect.formatargspec(formatvalue=lambda v: '=_default', *spec)
     callargs = inspect.formatargspec(formatvalue=lambda v: '', *spec)
     return 'def _facade%s:\n    """%s"""\n    return _curried%s' % (
         args, docstring, callargs)
@@ -46,7 +48,6 @@
         
         if len(args) > r_index:
             request = args[r_index]
-        
         if isinstance(request, HTTPRequest):
             if request.get('REQUEST_METHOD', 'GET').upper() != 'POST':
                 raise Forbidden('Request must be POST')
@@ -55,7 +56,7 @@
         if defaults is not None:
             args, kwparams = args[:arglen], args[arglen:]
             for positional, (key, default) in zip(kwparams, defaults):
-                if positional is None:
+                if positional is _default:
                     kw[key] = default
                 else:
                     kw[key] = positional
@@ -63,7 +64,7 @@
         return callable(*args, **kw)
     
     # Build a facade, with a reference to our locally-scoped _curried
-    facade_globs = dict(_curried=_curried)
+    facade_globs = dict(_curried=_curried, _default=_default)
     exec _buildFacade(spec, callable.__doc__) in facade_globs
     return facade_globs['_facade']
 

Modified: Zope/branches/2.9/lib/python/AccessControl/requestmethod.txt
===================================================================
--- Zope/branches/2.9/lib/python/AccessControl/requestmethod.txt        
2007-04-20 14:30:39 UTC (rev 74260)
+++ Zope/branches/2.9/lib/python/AccessControl/requestmethod.txt        
2007-04-20 14:32:04 UTC (rev 74261)
@@ -61,9 +61,9 @@
   >>> import inspect
   >>> mutabledefault = dict()
   >>> @postonly
-  ... def foo(bar, baz=mutabledefault, REQUEST=None, **kw):
-  ...     return bar, baz is mutabledefault, REQUEST
+  ... def foo(bar, baz=mutabledefault, egg=mutabledefault, REQUEST=None, **kw):
+  ...     return bar, baz is mutabledefault, egg is None, REQUEST
   >>> inspect.getargspec(foo)[:3]
-  (['bar', 'baz', 'REQUEST'], None, 'kw')
-  >>> foo('spam')
-  ('spam', True, None)
+  (['bar', 'baz', 'egg', 'REQUEST'], None, 'kw')
+  >>> foo('spam', egg=None)
+  ('spam', True, True, None)

_______________________________________________
Zope-Checkins maillist  -  Zope-Checkins@zope.org
http://mail.zope.org/mailman/listinfo/zope-checkins

Reply via email to