blob: 6fee43791c9b442a997c5e55f5df4a598f3e7550 (
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
26
27
|
import os
import sys
def caller_path(path, level=2, package_globals=None): # package_globals==testing
if not os.path.isabs(path):
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
def package_path(package):
return os.path.abspath(os.path.dirname(package.__file__))
|