Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix exception causes in core.py #328

Merged
merged 1 commit into from
Jun 16, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 28 additions & 28 deletions s3fs/core.py
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ class S3FileSystem(AbstractFileSystem):
If not anonymous, use this security token, if specified
use_ssl : bool (True)
Whether to use SSL in connections to S3; may be faster without, but
insecure. If ``use_ssl`` is also set in ``client_kwargs``,
insecure. If ``use_ssl`` is also set in ``client_kwargs``,
the value set in ``client_kwargs`` will take priority.
s3_additional_kwargs : dict of parameters that are used when calling s3 api
methods. Typically used for things like "ServerSideEncryption".
Expand Down Expand Up @@ -278,9 +278,9 @@ def connect(self, refresh=True):
self.session = botocore.session.Session(**self.kwargs)

logger.debug("Setting up s3fs instance")

client_kwargs = self.client_kwargs.copy()
init_kwargs = dict(aws_access_key_id=self.key,
init_kwargs = dict(aws_access_key_id=self.key,
aws_secret_access_key=self.secret,
aws_session_token=self.token)
init_kwargs = {key: value for key, value in init_kwargs.items()
Expand All @@ -290,12 +290,12 @@ def connect(self, refresh=True):
config_kwargs = self._prepare_config_kwargs()
if self.anon:
from botocore import UNSIGNED
drop_keys = {"aws_access_key_id",
"aws_secret_access_key",
drop_keys = {"aws_access_key_id",
"aws_secret_access_key",
"aws_session_token"}
init_kwargs = {key: value for key, value
init_kwargs = {key: value for key, value
in init_kwargs.items() if key not in drop_keys}
client_kwargs = {key: value for key, value
client_kwargs = {key: value for key, value
in client_kwargs.items() if key not in drop_keys}
config_kwargs["signature_version"] = UNSIGNED
conf = Config(**config_kwargs)
Expand Down Expand Up @@ -415,7 +415,7 @@ def _lsdir(self, path, refresh=False, max_items=None):
f['Key'] = '/'.join([bucket, f['Key']])
f['name'] = f['Key']
except ClientError as e:
raise translate_boto_error(e)
raise translate_boto_error(e) from e

self.dircache[path] = files
return files
Expand All @@ -439,9 +439,9 @@ def mkdir(self, path, acl="", create_parents=True, **kwargs):
self.invalidate_cache('')
self.invalidate_cache(bucket)
except ClientError as e:
raise translate_boto_error(e)
raise translate_boto_error(e) from e
except ParamValidationError as e:
raise ValueError('Bucket create failed %r: %s' % (bucket, e))
raise ValueError('Bucket create failed %r: %s' % (bucket, e)) from e
elif not self.exists(bucket):
raise FileNotFoundError

Expand All @@ -453,7 +453,7 @@ def rmdir(self, path):
try:
self.s3.delete_bucket(Bucket=path)
except ClientError as e:
raise translate_boto_error(e)
raise translate_boto_error(e) from e
self.invalidate_cache(path)
self.invalidate_cache('')

Expand Down Expand Up @@ -524,7 +524,7 @@ def touch(self, path, truncate=True, data=None, **kwargs):
try:
self._call_s3(self.s3.put_object, kwargs, Bucket=bucket, Key=key)
except ClientError as ex:
raise translate_boto_error(ex)
raise translate_boto_error(ex) from ex
self.invalidate_cache(self._parent(path))

def info(self, path, version_id=None, refresh=False):
Expand Down Expand Up @@ -558,9 +558,9 @@ def info(self, path, version_id=None, refresh=False):
ee = translate_boto_error(e)
# This could have failed since the thing we are looking for is a prefix.
if not isinstance(ee, FileNotFoundError):
raise ee
raise ee from e
except ParamValidationError as e:
raise ValueError('Failed to head path %r: %s' % (path, e))
raise ValueError('Failed to head path %r: %s' % (path, e)) from e

if should_fetch_from_s3:
try:
Expand All @@ -587,12 +587,12 @@ def info(self, path, version_id=None, refresh=False):

raise FileNotFoundError(path)
except ClientError as e:
raise translate_boto_error(e)
raise translate_boto_error(e) from e
except ParamValidationError as e:
raise ValueError("Failed to list path %r: %s" % (path, e))
raise ValueError("Failed to list path %r: %s" % (path, e)) from e

return super().info(path)

def checksum(self, path, refresh=False):
"""
Unique value for current version of file
Expand All @@ -607,16 +607,16 @@ def checksum(self, path, refresh=False):
path of file to get checksum for
refresh : bool (=False)
if False, look in local cache for file details first

"""

info = self.info(path, refresh=refresh)

if info["type"] != 'directory':
return int(info["ETag"].strip('"'), 16)
else:
return int(tokenize(info), 16)


def isdir(self, path):
path = self._strip_protocol(path).strip("/")
Expand Down Expand Up @@ -923,9 +923,9 @@ def copy_basic(self, path1, path2, **kwargs):
Bucket=buc2, Key=key2, CopySource=copy_src
)
except ClientError as e:
raise translate_boto_error(e)
raise translate_boto_error(e) from e
except ParamValidationError as e:
raise ValueError('Copy failed (%r -> %r): %s' % (path1, path2, e))
raise ValueError('Copy failed (%r -> %r): %s' % (path1, path2, e)) from e
self.invalidate_cache(path2)


Expand Down Expand Up @@ -963,7 +963,7 @@ def copy_managed(self, path1, path2, block=5 * 2**30, **kwargs):
exc_info=True)
time.sleep(1.7 ** attempt * 0.1)
except Exception as exc:
raise IOError('Write failed: %r' % exc)
raise IOError('Write failed: %r' % exc) from exc
parts.append({'PartNumber': i + 1,
'ETag': out['CopyPartResult']['ETag']})
self._call_s3(
Expand Down Expand Up @@ -1015,7 +1015,7 @@ def bulk_delete(self, pathlist, **kwargs):
kwargs,
Bucket=bucket, Delete=delete_keys)
except ClientError as e:
raise translate_boto_error(e)
raise translate_boto_error(e) from e

def rm(self, path, recursive=False, **kwargs):
"""
Expand Down Expand Up @@ -1046,14 +1046,14 @@ def rm(self, path, recursive=False, **kwargs):
self._call_s3(
self.s3.delete_object, kwargs, Bucket=bucket, Key=key)
except ClientError as e:
raise translate_boto_error(e)
raise translate_boto_error(e) from e
self.invalidate_cache(self._parent(path))
else:
if self.exists(bucket):
try:
self.s3.delete_bucket(Bucket=bucket)
except BotoCoreError as e:
raise IOError('Delete bucket %r failed: %s' % (bucket, e))
raise IOError('Delete bucket %r failed: %s' % (bucket, e)) from e
self.invalidate_cache(bucket)
self.invalidate_cache('')
else:
Expand Down Expand Up @@ -1192,9 +1192,9 @@ def _initiate_upload(self):
self.fs.s3.create_multipart_upload,
Bucket=self.bucket, Key=self.key, ACL=self.acl)
except ClientError as e:
raise translate_boto_error(e)
raise translate_boto_error(e) from e
except ParamValidationError as e:
raise ValueError('Initiating write to %r failed: %s' % (self.path, e))
raise ValueError('Initiating write to %r failed: %s' % (self.path, e)) from e

if self.append_block:
# use existing data in key when appending,
Expand Down