From 346ef139dd4e3afac8bb4fc7d6c6b0941c4d4944 Mon Sep 17 00:00:00 2001 From: Ruslan Kuprieiev Date: Mon, 4 Jun 2018 22:24:46 +0300 Subject: [PATCH] out: properly remove outputs when reproducing Signed-off-by: Ruslan Kuprieiev --- dvc/output/gs.py | 6 +----- dvc/output/local.py | 2 +- dvc/output/s3.py | 2 +- dvc/remote/gs.py | 20 +++++++++++++++----- dvc/remote/local.py | 6 ++++++ dvc/remote/s3.py | 10 ++++++++++ 6 files changed, 34 insertions(+), 12 deletions(-) diff --git a/dvc/output/gs.py b/dvc/output/gs.py index 65808386d..d30b560e4 100644 --- a/dvc/output/gs.py +++ b/dvc/output/gs.py @@ -41,8 +41,4 @@ class OutputGS(DependencyGS): self.info = self.project.cache.gs.save(self.path_info) def remove(self): - blob = self.client.bucket(self.bucket).get_blob(self.key) - if not blob: - return - - blob.delete() + self.remote.remove(self.path_info) diff --git a/dvc/output/local.py b/dvc/output/local.py index 816e03217..d7986b514 100644 --- a/dvc/output/local.py +++ b/dvc/output/local.py @@ -72,4 +72,4 @@ class OutputLOCAL(DependencyLOCAL): self.info = self.project.cache.local.save(self.path_info) def remove(self): - remove(self.path) + self.remote.remove(self.path_info) diff --git a/dvc/output/s3.py b/dvc/output/s3.py index 5df547d86..3cd0aedd4 100644 --- a/dvc/output/s3.py +++ b/dvc/output/s3.py @@ -40,4 +40,4 @@ class OutputS3(DependencyS3): self.info = self.project.cache.s3.save(self.path_info) def remove(self): - self.s3.Object(self.bucket, self.key).delete() + self.remote.remove(self.path_info) diff --git a/dvc/remote/gs.py b/dvc/remote/gs.py index 8d8e658a4..c70df703a 100644 --- a/dvc/remote/gs.py +++ b/dvc/remote/gs.py @@ -16,7 +16,7 @@ class RemoteGS(RemoteBase): def __init__(self, project, config): self.project = project - self.url = config.get[Config.SECTION_REMOTE_URL] + self.url = config[Config.SECTION_REMOTE_URL] self.projectname = config.get(Config.SECTION_GCP_PROJECTNAME, None) @property @@ -55,15 +55,15 @@ class RemoteGS(RemoteBase): if not blob: raise DvcException('{} doesn\'t exist in the cloud'.format(path_info['key'])) - self.gs.bucket(self.bucket).copy_blob(blob, self.bucket, name=dest_key) + self.gs.bucket(self.bucket).copy_blob(blob, self.gs.bucket(path_info['bucket']), new_name=dest_key) - return {PARAM_ETAG: etag} + return {self.PARAM_ETAG: etag} def checkout(self, path_info, checksum_info): if path_info['scheme'] != 'gs': raise NotImplementedError - etag = checksum_info.get(PARAM_ETAG, None) + etag = checksum_info.get(self.PARAM_ETAG, None) if not etag: return @@ -72,4 +72,14 @@ class RemoteGS(RemoteBase): if not blob: raise DvcException('{} doesn\'t exist in the cloud'.format(key)) - self.gs.bucket(path_info['bucket']).copy_blob(blob, path_info['bucket'], name=path_info['key']) + self.gs.bucket(path_info['bucket']).copy_blob(blob, self.gs.bucket(self.bucket), new_name=path_info['key']) + + def remove(self, path_info): + if path_info['scheme'] != 'gs': + raise NotImplementedError + + blob = self.gs.bucket(path_info['key']).get_blob(path_info['key']) + if not blob: + return + + blob.delete() diff --git a/dvc/remote/local.py b/dvc/remote/local.py index febff9892..75602ae0a 100644 --- a/dvc/remote/local.py +++ b/dvc/remote/local.py @@ -225,3 +225,9 @@ class RemoteLOCAL(RemoteBase): raise NotImplementedError return {self.PARAM_MD5: self.state.update(path_info['path'])} + + def remove(self, path_info): + if path_info['scheme'] != 'local': + raise NotImplementedError + + remove(path_info['path']) diff --git a/dvc/remote/s3.py b/dvc/remote/s3.py index 2dc19bfae..cfc9cb2ac 100644 --- a/dvc/remote/s3.py +++ b/dvc/remote/s3.py @@ -73,3 +73,13 @@ class RemoteS3(RemoteBase): 'Key': key} self.s3.Bucket(path_info['bucket']).copy(source, path_info['key']) + + def remove(self, path_info): + if path_info['scheme'] != 's3': + raise NotImplementedError + + try: + obj = self.s3.Object(path_info['bucket'], path_info['key']).get() + obj.delete() + except Exception: + pass