From 1bbf2fa93e863e299985ff520e63b97959523801 Mon Sep 17 00:00:00 2001 From: Jonathon Anderson <17242663+blue42u@users.noreply.github.com> Date: Mon, 18 Jul 2022 01:40:13 -0500 Subject: Only hack botocore when needed (#31610) Newer versions of botocore (>=1.23.47) support the full IOBase interface, so the hacks added to supplement the missing attributes are no longer needed. Conditionally disable the hacks if they appear to be unnecessary based on the class hierarchy found at runtime. --- lib/spack/spack/s3_handler.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/lib/spack/spack/s3_handler.py b/lib/spack/spack/s3_handler.py index 9f775abafb..932ba4611d 100644 --- a/lib/spack/spack/s3_handler.py +++ b/lib/spack/spack/s3_handler.py @@ -3,7 +3,7 @@ # # SPDX-License-Identifier: (Apache-2.0 OR MIT) -from io import BufferedReader +from io import BufferedReader, IOBase import six import six.moves.urllib.error as urllib_error @@ -23,11 +23,15 @@ import spack.util.url as url_util # https://github.com/python/cpython/pull/3249 class WrapStream(BufferedReader): def __init__(self, raw): - raw.readable = lambda: True - raw.writable = lambda: False - raw.seekable = lambda: False - raw.closed = False - raw.flush = lambda: None + # In botocore >=1.23.47, StreamingBody inherits from IOBase, so we + # only add missing attributes in older versions. + # https://github.com/boto/botocore/commit/a624815eabac50442ed7404f3c4f2664cd0aa784 + if not isinstance(raw, IOBase): + raw.readable = lambda: True + raw.writable = lambda: False + raw.seekable = lambda: False + raw.closed = False + raw.flush = lambda: None super(WrapStream, self).__init__(raw) def detach(self): -- cgit v1.2.3-70-g09d2