summaryrefslogtreecommitdiff
path: root/repoze/bfg/scripting.py
diff options
context:
space:
mode:
Diffstat (limited to 'repoze/bfg/scripting.py')
-rw-r--r--repoze/bfg/scripting.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/repoze/bfg/scripting.py b/repoze/bfg/scripting.py
new file mode 100644
index 000000000..9e83e2fe8
--- /dev/null
+++ b/repoze/bfg/scripting.py
@@ -0,0 +1,18 @@
+_GET_ROOT_ENVIRON = {}
+
+def get_root(router):
+ """ Given a :mod:`repoze.bfg` Router application instance as its
+ ``router`` argument, this callable returns the traversal root of
+ graph as defined by the application's root factory. It also has
+ the effect of pushing a new registry and request on to the
+ internal thread local stack managed by BFG so that registry
+ lookups work properly.
+
+ .. warning:: This function should never be called from *within* a
+ BFG model or view, only from top-level scripts which wish to
+ get the root of a graph to do offline processing."""
+ registry = router.registry
+ threadlocals = {'registry':registry, 'request':None}
+ router.threadlocal_manager.push(threadlocals)
+ return router.root_factory(_GET_ROOT_ENVIRON)
+