mirror of https://github.com/cool-RR/PySnooper.git
Cache source by both module name and filename. Fixes #101
This commit is contained in:
parent
21f64e753b
commit
313b22f30c
|
@ -29,24 +29,19 @@ class UnavailableSource(object):
|
||||||
return u'SOURCE IS UNAVAILABLE'
|
return u'SOURCE IS UNAVAILABLE'
|
||||||
|
|
||||||
|
|
||||||
source_cache_by_module_name = {}
|
source_cache = {}
|
||||||
source_cache_by_file_name = {}
|
|
||||||
|
|
||||||
|
|
||||||
def get_source_from_frame(frame):
|
def get_source_from_frame(frame):
|
||||||
module_name = (frame.f_globals or {}).get('__name__') or ''
|
globs = frame.f_globals or {}
|
||||||
if module_name:
|
module_name = globs.get('__name__')
|
||||||
try:
|
|
||||||
return source_cache_by_module_name[module_name]
|
|
||||||
except KeyError:
|
|
||||||
pass
|
|
||||||
file_name = frame.f_code.co_filename
|
file_name = frame.f_code.co_filename
|
||||||
if file_name:
|
cache_key = (module_name, file_name)
|
||||||
try:
|
try:
|
||||||
return source_cache_by_file_name[file_name]
|
return source_cache[cache_key]
|
||||||
except KeyError:
|
except KeyError:
|
||||||
pass
|
pass
|
||||||
loader = (frame.f_globals or {}).get('__loader__')
|
loader = globs.get('__loader__')
|
||||||
|
|
||||||
source = None
|
source = None
|
||||||
if hasattr(loader, 'get_source'):
|
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 = [six.text_type(sline, encoding, 'replace') for sline in
|
||||||
source]
|
source]
|
||||||
|
|
||||||
if module_name:
|
source_cache[cache_key] = source
|
||||||
source_cache_by_module_name[module_name] = source
|
|
||||||
if file_name:
|
|
||||||
source_cache_by_file_name[file_name] = source
|
|
||||||
return source
|
return source
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue