summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris McDonough <chrism@agendaless.com>2009-11-04 05:39:49 +0000
committerChris McDonough <chrism@agendaless.com>2009-11-04 05:39:49 +0000
commit98ea383b580b77a2ff8cd81743ad0f0d90574547 (patch)
tree56d1d13ea1339fccffbcbba29224cd701ee6f6ee
parentc9b04a01e0b8f23b86d30e9ae1403a2964c34faa (diff)
downloadpyramid-98ea383b580b77a2ff8cd81743ad0f0d90574547.tar.gz
pyramid-98ea383b580b77a2ff8cd81743ad0f0d90574547.tar.bz2
pyramid-98ea383b580b77a2ff8cd81743ad0f0d90574547.zip
- The ``bfgshell`` command did not function properly; it was still
expecting to be able to call the root factory with a bare ``environ`` rather than a request object. - The ``repoze.bfg.scripting.get_app`` function now expects a ``request`` object as its second argument rather than an ``environ``.
-rw-r--r--CHANGES.txt11
-rw-r--r--repoze/bfg/request.py6
-rw-r--r--repoze/bfg/scripting.py21
-rw-r--r--repoze/bfg/tests/test_paster.py4
-rw-r--r--repoze/bfg/tests/test_request.py18
-rw-r--r--repoze/bfg/tests/test_scripting.py20
-rw-r--r--repoze/bfg/tests/test_traversal.py17
-rw-r--r--repoze/bfg/traversal.py6
8 files changed, 61 insertions, 42 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 6ce4a56fc..1e9c49482 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -18,6 +18,17 @@ Bug Fixes
output is now sent to the console. Thanks to Daniel Holth for the
patch.
+- The ``bfgshell`` command did not function properly; it was still
+ expecting to be able to call the root factory with a bare
+ ``environ`` rather than a request object.
+
+Backwards Incompatibilities
+---------------------------
+
+- The ``repoze.bfg.scripting.get_app`` function now expects a
+ ``request`` object as its second argument rather than an
+ ``environ``.
+
1.1b2 (2009-11-02)
==================
diff --git a/repoze/bfg/request.py b/repoze/bfg/request.py
index 2d799e15c..080ececc9 100644
--- a/repoze/bfg/request.py
+++ b/repoze/bfg/request.py
@@ -93,3 +93,9 @@ deprecated('get_request',
'``repoze.bfg.request`` is '
'deprecated. Use ``from repoze.bfg.threadlocal import '
'get_current_request instead.')
+
+class FakeRequest(dict):
+ def __init__(self, environ):
+ self.environ = environ
+ self.update(environ)
+
diff --git a/repoze/bfg/scripting.py b/repoze/bfg/scripting.py
index 5399b7d77..f31db56fa 100644
--- a/repoze/bfg/scripting.py
+++ b/repoze/bfg/scripting.py
@@ -1,20 +1,21 @@
-def get_root(app, environ=None):
+from repoze.bfg.request import FakeRequest
+
+def get_root(app, request=None):
""" Return a tuple composed of ``(root, closer)`` when provided a
``repoze.bfg.router.Router`` instance as the ``app`` argument.
The ``root`` returned is the application root object. The
``closer`` returned is a callable (accepting no arguments) that
should be called when your scripting application is finished using
- the root. If ``environ`` is not None, it is used as the
- environment passed to the BFG application root factory. An empty
- environ is constructed and passed to the root factory if
- ``environ`` is None."""
+ the root. If ``request`` is not None, it is used as the request
+ passed to the BFG application root factory. A faux request is
+ constructed and passed to the root factory if ``request`` is None."""
+ if request is None:
+ request = FakeRequest({})
registry = app.registry
- threadlocals = {'registry':registry, 'request':None}
+ threadlocals = {'registry':registry, 'request':request}
app.threadlocal_manager.push(threadlocals)
- if environ is None:
- environ = {}
- def closer(environ=environ): # keep environ alive via this function default
+ def closer(request=request): # keep request alive via this function default
app.threadlocal_manager.pop()
- root = app.root_factory(environ)
+ root = app.root_factory(request)
return root, closer
diff --git a/repoze/bfg/tests/test_paster.py b/repoze/bfg/tests/test_paster.py
index 7752e1684..d9cbefb5e 100644
--- a/repoze/bfg/tests/test_paster.py
+++ b/repoze/bfg/tests/test_paster.py
@@ -27,7 +27,7 @@ class TestBFGShellCommand(unittest.TestCase):
self.assertEqual(len(app.threadlocal_manager.pushed), 1)
pushed = app.threadlocal_manager.pushed[0]
self.assertEqual(pushed['registry'], dummy_registry)
- self.assertEqual(pushed['request'], None)
+ self.assertEqual(pushed['request'].environ, {})
self.assertEqual(interact.local, {'root':dummy_root})
self.failUnless(interact.banner)
self.assertEqual(len(app.threadlocal_manager.popped), 1)
@@ -51,7 +51,7 @@ class TestBFGShellCommand(unittest.TestCase):
self.assertEqual(len(app.threadlocal_manager.pushed), 1)
pushed = app.threadlocal_manager.pushed[0]
self.assertEqual(pushed['registry'], dummy_registry)
- self.assertEqual(pushed['request'], None)
+ self.assertEqual(pushed['request'].environ, {})
self.assertEqual(dummy_shell_factory.shell.local_ns,{'root':dummy_root})
self.assertEqual(dummy_shell_factory.shell.global_ns, {})
self.failUnless('\n\n' in dummy_shell_factory.shell.IP.BANNER)
diff --git a/repoze/bfg/tests/test_request.py b/repoze/bfg/tests/test_request.py
index 2ecb060cc..eb26b07cf 100644
--- a/repoze/bfg/tests/test_request.py
+++ b/repoze/bfg/tests/test_request.py
@@ -168,6 +168,24 @@ class Test_add_global_response_headers(unittest.TestCase):
self._callFUT(request, [('c', 1)])
self.assertEqual(request.global_response_headers, headers + [('c', 1)])
+class TestFakeRequest(unittest.TestCase):
+ def _makeOne(self, environ):
+ from repoze.bfg.request import FakeRequest
+ return FakeRequest(environ)
+
+ def test_environ(self):
+ environ = {'a':1, 'b':2}
+ request = self._makeOne(environ)
+ self.assertEqual(request.environ['a'], 1)
+ self.assertEqual(request.environ['b'], 2)
+
+ def test_asdict(self):
+ environ = {'a':1, 'b':2}
+ request = self._makeOne(environ)
+ self.assertEqual(request['a'], 1)
+ self.assertEqual(request['b'], 2)
+
+
class DummyRequest:
def __init__(self, environ=None):
if environ is None:
diff --git a/repoze/bfg/tests/test_scripting.py b/repoze/bfg/tests/test_scripting.py
index 514b02dca..41542f457 100644
--- a/repoze/bfg/tests/test_scripting.py
+++ b/repoze/bfg/tests/test_scripting.py
@@ -1,29 +1,29 @@
import unittest
class TestGetRoot(unittest.TestCase):
- def _callFUT(self, app, environ=None):
+ def _callFUT(self, app, request=None):
from repoze.bfg.paster import get_root
- return get_root(app, environ)
+ return get_root(app, request)
- def test_it_noenviron(self):
+ def test_it_norequest(self):
app = DummyApp()
root, closer = self._callFUT(app)
self.assertEqual(len(app.threadlocal_manager.pushed), 1)
pushed = app.threadlocal_manager.pushed[0]
self.assertEqual(pushed['registry'], dummy_registry)
- self.assertEqual(pushed['request'], None)
+ self.assertEqual(pushed['request'].environ, {})
self.assertEqual(len(app.threadlocal_manager.popped), 0)
closer()
self.assertEqual(len(app.threadlocal_manager.popped), 1)
- def test_it_withenviron(self):
+ def test_it_withrequest(self):
app = DummyApp()
- environ = {}
- root, closer = self._callFUT(app, environ)
+ request = DummyRequest({})
+ root, closer = self._callFUT(app, request)
self.assertEqual(len(app.threadlocal_manager.pushed), 1)
pushed = app.threadlocal_manager.pushed[0]
self.assertEqual(pushed['registry'], dummy_registry)
- self.assertEqual(pushed['request'], None)
+ self.assertEqual(pushed['request'], request)
self.assertEqual(len(app.threadlocal_manager.popped), 0)
closer()
self.assertEqual(len(app.threadlocal_manager.popped), 1)
@@ -54,3 +54,7 @@ class DummyThreadLocalManager:
def pop(self):
self.popped.append(True)
+class DummyRequest:
+ def __init__(self, environ):
+ self.environ = environ
+
diff --git a/repoze/bfg/tests/test_traversal.py b/repoze/bfg/tests/test_traversal.py
index ba9fc8b30..aceed1076 100644
--- a/repoze/bfg/tests/test_traversal.py
+++ b/repoze/bfg/tests/test_traversal.py
@@ -970,23 +970,6 @@ class TraverseTests(unittest.TestCase):
self.assertEqual(result['view_name'], '')
self.assertEqual(result['context'], model)
-class TestFakeRequest(unittest.TestCase):
- def _makeOne(self, environ):
- from repoze.bfg.traversal import FakeRequest
- return FakeRequest(environ)
-
- def test_environ(self):
- environ = {'a':1, 'b':2}
- request = self._makeOne(environ)
- self.assertEqual(request.environ['a'], 1)
- self.assertEqual(request.environ['b'], 2)
-
- def test_asdict(self):
- environ = {'a':1, 'b':2}
- request = self._makeOne(environ)
- self.assertEqual(request['a'], 1)
- self.assertEqual(request['b'], 2)
-
def make_traverser(result):
class DummyTraverser(object):
def __init__(self, context):
diff --git a/repoze/bfg/traversal.py b/repoze/bfg/traversal.py
index 6eda82a92..325e41e4b 100644
--- a/repoze/bfg/traversal.py
+++ b/repoze/bfg/traversal.py
@@ -14,6 +14,7 @@ from repoze.bfg.interfaces import VH_ROOT_KEY
from repoze.bfg.location import lineage
from repoze.bfg.encode import url_quote
+from repoze.bfg.request import FakeRequest
def find_root(model):
""" Find the root node in the graph to which ``model``
@@ -631,8 +632,3 @@ class TraversalContextURL(object):
def _join_path_tuple(tuple):
return tuple and '/'.join([quote_path_segment(x) for x in tuple]) or '/'
-class FakeRequest(dict):
- def __init__(self, environ):
- self.environ = environ
- self.update(environ)
-