summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Merickel <michael@merickel.org>2018-04-23 19:27:49 -0500
committerMichael Merickel <michael@merickel.org>2018-04-23 20:03:54 -0500
commite492273d15e550e7d65f2f29b91fe193fc256f5f (patch)
tree3e62b0df15a3c6846a5077dbd91497236c5faa19
parent5249392da6bd08dc3366473a91585acf64445aaa (diff)
downloadpyramid-e492273d15e550e7d65f2f29b91fe193fc256f5f.tar.gz
pyramid-e492273d15e550e7d65f2f29b91fe193fc256f5f.tar.bz2
pyramid-e492273d15e550e7d65f2f29b91fe193fc256f5f.zip
use the RequestContext instead of app.threadlocal_manager for scripting
fixes #3262
-rw-r--r--pyramid/scripting.py19
-rw-r--r--pyramid/tests/test_scripting.py43
2 files changed, 24 insertions, 38 deletions
diff --git a/pyramid/scripting.py b/pyramid/scripting.py
index 7607d3ea3..087b55ccb 100644
--- a/pyramid/scripting.py
+++ b/pyramid/scripting.py
@@ -8,7 +8,7 @@ from pyramid.interfaces import (
from pyramid.request import Request
from pyramid.request import apply_request_extensions
-from pyramid.threadlocal import manager as threadlocal_manager
+from pyramid.threadlocal import RequestContext
from pyramid.traversal import DefaultRootFactory
def get_root(app, request=None):
@@ -26,10 +26,11 @@ def get_root(app, request=None):
registry = app.registry
if request is None:
request = _make_request('/', registry)
- threadlocals = {'registry':registry, 'request':request}
- app.threadlocal_manager.push(threadlocals)
- def closer(request=request): # keep request alive via this function default
- app.threadlocal_manager.pop()
+ request.registry = registry
+ ctx = RequestContext(request)
+ ctx.begin()
+ def closer():
+ ctx.end()
root = app.root_factory(request)
return root, closer
@@ -87,12 +88,12 @@ def prepare(request=None, registry=None):
# NB: even though _make_request might have already set registry on
# request, we reset it in case someone has passed in their own
# request.
- request.registry = registry
- threadlocals = {'registry':registry, 'request':request}
- threadlocal_manager.push(threadlocals)
+ request.registry = registry
+ ctx = RequestContext(request)
+ ctx.begin()
apply_request_extensions(request)
def closer():
- threadlocal_manager.pop()
+ ctx.end()
root_factory = registry.queryUtility(IRootFactory,
default=DefaultRootFactory)
root = root_factory(request)
diff --git a/pyramid/tests/test_scripting.py b/pyramid/tests/test_scripting.py
index 00f738e02..ed88bb470 100644
--- a/pyramid/tests/test_scripting.py
+++ b/pyramid/tests/test_scripting.py
@@ -8,38 +8,35 @@ class Test_get_root(unittest.TestCase):
def _makeRegistry(self):
return DummyRegistry([DummyFactory])
+ def setUp(self):
+ from pyramid.threadlocal import manager
+ self.manager = manager
+ self.default = manager.get()
+
def test_it_norequest(self):
registry = self._makeRegistry()
app = DummyApp(registry=registry)
root, closer = self._callFUT(app)
- self.assertEqual(len(app.threadlocal_manager.pushed), 1)
- pushed = app.threadlocal_manager.pushed[0]
+ self.assertEqual(dummy_root, root)
+ pushed = self.manager.get()
self.assertEqual(pushed['registry'], registry)
- self.assertEqual(pushed['request'].registry, app.registry)
- self.assertEqual(len(app.threadlocal_manager.popped), 0)
+ self.assertEqual(pushed['request'].registry, registry)
+ self.assertEqual(pushed['request'].environ['path'], '/')
closer()
- self.assertEqual(len(app.threadlocal_manager.popped), 1)
+ self.assertEqual(self.default, self.manager.get())
def test_it_withrequest(self):
registry = self._makeRegistry()
app = DummyApp(registry=registry)
request = DummyRequest({})
root, closer = self._callFUT(app, request)
- self.assertEqual(len(app.threadlocal_manager.pushed), 1)
- pushed = app.threadlocal_manager.pushed[0]
+ self.assertEqual(dummy_root, root)
+ pushed = self.manager.get()
self.assertEqual(pushed['registry'], registry)
self.assertEqual(pushed['request'], request)
- self.assertEqual(len(app.threadlocal_manager.popped), 0)
+ self.assertEqual(pushed['request'].registry, registry)
closer()
- self.assertEqual(len(app.threadlocal_manager.popped), 1)
-
- def test_it_requestfactory_overridden(self):
- registry = self._makeRegistry()
- app = DummyApp(registry=registry)
- root, closer = self._callFUT(app)
- self.assertEqual(len(app.threadlocal_manager.pushed), 1)
- pushed = app.threadlocal_manager.pushed[0]
- self.assertEqual(pushed['request'].environ['path'], '/')
+ self.assertEqual(self.default, self.manager.get())
class Test_prepare(unittest.TestCase):
def _callFUT(self, request=None, registry=None):
@@ -206,24 +203,12 @@ class DummyRegistry(object):
class DummyApp:
def __init__(self, registry=None):
- self.threadlocal_manager = DummyThreadLocalManager()
if registry:
self.registry = registry
def root_factory(self, environ):
return dummy_root
-class DummyThreadLocalManager:
- def __init__(self):
- self.pushed = []
- self.popped = []
-
- def push(self, item):
- self.pushed.append(item)
-
- def pop(self):
- self.popped.append(True)
-
class DummyRequest(object):
matchdict = None
matched_route = None