Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9542c58

Browse files
committed
Use module os.
Split off file cache to module 'linecache'.
1 parent d6c3f25 commit 9542c58

2 files changed

Lines changed: 8 additions & 102 deletions

File tree

Lib/lib-old/tb.py

Lines changed: 4 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@
22
# Also an interactive stack trace browser.
33

44
import sys
5-
try:
6-
import mac
7-
os = mac
8-
except ImportError:
9-
import posix
10-
os = posix
5+
import os
116
from stat import *
127
import string
8+
import linecache
139

1410
def br(): browser(sys.last_traceback)
1511

@@ -67,7 +63,7 @@ def browserlist(tb):
6763
for i in range(first, last+1):
6864
if i == lineno: prefix = '***' + string.rjust(`i`, 4) + ':'
6965
else: prefix = string.rjust(`i`, 7) + ':'
70-
line = readfileline(filename, i)
66+
line = linecache.getline(filename, i)
7167
if line[-1:] == '\n': line = line[:-1]
7268
print prefix + line
7369

@@ -112,7 +108,7 @@ def printtbheader(tb):
112108
filename = tb.tb_frame.f_code.co_filename
113109
lineno = tb.tb_lineno
114110
info = '"' + filename + '"(' + `lineno` + ')'
115-
line = readfileline(filename, lineno)
111+
line = linecache.getline(filename, lineno)
116112
if line:
117113
info = info + ': ' + string.strip(line)
118114
print info
@@ -175,46 +171,3 @@ def printdict(v, maxlevel):
175171
printobject(v[key], maxlevel-1)
176172
if i+1 < n: print ',',
177173
if n > 6: print '...',
178-
179-
_filecache = {}
180-
181-
def readfileline(filename, lineno):
182-
try:
183-
stat = os.stat(filename)
184-
except os.error, msg:
185-
print 'Cannot stat', filename, '--', msg
186-
return ''
187-
cache_ok = 0
188-
if _filecache.has_key(filename):
189-
cached_stat, lines = _filecache[filename]
190-
if stat[ST_SIZE] == cached_stat[ST_SIZE] and \
191-
stat[ST_MTIME] == cached_stat[ST_MTIME]:
192-
cache_ok = 1
193-
else:
194-
print 'Stale cache entry for', filename
195-
del _filecache[filename]
196-
if not cache_ok:
197-
lines = readfilelines(filename)
198-
if not lines:
199-
return ''
200-
_filecache[filename] = stat, lines
201-
if 0 <= lineno-1 < len(lines):
202-
return lines[lineno-1]
203-
else:
204-
print 'Line number out of range, last line is', len(lines)
205-
return ''
206-
207-
def readfilelines(filename):
208-
try:
209-
fp = open(filename, 'r')
210-
except:
211-
print 'Cannot open', filename
212-
return []
213-
lines = []
214-
while 1:
215-
line = fp.readline()
216-
if not line: break
217-
lines.append(line)
218-
if not lines:
219-
print 'Empty file', filename
220-
return lines

Lib/tb.py

Lines changed: 4 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,10 @@
22
# Also an interactive stack trace browser.
33

44
import sys
5-
try:
6-
import mac
7-
os = mac
8-
except ImportError:
9-
import posix
10-
os = posix
5+
import os
116
from stat import *
127
import string
8+
import linecache
139

1410
def br(): browser(sys.last_traceback)
1511

@@ -67,7 +63,7 @@ def browserlist(tb):
6763
for i in range(first, last+1):
6864
if i == lineno: prefix = '***' + string.rjust(`i`, 4) + ':'
6965
else: prefix = string.rjust(`i`, 7) + ':'
70-
line = readfileline(filename, i)
66+
line = linecache.getline(filename, i)
7167
if line[-1:] == '\n': line = line[:-1]
7268
print prefix + line
7369

@@ -112,7 +108,7 @@ def printtbheader(tb):
112108
filename = tb.tb_frame.f_code.co_filename
113109
lineno = tb.tb_lineno
114110
info = '"' + filename + '"(' + `lineno` + ')'
115-
line = readfileline(filename, lineno)
111+
line = linecache.getline(filename, lineno)
116112
if line:
117113
info = info + ': ' + string.strip(line)
118114
print info
@@ -175,46 +171,3 @@ def printdict(v, maxlevel):
175171
printobject(v[key], maxlevel-1)
176172
if i+1 < n: print ',',
177173
if n > 6: print '...',
178-
179-
_filecache = {}
180-
181-
def readfileline(filename, lineno):
182-
try:
183-
stat = os.stat(filename)
184-
except os.error, msg:
185-
print 'Cannot stat', filename, '--', msg
186-
return ''
187-
cache_ok = 0
188-
if _filecache.has_key(filename):
189-
cached_stat, lines = _filecache[filename]
190-
if stat[ST_SIZE] == cached_stat[ST_SIZE] and \
191-
stat[ST_MTIME] == cached_stat[ST_MTIME]:
192-
cache_ok = 1
193-
else:
194-
print 'Stale cache entry for', filename
195-
del _filecache[filename]
196-
if not cache_ok:
197-
lines = readfilelines(filename)
198-
if not lines:
199-
return ''
200-
_filecache[filename] = stat, lines
201-
if 0 <= lineno-1 < len(lines):
202-
return lines[lineno-1]
203-
else:
204-
print 'Line number out of range, last line is', len(lines)
205-
return ''
206-
207-
def readfilelines(filename):
208-
try:
209-
fp = open(filename, 'r')
210-
except:
211-
print 'Cannot open', filename
212-
return []
213-
lines = []
214-
while 1:
215-
line = fp.readline()
216-
if not line: break
217-
lines.append(line)
218-
if not lines:
219-
print 'Empty file', filename
220-
return lines

0 commit comments

Comments
 (0)