summaryrefslogtreecommitdiff
path: root/repoze/bfg/path.py
diff options
context:
space:
mode:
Diffstat (limited to 'repoze/bfg/path.py')
-rw-r--r--repoze/bfg/path.py29
1 files changed, 17 insertions, 12 deletions
diff --git a/repoze/bfg/path.py b/repoze/bfg/path.py
index c3d914208..6fee43791 100644
--- a/repoze/bfg/path.py
+++ b/repoze/bfg/path.py
@@ -1,19 +1,24 @@
import os
import sys
-def caller_path(path, level=2):
+def caller_path(path, level=2, package_globals=None): # package_globals==testing
if not os.path.isabs(path):
- package_globals = sys._getframe(level).f_globals
- if '__bfg_abspath__' not in package_globals:
- # this is actually kinda expensive so we memoize the result
- package_name = package_globals['__name__']
- package = sys.modules[package_name]
- prefix = package_path(package)
- try:
- package_globals['__bfg_abspath__'] = prefix
- except:
- pass
- prefix = package_globals['__bfg_abspath__']
+
+ if package_globals is None:
+ package_globals = sys._getframe(level).f_globals
+
+ if '__bfg_abspath__' in package_globals:
+ return os.path.join(package_globals['__bfg_abspath__'], path)
+
+ # computing the abspath is actually kinda expensive so we
+ # memoize the result
+ package_name = package_globals['__name__']
+ package = sys.modules[package_name]
+ prefix = package_path(package)
+ try:
+ package_globals['__bfg_abspath__'] = prefix
+ except:
+ pass
path = os.path.join(prefix, path)
return path