From 0366a4c83d80617db77379c260c8ed5421b44223 Mon Sep 17 00:00:00 2001 From: Marshall Scorcio Date: Sat, 25 Apr 2020 22:00:32 -0700 Subject: [PATCH 1/2] Use `with statement` to auto-close tarfile --- spleeter/model/provider/github.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/spleeter/model/provider/github.py b/spleeter/model/provider/github.py index fdd3d80..49491ec 100644 --- a/spleeter/model/provider/github.py +++ b/spleeter/model/provider/github.py @@ -105,7 +105,6 @@ class GithubModelProvider(ModelProvider): if compute_file_checksum(archive.name) != self.checksum(name): raise IOError('Downloaded file is corrupted, please retry') get_logger().info('Extracting downloaded %s archive', name) - tar = tarfile.open(name=archive.name) - tar.extractall(path=path) - tar.close() + with tarfile.open(name=archive.name) as tar: + tar.extractall(path=path) get_logger().info('%s model file(s) extracted', name) From ba9999ac222b2e27a7f8183b2545459e84ee8be9 Mon Sep 17 00:00:00 2001 From: Marshall Scorcio Date: Sat, 25 Apr 2020 22:06:17 -0700 Subject: [PATCH 2/2] Remove temp model archive after extraction Without this change every time a model is downloaded it leaks a file in the temp directory. --- spleeter/model/provider/github.py | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/spleeter/model/provider/github.py b/spleeter/model/provider/github.py index 49491ec..cd4d904 100644 --- a/spleeter/model/provider/github.py +++ b/spleeter/model/provider/github.py @@ -16,6 +16,7 @@ import hashlib import tarfile +import os from tempfile import NamedTemporaryFile @@ -96,15 +97,18 @@ class GithubModelProvider(ModelProvider): with requests.get(url, stream=True) as response: response.raise_for_status() archive = NamedTemporaryFile(delete=False) - with archive as stream: - # Note: check for chunk size parameters ? - for chunk in response.iter_content(chunk_size=8192): - if chunk: - stream.write(chunk) - get_logger().info('Validating archive checksum') - if compute_file_checksum(archive.name) != self.checksum(name): - raise IOError('Downloaded file is corrupted, please retry') - get_logger().info('Extracting downloaded %s archive', name) - with tarfile.open(name=archive.name) as tar: - tar.extractall(path=path) + try: + with archive as stream: + # Note: check for chunk size parameters ? + for chunk in response.iter_content(chunk_size=8192): + if chunk: + stream.write(chunk) + get_logger().info('Validating archive checksum') + if compute_file_checksum(archive.name) != self.checksum(name): + raise IOError('Downloaded file is corrupted, please retry') + get_logger().info('Extracting downloaded %s archive', name) + with tarfile.open(name=archive.name) as tar: + tar.extractall(path=path) + finally: + os.unlink(archive.name) get_logger().info('%s model file(s) extracted', name)