diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-11-04 05:39:49 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-11-04 05:39:49 +0000 |
| commit | 98ea383b580b77a2ff8cd81743ad0f0d90574547 (patch) | |
| tree | 56d1d13ea1339fccffbcbba29224cd701ee6f6ee | |
| parent | c9b04a01e0b8f23b86d30e9ae1403a2964c34faa (diff) | |
| download | pyramid-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.txt | 11 | ||||
| -rw-r--r-- | repoze/bfg/request.py | 6 | ||||
| -rw-r--r-- | repoze/bfg/scripting.py | 21 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_paster.py | 4 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_request.py | 18 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_scripting.py | 20 | ||||
| -rw-r--r-- | repoze/bfg/tests/test_traversal.py | 17 | ||||
| -rw-r--r-- | repoze/bfg/traversal.py | 6 |
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) - |
