From 313b22f30c261f8900a0f3250640b631127fb653 Mon Sep 17 00:00:00 2001 From: Alex Hall Date: Wed, 8 May 2019 12:58:06 +0200 Subject: [PATCH] Cache source by both module name and filename. Fixes #101 --- pysnooper/tracer.py | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/pysnooper/tracer.py b/pysnooper/tracer.py index 95f9b74..6da1d32 100644 --- a/pysnooper/tracer.py +++ b/pysnooper/tracer.py @@ -29,24 +29,19 @@ class UnavailableSource(object): return u'SOURCE IS UNAVAILABLE' -source_cache_by_module_name = {} -source_cache_by_file_name = {} +source_cache = {} def get_source_from_frame(frame): - module_name = (frame.f_globals or {}).get('__name__') or '' - if module_name: - try: - return source_cache_by_module_name[module_name] - except KeyError: - pass + globs = frame.f_globals or {} + module_name = globs.get('__name__') file_name = frame.f_code.co_filename - if file_name: - try: - return source_cache_by_file_name[file_name] - except KeyError: - pass - loader = (frame.f_globals or {}).get('__loader__') + cache_key = (module_name, file_name) + try: + return source_cache[cache_key] + except KeyError: + pass + loader = globs.get('__loader__') source = None if hasattr(loader, 'get_source'): @@ -92,10 +87,7 @@ def get_source_from_frame(frame): source = [six.text_type(sline, encoding, 'replace') for sline in source] - if module_name: - source_cache_by_module_name[module_name] = source - if file_name: - source_cache_by_file_name[file_name] = source + source_cache[cache_key] = source return source