Make file handing in setup.py more robust by using context managers to properly

close files.
This commit is contained in:
Brett Cannon 2010-10-29 20:19:27 +00:00
parent 2b40efdfe8
commit 9f5db07dab
1 changed files with 44 additions and 42 deletions

View File

@ -423,7 +423,8 @@ class PyBuildExt(build_ext):
missing = [] missing = []
config_h = sysconfig.get_config_h_filename() config_h = sysconfig.get_config_h_filename()
config_h_vars = sysconfig.parse_config_h(open(config_h)) with open(config_h) as file:
config_h_vars = sysconfig.parse_config_h(file)
platform = self.get_platform() platform = self.get_platform()
srcdir = sysconfig.get_config_var('srcdir') srcdir = sysconfig.get_config_var('srcdir')
@ -556,17 +557,17 @@ class PyBuildExt(build_ext):
os.makedirs(self.build_temp) os.makedirs(self.build_temp)
ret = os.system("ldd %s > %s" % (do_readline, tmpfile)) ret = os.system("ldd %s > %s" % (do_readline, tmpfile))
if ret >> 8 == 0: if ret >> 8 == 0:
fp = open(tmpfile) with open(tmpfile) as fp:
for ln in fp: for ln in fp:
if 'curses' in ln: if 'curses' in ln:
readline_termcap_library = re.sub( readline_termcap_library = re.sub(
r'.*lib(n?cursesw?)\.so.*', r'\1', ln r'.*lib(n?cursesw?)\.so.*', r'\1', ln
).rstrip() ).rstrip()
break break
if 'tinfo' in ln: # termcap interface split out from ncurses # termcap interface split out from ncurses
if 'tinfo' in ln:
readline_termcap_library = 'tinfo' readline_termcap_library = 'tinfo'
break break
fp.close()
os.unlink(tmpfile) os.unlink(tmpfile)
# Issue 7384: If readline is already linked against curses, # Issue 7384: If readline is already linked against curses,
# use the same library for the readline and curses modules. # use the same library for the readline and curses modules.
@ -675,7 +676,7 @@ class PyBuildExt(build_ext):
if sys.platform == 'darwin' and is_macosx_sdk_path(name): if sys.platform == 'darwin' and is_macosx_sdk_path(name):
name = os.path.join(macosx_sdk_root(), name[1:]) name = os.path.join(macosx_sdk_root(), name[1:])
try: try:
incfile = open(name, 'r') with open(name, 'r') as incfile:
for line in incfile: for line in incfile:
m = openssl_ver_re.match(line) m = openssl_ver_re.match(line)
if m: if m:
@ -825,7 +826,8 @@ class PyBuildExt(build_ext):
if db_setup_debug: print("db: looking for db.h in", f) if db_setup_debug: print("db: looking for db.h in", f)
if os.path.exists(f): if os.path.exists(f):
f = open(f, "rb").read() with open(f, 'rb') as file:
f = file.read()
m = re.search(br"#define\WDB_VERSION_MAJOR\W(\d+)", f) m = re.search(br"#define\WDB_VERSION_MAJOR\W(\d+)", f)
if m: if m:
db_major = int(m.group(1)) db_major = int(m.group(1))
@ -945,7 +947,8 @@ class PyBuildExt(build_ext):
if os.path.exists(f): if os.path.exists(f):
if sqlite_setup_debug: print("sqlite: found %s"%f) if sqlite_setup_debug: print("sqlite: found %s"%f)
incf = open(f).read() with open(f) as file:
incf = file.read()
m = re.search( m = re.search(
r'\s*.*#\s*.*define\s.*SQLITE_VERSION\W*"(.*)"', incf) r'\s*.*#\s*.*define\s.*SQLITE_VERSION\W*"(.*)"', incf)
if m: if m:
@ -1170,7 +1173,7 @@ class PyBuildExt(build_ext):
zlib_h = zlib_inc[0] + '/zlib.h' zlib_h = zlib_inc[0] + '/zlib.h'
version = '"0.0.0"' version = '"0.0.0"'
version_req = '"1.1.3"' version_req = '"1.1.3"'
fp = open(zlib_h) with open(zlib_h) as fp:
while 1: while 1:
line = fp.readline() line = fp.readline()
if not line: if not line:
@ -1430,14 +1433,13 @@ class PyBuildExt(build_ext):
os.system("file %s/Tk.framework/Tk | grep 'for architecture' > %s"%(os.path.join(sysroot, F[1:]), tmpfile)) os.system("file %s/Tk.framework/Tk | grep 'for architecture' > %s"%(os.path.join(sysroot, F[1:]), tmpfile))
else: else:
os.system("file %s/Tk.framework/Tk | grep 'for architecture' > %s"%(F, tmpfile)) os.system("file %s/Tk.framework/Tk | grep 'for architecture' > %s"%(F, tmpfile))
fp = open(tmpfile)
with open(tmpfile) as fp:
detected_archs = [] detected_archs = []
for ln in fp: for ln in fp:
a = ln.split()[-1] a = ln.split()[-1]
if a in archs: if a in archs:
detected_archs.append(ln.split()[-1]) detected_archs.append(ln.split()[-1])
fp.close()
os.unlink(tmpfile) os.unlink(tmpfile)
for a in detected_archs: for a in detected_archs:
@ -1708,7 +1710,7 @@ class PyBuildExt(build_ext):
ffi_inc = find_file('ffi.h', [], inc_dirs) ffi_inc = find_file('ffi.h', [], inc_dirs)
if ffi_inc is not None: if ffi_inc is not None:
ffi_h = ffi_inc[0] + '/ffi.h' ffi_h = ffi_inc[0] + '/ffi.h'
fp = open(ffi_h) with open(ffi_h) as fp:
while 1: while 1:
line = fp.readline() line = fp.readline()
if not line: if not line: