Skip to content

Commit 3e6ff26

Browse files
committed
fix context loader
1 parent 30c26de commit 3e6ff26

File tree

1 file changed

+22
-19
lines changed

1 file changed

+22
-19
lines changed

ctd/read.py

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -36,29 +36,32 @@ def _normalize_names(name: str) -> str:
3636
def _open_compressed(fname: Path) -> str:
3737
"""Open compressed gzip, gz, zip or bz2 files."""
3838
extension = fname.suffix.casefold()
39-
if extension in [".gzip", ".gz"]:
40-
cfile = gzip.open(str(fname))
41-
elif extension == ".bz2":
42-
cfile = bz2.BZ2File(str(fname))
43-
elif extension == ".zip":
39+
loaders = {
40+
".gzip": gzip.open,
41+
".gz": gzip.open,
42+
".bz2": bz2.BZ2File,
43+
".zip": zipfile.ZipFile,
44+
}
45+
loader = loaders.get(extension)
46+
if loader is None:
47+
valid = ", ".join(loaders.keys())
48+
msg = (
49+
"Unrecognized file extension. "
50+
f"Expected {valid}, got {extension}."
51+
)
52+
raise ValueError(msg)
53+
54+
if extension == ".zip":
4455
# NOTE: Zip format may contain more than one file in the archive
4556
# (similar to tar), here we assume that there is just one file per
4657
# zipfile! Also, we ask for the name because it can be different from
4758
# the zipfile file!!
48-
zfile = zipfile.ZipFile(str(fname))
49-
name = zfile.namelist()[0]
50-
cfile = zfile.open(name)
51-
else:
52-
msg = (
53-
"Unrecognized file extension. "
54-
f"Expected .gzip, .bz2, or .zip, got {extension}"
55-
)
56-
raise ValueError(
57-
msg,
58-
)
59-
contents = cfile.read()
60-
cfile.close()
61-
return contents
59+
with loader(str(fname)) as zfile:
60+
name = zfile.namelist()[0]
61+
with zfile.open(name) as cfile:
62+
return cfile.read()
63+
with loader(str(fname)) as cfile:
64+
return cfile.read()
6265

6366

6467
def _read_file(fname: str | Path | StringIO) -> StringIO:

0 commit comments

Comments
 (0)