[Checkins] SVN: Zope/branches/2.9/ Merged makerequest fixes from
trunk (collector 2057).
Paul Winkler
pw_lists at slinkp.com
Wed Apr 5 17:13:42 EDT 2006
Log message for revision 66583:
Merged makerequest fixes from trunk (collector 2057).
Changed:
U Zope/branches/2.9/doc/CHANGES.txt
U Zope/branches/2.9/lib/python/Testing/ZopeTestCase/utils.py
U Zope/branches/2.9/lib/python/Testing/makerequest.py
A Zope/branches/2.9/lib/python/Testing/tests/
-=-
Modified: Zope/branches/2.9/doc/CHANGES.txt
===================================================================
--- Zope/branches/2.9/doc/CHANGES.txt 2006-04-05 20:52:39 UTC (rev 66582)
+++ Zope/branches/2.9/doc/CHANGES.txt 2006-04-05 21:13:42 UTC (rev 66583)
@@ -14,6 +14,14 @@
to the rules for such a type laid out in the Python docs:
http://docs.python.org/api/supporting-cycle-detection.html
+ Zope 2.9.3 (UNRELEASED)
+
+ Bugs fixed
+
+ - Collector #2057: Allow Testing.makerequest to work with
+ any acquisition-supporting root object, not just Zope2.app.
+ Formerly, if you did that, getPhysicalPath() was broken.
+
Zope 2.9.2 (2006/03/27)
Bugs fixed
Modified: Zope/branches/2.9/lib/python/Testing/ZopeTestCase/utils.py
===================================================================
--- Zope/branches/2.9/lib/python/Testing/ZopeTestCase/utils.py 2006-04-05 20:52:39 UTC (rev 66582)
+++ Zope/branches/2.9/lib/python/Testing/ZopeTestCase/utils.py 2006-04-05 21:13:42 UTC (rev 66583)
@@ -127,26 +127,14 @@
def makerequest(app, stdout=sys.stdout):
'''Wraps the app into a fresh REQUEST.'''
- from ZPublisher.BaseRequest import RequestContainer
- from ZPublisher.Request import Request
- from ZPublisher.Response import Response
- response = Response(stdout=stdout)
+ from Testing.makerequest import makerequest as _makerequest
environ = {}
environ['SERVER_NAME'] = _Z2HOST or 'nohost'
environ['SERVER_PORT'] = '%d' % (_Z2PORT or 80)
environ['REQUEST_METHOD'] = 'GET'
- request = Request(sys.stdin, environ, response)
- request._steps = ['noobject'] # Fake a published object
- request['ACTUAL_URL'] = request.get('URL') # Zope 2.7.4
+ app = _makerequest(app, stdout=stdout, environ=environ)
+ return app
- # set Zope3-style default skin so that the request is usable for
- # Zope3-style view look-ups
- from zope.app.publication.browser import setDefaultSkin
- setDefaultSkin(request)
-
- return app.__of__(RequestContainer(REQUEST=request))
-
-
def appcall(function, *args, **kw):
'''Calls a function passing 'app' as first argument.'''
from base import app, close
Modified: Zope/branches/2.9/lib/python/Testing/makerequest.py
===================================================================
--- Zope/branches/2.9/lib/python/Testing/makerequest.py 2006-04-05 20:52:39 UTC (rev 66582)
+++ Zope/branches/2.9/lib/python/Testing/makerequest.py 2006-04-05 21:13:42 UTC (rev 66583)
@@ -19,27 +19,50 @@
import makerequest
app = makerequest.makerequest(Zope2.app())
+You can optionally pass stdout to be used by the response,
+and an environ mapping to be used in the request.
+Defaults are sys.stdout and os.environ.
+
+If you don't want to start a zope app in your test, you can wrap other
+objects, but they must support acquisition and you should only wrap
+your root object.
+
+
$Id$
"""
import os
-from os import environ
from sys import stdin, stdout
from ZPublisher.HTTPRequest import HTTPRequest
from ZPublisher.HTTPResponse import HTTPResponse
from ZPublisher.BaseRequest import RequestContainer
-def makerequest(app, stdout=stdout):
+def makerequest(app, stdout=stdout, environ=None):
resp = HTTPResponse(stdout=stdout)
- environ['SERVER_NAME']='foo'
- environ['SERVER_PORT']='80'
- environ['REQUEST_METHOD'] = 'GET'
+ if environ is None:
+ environ = os.environ
+ environ.setdefault('SERVER_NAME', 'foo')
+ environ.setdefault('SERVER_PORT', '80')
+ environ.setdefault('REQUEST_METHOD', 'GET')
req = HTTPRequest(stdin, environ, resp)
-
+ req._steps = ['noobject'] # Fake a published object.
+ req['ACTUAL_URL'] = req.get('URL') # Zope 2.7.4
+
# set Zope3-style default skin so that the request is usable for
- # Zope3-style view look-ups
+ # Zope3-style view look-ups.
from zope.app.publication.browser import setDefaultSkin
setDefaultSkin(req)
- return app.__of__(RequestContainer(REQUEST = req))
+ requestcontainer = RequestContainer(REQUEST = req)
+ # Workaround for collector 2057: ensure that we don't break
+ # getPhysicalPath if app has that method.
+ # We could instead fix Traversable.getPhysicalPath() to check for
+ # existence of p.getPhysicalPath before calling it; but it's such
+ # a commonly called method that I don't want to impact performance
+ # for something that AFAICT only affects makerequest() in
+ # practice.
+ if getattr(app, 'getPhysicalPath', None) is not None:
+ requestcontainer.getPhysicalPath = lambda: ()
+
+ return app.__of__(requestcontainer)
Copied: Zope/branches/2.9/lib/python/Testing/tests (from rev 66582, Zope/trunk/lib/python/Testing/tests)
More information about the Checkins
mailing list