diff --git a/b2sdk/_internal/bucket.py b/b2sdk/_internal/bucket.py index e6df3495c..30d169bad 100644 --- a/b2sdk/_internal/bucket.py +++ b/b2sdk/_internal/bucket.py @@ -1363,15 +1363,24 @@ def unhide_file(self, file_name: str, bypass_governance: bool = False) -> FileId if latest_file_version is None: raise FileNotPresent(bucket_name=self.name, file_id_or_name=file_name) - action = latest_file_version.action + return self.unhide_file_version(latest_file_version, bypass_governance=bypass_governance) + + def unhide_file_version( + self, file_version: FileVersion, bypass_governance: bool = False + ) -> FileIdAndName: + """ + Deletes the file version if it corresponds to the "hide marker", raises error otherwise + """ + + action = file_version.action if action == 'upload': - raise FileNotHidden(file_name) + raise FileNotHidden(file_version.file_name) elif action == 'delete': - raise FileDeleted(file_name) + raise FileDeleted(file_version.file_name) elif action != 'hide': raise UnexpectedFileVersionAction(action) - return self.delete_file_version(latest_file_version.id_, file_name, bypass_governance) + return self.delete_file_version(file_version.id_, file_version.file_name, bypass_governance) def copy( self, diff --git a/changelog.d/+unhide_file_version.added.md b/changelog.d/+unhide_file_version.added.md new file mode 100644 index 000000000..6c8aa7ac1 --- /dev/null +++ b/changelog.d/+unhide_file_version.added.md @@ -0,0 +1 @@ +Add `unhide_file_version` method to the `Bucket` class extracting relevant logic from `unhide_file`. \ No newline at end of file diff --git a/test/unit/bucket/test_bucket.py b/test/unit/bucket/test_bucket.py index 108c46efd..7cab2b6da 100644 --- a/test/unit/bucket/test_bucket.py +++ b/test/unit/bucket/test_bucket.py @@ -654,6 +654,14 @@ def test_unhidden_file(self): expected = [('hello.txt', 11, 'upload', None)] self.assertBucketContents(expected, '', show_versions=True) + def test_unhidden_file_version(self): + data = b'hello world' + self.bucket.upload_bytes(data, 'hello.txt') + file_version = self.bucket.hide_file('hello.txt') + self.bucket.unhide_file_version(file_version) + expected = [('hello.txt', 11, 'upload', None)] + self.assertBucketContents(expected, '', show_versions=True) + def test_delete_file_version(self): data = b'hello world'