From f42c054253e0b24bf9097c05e4d30c392c6b5401 Mon Sep 17 00:00:00 2001 From: Fariz Rahman Date: Fri, 17 Jul 2020 10:26:07 +0530 Subject: [PATCH 1/2] key api --- dvc/tree/s3.py | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/dvc/tree/s3.py b/dvc/tree/s3.py index 17d58301f1..a518e3d15a 100644 --- a/dvc/tree/s3.py +++ b/dvc/tree/s3.py @@ -54,19 +54,35 @@ def __init__(self, repo, config): self._append_aws_grants_to_extra_args(config) + self.key_id = config.get("s3_key_id") + self.key_secret = config.get("s3_key_secret") + shared_creds = config.get("credentialpath") if shared_creds: os.environ.setdefault("AWS_SHARED_CREDENTIALS_FILE", shared_creds) + self._validate_config() + + + def _validate_config(self): + if bool(self.key_id) != bool(self.key_secret): + raise DvcException("Provide either both or none of `s3_key_id` and `s3_key_secret`.") @wrap_prop(threading.Lock()) @cached_property def s3(self): import boto3 - - session = boto3.session.Session( - profile_name=self.profile, region_name=self.region + + session_opts = dict( + profile_name = self.profile, + region_name = self.region ) + if self.key_id and self.key_secret: + session_opts['aws_access_key_id'] = self.key_id + session_opts['aws_secret_access_key'] = self.key_secret + + session = boto3.session.Session(**session_opts) + return session.client( "s3", endpoint_url=self.endpoint_url, use_ssl=self.use_ssl ) From 63fd3be5ce6161293385869393e65d689b42af8c Mon Sep 17 00:00:00 2001 From: "Restyled.io" Date: Fri, 17 Jul 2020 05:04:45 +0000 Subject: [PATCH 2/2] Restyled by black --- dvc/tree/s3.py | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/dvc/tree/s3.py b/dvc/tree/s3.py index a518e3d15a..a1a1a85024 100644 --- a/dvc/tree/s3.py +++ b/dvc/tree/s3.py @@ -62,24 +62,22 @@ def __init__(self, repo, config): os.environ.setdefault("AWS_SHARED_CREDENTIALS_FILE", shared_creds) self._validate_config() - def _validate_config(self): if bool(self.key_id) != bool(self.key_secret): - raise DvcException("Provide either both or none of `s3_key_id` and `s3_key_secret`.") + raise DvcException( + "Provide either both or none of `s3_key_id` and `s3_key_secret`." + ) @wrap_prop(threading.Lock()) @cached_property def s3(self): import boto3 - - session_opts = dict( - profile_name = self.profile, - region_name = self.region - ) + + session_opts = dict(profile_name=self.profile, region_name=self.region) if self.key_id and self.key_secret: - session_opts['aws_access_key_id'] = self.key_id - session_opts['aws_secret_access_key'] = self.key_secret + session_opts["aws_access_key_id"] = self.key_id + session_opts["aws_secret_access_key"] = self.key_secret session = boto3.session.Session(**session_opts)