summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJonathon Anderson <17242663+blue42u@users.noreply.github.com>2022-07-18 01:40:13 -0500
committerGitHub <noreply@github.com>2022-07-18 08:40:13 +0200
commit117c7cc3db1229017c4e2a947d61405eec568f54 (patch)
tree6a9e86a795a47c1632ba70ca8a5377bb3e669ac8 /lib
parent7b95e2f05043442ee2d2c1494c5cef7b1a489251 (diff)
downloadspack-117c7cc3db1229017c4e2a947d61405eec568f54.tar.gz
spack-117c7cc3db1229017c4e2a947d61405eec568f54.tar.bz2
spack-117c7cc3db1229017c4e2a947d61405eec568f54.tar.xz
spack-117c7cc3db1229017c4e2a947d61405eec568f54.zip
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.
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/s3_handler.py16
1 files 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):