Skip to content

Commit

Permalink
Fix linecache.py add lazycache to __all__ and use dict.clear to clear…
Browse files Browse the repository at this point in the history
… the cache (GH-4641)
  • Loading branch information
ganziqim authored and csabella committed Jan 26, 2020
1 parent 8271441 commit 4515a59
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 18 deletions.
36 changes: 18 additions & 18 deletions Lib/linecache.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,8 @@
import os
import tokenize

__all__ = ["getline", "clearcache", "checkcache"]
__all__ = ["getline", "clearcache", "checkcache", "lazycache"]

def getline(filename, lineno, module_globals=None):
lines = getlines(filename, module_globals)
if 1 <= lineno <= len(lines):
return lines[lineno-1]
else:
return ''


# The cache

# The cache. Maps filenames to either a thunk which will provide source code,
# or a tuple (size, mtime, lines, fullname) once loaded.
Expand All @@ -29,9 +20,17 @@ def getline(filename, lineno, module_globals=None):

def clearcache():
"""Clear the cache entirely."""
cache.clear()

global cache
cache = {}

def getline(filename, lineno, module_globals=None):
"""Get a line for a Python source file from the cache.
Update the cache if it doesn't contain an entry for this file already."""

lines = getlines(filename, module_globals)
if 1 <= lineno <= len(lines):
return lines[lineno - 1]
return ''


def getlines(filename, module_globals=None):
Expand All @@ -56,11 +55,10 @@ def checkcache(filename=None):

if filename is None:
filenames = list(cache.keys())
elif filename in cache:
filenames = [filename]
else:
if filename in cache:
filenames = [filename]
else:
return
return

for filename in filenames:
entry = cache[filename]
Expand Down Expand Up @@ -109,8 +107,10 @@ def updatecache(filename, module_globals=None):
# for this module.
return []
cache[filename] = (
len(data), None,
[line+'\n' for line in data.splitlines()], fullname
len(data),
None,
[line + '\n' for line in data.splitlines()],
fullname
)
return cache[filename][2]

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
* Add `lazycache` function to `__all__`.
* Use `dict.clear` to clear the cache.
* Refactoring `getline` function and `checkcache` function.

0 comments on commit 4515a59

Please sign in to comment.