diff options
| author | Chris McDonough <chrism@agendaless.com> | 2009-06-18 08:43:03 +0000 |
|---|---|---|
| committer | Chris McDonough <chrism@agendaless.com> | 2009-06-18 08:43:03 +0000 |
| commit | 02c9e2b5179348dfa83899d094c226e7aae1cc7d (patch) | |
| tree | 8b6bee0ef7e1ceef930e9db723faaf2aeef4dc21 | |
| parent | 3ea1ede5d72fa6d51accc32d36665f3a48546a57 (diff) | |
| download | pyramid-02c9e2b5179348dfa83899d094c226e7aae1cc7d.tar.gz pyramid-02c9e2b5179348dfa83899d094c226e7aae1cc7d.tar.bz2 pyramid-02c9e2b5179348dfa83899d094c226e7aae1cc7d.zip | |
- Cache the absolute path in the caller's package globals within
``repoze.bfg.path`` to get rid of repeated (expensive) calls to
os.path.abspath.
| -rw-r--r-- | CHANGES.txt | 5 | ||||
| -rw-r--r-- | repoze/bfg/path.py | 13 |
2 files changed, 14 insertions, 4 deletions
diff --git a/CHANGES.txt b/CHANGES.txt index 3b2772523..c54385b3c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,6 +4,10 @@ Next release Features -------- +- Cache the absolute path in the caller's package globals within + ``repoze.bfg.path`` to get rid of repeated (expensive) calls to + os.path.abspath. + - Add ``reissue_time`` and ``timeout`` parameters to ``repoze.bfg.authentication.AuthTktAuthenticationPolicy`` constructor. If these are passed, cookies will be reset every so @@ -109,7 +113,6 @@ Documentation - Updated Routes bfgwiki2 tutorial to reflect the fact that context factories are now no longer used. - 0.9.1 (2009-06-02) ================== diff --git a/repoze/bfg/path.py b/repoze/bfg/path.py index fcd317fba..c3d914208 100644 --- a/repoze/bfg/path.py +++ b/repoze/bfg/path.py @@ -4,9 +4,16 @@ import sys def caller_path(path, level=2): if not os.path.isabs(path): package_globals = sys._getframe(level).f_globals - package_name = package_globals['__name__'] - package = sys.modules[package_name] - prefix = package_path(package) + 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 |
