summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES.txt9
-rw-r--r--repoze/bfg/tests/test_integration.py27
-rw-r--r--repoze/bfg/tests/test_view.py41
-rw-r--r--repoze/bfg/view.py21
4 files changed, 50 insertions, 48 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index d7aa363f8..3aadc3039 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -26,8 +26,13 @@ Features
Implementation Changes
----------------------
-- The ``wsgiapp`` decorator now uses ``webob.Request.get_response`` to
- do its work rather than relying on howgrown WSGI code.
+- The ``repoze.bfg.wsgi.wsgiapp`` decorator now uses
+ ``webob.Request.get_response`` to do its work rather than relying on
+ howgrown WSGI code.
+
+- The ``repoze.bfg.view.static`` helper now uses
+ ``webob.Request.get_response`` to do its work rather than relying on
+ howgrown WSGI code.
0.6.2 (2009-01-13)
==================
diff --git a/repoze/bfg/tests/test_integration.py b/repoze/bfg/tests/test_integration.py
index 76004af7b..4630f0da8 100644
--- a/repoze/bfg/tests/test_integration.py
+++ b/repoze/bfg/tests/test_integration.py
@@ -1,8 +1,10 @@
+import os
import unittest
+from repoze.bfg.push import pushpage
from repoze.bfg.wsgi import wsgiapp
from repoze.bfg.view import bfg_view
-from repoze.bfg.push import pushpage
+from repoze.bfg.view import static
from zope.interface import Interface
@@ -87,6 +89,29 @@ class PushPagePlusBFGViewTests(unittest.TestCase):
('registerAdapter',
pushtest, (INothing, IRequest), IView, '', None))
+here = os.path.dirname(__file__)
+staticapp = static(os.path.join(here, 'fixtures'))
+
+class TestStaticApp(unittest.TestCase):
+ def test_it(self):
+ from webob import Request
+ context = DummyContext()
+ from StringIO import StringIO
+ request = Request({'PATH_INFO':'',
+ 'SCRIPT_NAME':'',
+ 'SERVER_NAME':'localhost',
+ 'SERVER_PORT':'80',
+ 'REQUEST_METHOD':'GET',
+ 'wsgi.version':(1,0),
+ 'wsgi.url_scheme':'http',
+ 'wsgi.input':StringIO()})
+ request.subpath = ['minimal.pt']
+ result = staticapp(context, request)
+ self.assertEqual(result.status, '200 OK')
+ self.assertEqual(
+ result.body,
+ open(os.path.join(here, 'fixtures/minimal.pt'), 'r').read())
+
class TestFixtureApp(unittest.TestCase):
def setUp(self):
cleanUp()
diff --git a/repoze/bfg/tests/test_view.py b/repoze/bfg/tests/test_view.py
index 6fa7a920d..53c0248ed 100644
--- a/repoze/bfg/tests/test_view.py
+++ b/repoze/bfg/tests/test_view.py
@@ -432,15 +432,13 @@ class TestStaticView(unittest.TestCase, BaseTest):
from repoze.bfg.view import static
return static
- def _getStaticDir(self):
+ def _getHere(self):
import os
- here = os.path.abspath(os.path.normpath(os.path.dirname(__file__)))
- fixtureapp = os.path.join(here, 'fixtureapp')
- return fixtureapp
+ return os.path.dirname(__file__)
def _makeOne(self):
- static_dir = self._getStaticDir()
- return self._getTargetClass()(static_dir)
+ here = self._getHere()
+ return self._getTargetClass()(here)
def test_it(self):
view = self._makeOne()
@@ -449,27 +447,9 @@ class TestStaticView(unittest.TestCase, BaseTest):
request.subpath = ['__init__.py']
request.environ = self._makeEnviron()
response = view(context, request)
- result = ''.join(list(response.app_iter))
- static_dir = self._getStaticDir()
- import os
- filedata = open(os.path.join(static_dir, '__init__.py')).read()
- self.assertEqual(result, filedata)
-
- def test_it_with_alternate_iresponsefactory(self):
- view = self._makeOne()
- context = DummyContext()
- request = DummyRequest()
- request.subpath = ['__init__.py']
- request.environ = self._makeEnviron()
- from repoze.bfg.interfaces import IResponseFactory
- from zope.component import getGlobalSiteManager
- gsm = getGlobalSiteManager()
- from webob import Response
- class Response2(Response):
- pass
- gsm.registerUtility(Response2, IResponseFactory)
- response = view(context, request)
- self.failUnless(isinstance(response, Response2))
+ self.assertEqual(request.copied, True)
+ here = self._getHere()
+ self.assertEqual(response.directory, here)
class TestBFGViewDecorator(unittest.TestCase):
def setUp(self):
@@ -523,7 +503,12 @@ class DummyContext:
pass
class DummyRequest:
- pass
+ def get_response(self, application):
+ return application
+
+ def copy(self):
+ self.copied = True
+ return self
def make_view(response):
def view(context, request):
diff --git a/repoze/bfg/view.py b/repoze/bfg/view.py
index f580a4fb1..3b27a8b94 100644
--- a/repoze/bfg/view.py
+++ b/repoze/bfg/view.py
@@ -1,10 +1,7 @@
from paste.urlparser import StaticURLParser
-from webob import Response
-
from zope.component import queryMultiAdapter
from zope.component import queryUtility
-from repoze.bfg.interfaces import IResponseFactory
from repoze.bfg.interfaces import ISecurityPolicy
from repoze.bfg.interfaces import IViewPermission
from repoze.bfg.interfaces import IView
@@ -148,23 +145,13 @@ class static(object):
def __call__(self, context, request):
subpath = '/'.join(request.subpath)
- caught = []
- def catch_start_response(status, headers, exc_info=None):
- caught[:] = (status, headers, exc_info)
- ecopy = request.environ.copy()
+ request_copy = request.copy()
# Fix up PATH_INFO to get rid of everything but the "subpath"
# (the actual path to the file relative to the root dir).
+ request_copy.environ['PATH_INFO'] = '/' + subpath
# Zero out SCRIPT_NAME for good measure.
- ecopy['PATH_INFO'] = '/' + subpath
- ecopy['SCRIPT_NAME'] = ''
- body = self.app(ecopy, catch_start_response)
- status, headers, exc_info = caught
- response_factory = queryUtility(IResponseFactory, default=Response)
- response = response_factory()
- response.app_iter = body
- response.status = status
- response.headerlist = headers
- return response
+ request_copy.environ['SCRIPT_NAME'] = ''
+ return request_copy.get_response(self.app)
class bfg_view(object):
""" Decorator which allows Python code to make view registrations