Skip to content

Commit

Permalink
s4cmd: avoid AttributeError on newer botocore
Browse files Browse the repository at this point in the history
Newer botocore has removed `vendored` entirely; try to import carefully.
Makes s4cmd work again on botocore-1.29.84.

```
Traceback (most recent call last):
  File "/usr/lib/python-exec/python3.10/s4cmd", line 33, in <module>
    sys.exit(load_entry_point('s4cmd==2.1.0', 'console_scripts', 's4cmd')())
  File "/usr/lib/python-exec/python3.10/s4cmd", line 25, in importlib_load_entry_point
    return next(matches).load()
  File "/usr/lib/python3.10/importlib/metadata/__init__.py", line 171, in load
    module = import_module(match.group('module'))
  File "/usr/lib/python3.10/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1050, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1027, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1006, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 688, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 883, in exec_module
  File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
  File "/usr/lib64/python-exec/python3.10/s4cmd.py", line 255, in <module>
    class BotoClient(object):
  File "/usr/lib64/python-exec/python3.10/s4cmd.py", line 274, in BotoClient
    botocore.vendored.requests.packages.urllib3.exceptions.ReadTimeoutError,
AttributeError: module 'botocore' has no attribute 'vendored'
```

Signed-off-by: Robin H. Johnson <[email protected]>
  • Loading branch information
robbat2 committed Mar 19, 2023
1 parent 91cf847 commit 514e948
Showing 1 changed file with 5 additions and 1 deletion.
6 changes: 5 additions & 1 deletion s4cmd.py
Original file line number Diff line number Diff line change
Expand Up @@ -271,9 +271,13 @@ class BotoClient(object):
S3RetryableErrors = (
socket.timeout,
socket.error if IS_PYTHON2 else ConnectionError,
botocore.vendored.requests.packages.urllib3.exceptions.ReadTimeoutError,
botocore.exceptions.IncompleteReadError
)
try:
# Newer boto removed botocore.vendored entirely.
S3RetryableErrors += (botocore.vendored.requests.packages.urllib3.exceptions.ReadTimeoutError,)
except AttributeError:
pass

# List of API functions we use in s4cmd.
ALLOWED_CLIENT_METHODS = [
Expand Down

0 comments on commit 514e948

Please sign in to comment.