blob: ca0bea5972804ea9e4f9c046c1827a8b3ffc8689 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
from repoze.bfg.request import Request
from repoze.bfg.interfaces import IRequestFactory
def get_root(app, request=None):
""" Return a tuple composed of ``(root, closer)`` when provided a
:term:`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
``request`` is not None, it is used as the request passed to the
:mod:`repoze.bfg` application root factory. A request is
constructed and passed to the root factory if ``request`` is None."""
registry = app.registry
if request is None:
request_factory = registry.queryUtility(
IRequestFactory, default=Request)
request = request_factory.blank('/')
request.registry = 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()
root = app.root_factory(request)
return root, closer
|