[Zope-Checkins] CVS: Zope/lib/python/ZPublisher - BaseRequest.py:1.39.20.1

Shane Hathaway shane@digicool.com
Wed, 22 Aug 2001 15:18:31 -0400


Update of /cvs-repository/Zope/lib/python/ZPublisher
In directory cvs.zope.org:/tmp/cvs-serv14914/ZPublisher

Modified Files:
      Tag: ComponentArchitecture-branch
	BaseRequest.py 
Log Message:
Moved from NR-branch.


=== Zope/lib/python/ZPublisher/BaseRequest.py 1.39 => 1.39.20.1 ===
         
         no_acquire_flag=0
+        checked_default = 0
 
         # Set the default method
         if method=='GET' or method=='POST':
@@ -312,19 +313,33 @@
                 # Check for method:
                 if path:
                     entry_name = path.pop()
-                elif (method and hasattr(object,method)
-                      and entry_name != method
-                      and getattr(object, method) is not None):
-                    request._hacked_path=1
-                    entry_name = method
                 else:
-                    if (hasattr(object, '__call__') and
-                        hasattr(object.__call__,'__roles__')):
-                        roles=object.__call__.__roles__
-                    if request._hacked_path:
-                        i=rfind(URL,'/')
-                        if i > 0: response.setBase(URL[:i])
-                    break
+                    # Finished the URL.  Now publish a default view.
+                    psteps = None
+                    if not checked_default:
+                        checked_default = 1
+                        default = getattr(object, '__browser_default__', None)
+                        if default is not None:
+                            object, psteps = default(request)
+                            if psteps:
+                                request._hacked_path=1
+                                entry_name = psteps[0]
+                                path.extend(psteps[1:])
+                                method = None  # Don't hack the path again.
+                    if not psteps:
+                        if (method and hasattr(object,method)
+                            and entry_name != method
+                            and getattr(object, method) is not None):
+                            request._hacked_path=1
+                            entry_name = method
+                        else:
+                            if (hasattr(object, '__call__') and
+                                hasattr(object.__call__,'__roles__')):
+                                roles=object.__call__.__roles__
+                            if request._hacked_path:
+                                i=rfind(URL,'/')
+                                if i > 0: response.setBase(URL[:i])
+                            break
                 if not entry_name: continue
                 step = quote(entry_name)
                 _steps.append(step)