From 50f107609b2fd0f2f6085ac760708b73e244eb25 Mon Sep 17 00:00:00 2001 From: Matthew Feickert Date: Fri, 15 Mar 2024 14:38:28 -0500 Subject: [PATCH] feat: Use Python 3.12+ tarfile data extraction filter (#2455) * In Python 3.12 extraction filters are added and will become default in Python 3.14. To start using them for when Python 3.12 support is added, and to guard against a Python 3.14 DeprecationWarning, use the data extraction filter for extracting tarfiles in pyhf.contrib.utils.download. - c.f. https://docs.python.org/3.12/library/tarfile.html#extraction-filters --- src/pyhf/contrib/utils.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/pyhf/contrib/utils.py b/src/pyhf/contrib/utils.py index 02c9ffb5f2..7fa9550242 100644 --- a/src/pyhf/contrib/utils.py +++ b/src/pyhf/contrib/utils.py @@ -91,7 +91,12 @@ def download(archive_url, output_directory, force=False, compress=False): with tarfile.open( mode="r:*", fileobj=BytesIO(response.content) ) as archive: - archive.extractall(output_directory) + # TODO: Simplify after pyhf is Python 3.12+ only + # c.f. https://docs.python.org/3.12/library/tarfile.html#extraction-filters + if hasattr(tarfile, "data_filter"): + archive.extractall(output_directory, filter="data") + else: + archive.extractall(output_directory) except tarfile.ReadError: if not zipfile.is_zipfile(BytesIO(response.content)): raise exceptions.InvalidArchive(