summaryrefslogtreecommitdiff
path: root/repoze/bfg/path.py
blob: c3d91420872ab5db597c47666497a584c33d15c5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import os
import sys

def caller_path(path, level=2):
    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__']
        path = os.path.join(prefix, path)
    return path

def package_path(package):
    return os.path.abspath(os.path.dirname(package.__file__))