From d8eba458bd88b7d51b2113610456c35cce9722f1 Mon Sep 17 00:00:00 2001 From: Arno Hautala Date: Wed, 6 Sep 2023 18:50:01 -0400 Subject: [PATCH 1/5] use ui.should_write() to control restore during import --- beetsplug/scrub.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/beetsplug/scrub.py b/beetsplug/scrub.py index d80446686..484ec073a 100644 --- a/beetsplug/scrub.py +++ b/beetsplug/scrub.py @@ -109,7 +109,7 @@ class ScrubPlugin(BeetsPlugin): self._log.error('could not scrub {0}: {1}', util.displayable_path(path), exc) - def _scrub_item(self, item, restore=True): + def _scrub_item(self, item, restore): """Remove tags from an Item's associated file and, if `restore` is enabled, write the database's tags back to the file. """ @@ -146,4 +146,4 @@ class ScrubPlugin(BeetsPlugin): for item in task.imported_items(): self._log.debug('auto-scrubbing {0}', util.displayable_path(item.path)) - self._scrub_item(item) + self._scrub_item(item, ui.should_write()) From c3a4356773ca0a304c99a630bda067ee52e54fac Mon Sep 17 00:00:00 2001 From: Arno Hautala Date: Sat, 9 Sep 2023 22:15:07 -0400 Subject: [PATCH 2/5] changelog --- docs/changelog.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/changelog.rst b/docs/changelog.rst index 0aacbf03a..5aa5ea0ec 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -118,6 +118,10 @@ New features: Bug fixes: +* :doc:`/plugins/scrub`: Fixed the import behavior where scrubbed database tags + were restored to newly imported tracks with config settings ``scrub.auto: yes`` + and ``import.write: no``. + :bug:`4326` * :doc:`/plugins/deezer`: Fixed the error where Deezer plugin would crash if non-Deezer id is passed during import. * :doc:`/plugins/fetchart`: Fix fetching from Cover Art Archive when the `maxwidth` option is set to one of the supported Cover Art Archive widths. From 8defbe4093fdf73c6e1aaff07dbf1b0b5f4064bb Mon Sep 17 00:00:00 2001 From: Arno Hautala Date: Sun, 10 Sep 2023 19:03:13 -0400 Subject: [PATCH 3/5] scrub on import tests --- test/test_importer.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/test/test_importer.py b/test/test_importer.py index 1dc6705b7..ee6d29e8e 100644 --- a/test/test_importer.py +++ b/test/test_importer.py @@ -244,6 +244,44 @@ class ImportHelper(TestHelper): self.assertEqual(len(os.listdir(syspath(self.libdir))), 0) +class ScrubbedImportTest(_common.TestCase, ImportHelper): + def setUp(self): + self.setup_beets(disk=True) + self.load_plugins('scrub') + self._create_import_dir(2) + self._setup_import_session(autotag=False) + + def tearDown(self): + self.teardown_beets() + + def test_tags_not_scrubbed(self): + config['plugins'] = ['scrub'] + config['scrub']['auto'] = False + config['import']['write'] = False + self.importer.run() + albums = self.lib.albums() + self.assertEqual(len(albums), 1) + self.assertEqual(albums[0].albumartist, 'Tag Artist') + + def test_tags_restored(self): + config['plugins'] = ['scrub'] + config['scrub']['auto'] = True + config['import']['write'] = True + self.importer.run() + albums = self.lib.albums() + self.assertEqual(len(albums), 1) + self.assertEqual(albums[0].albumartist, 'Tag Artist') + + def test_tags_not_restored(self): + config['plugins'] = ['scrub'] + config['scrub']['auto'] = True + config['import']['write'] = False + self.importer.run() + albums = self.lib.albums() + self.assertEqual(len(albums), 1) + self.assertEqual(albums[0].albumartist, 'Tag Artist') + + @_common.slow_test() class NonAutotaggedImportTest(_common.TestCase, ImportHelper): def setUp(self): From e91a56d18083002aae592864061ca5fa7f2b3ef9 Mon Sep 17 00:00:00 2001 From: Arno Hautala Date: Mon, 11 Sep 2023 12:03:25 -0400 Subject: [PATCH 4/5] fix tests --- test/test_importer.py | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/test/test_importer.py b/test/test_importer.py index ee6d29e8e..2cff6249b 100644 --- a/test/test_importer.py +++ b/test/test_importer.py @@ -257,29 +257,44 @@ class ScrubbedImportTest(_common.TestCase, ImportHelper): def test_tags_not_scrubbed(self): config['plugins'] = ['scrub'] config['scrub']['auto'] = False - config['import']['write'] = False + config['import']['write'] = True + for mediafile in self.import_media: + self.assertEqual(mediafile.artist, 'Tag Artist') + self.assertEqual(mediafile.album, 'Tag Album') self.importer.run() - albums = self.lib.albums() - self.assertEqual(len(albums), 1) - self.assertEqual(albums[0].albumartist, 'Tag Artist') + for item in self.lib.items(): + imported_file = os.path.join(item.path) + imported_file = MediaFile(imported_file) + self.assertEqual(imported_file.artist, 'Tag Artist') + self.assertEqual(imported_file.album, 'Tag Album') def test_tags_restored(self): config['plugins'] = ['scrub'] config['scrub']['auto'] = True config['import']['write'] = True + for mediafile in self.import_media: + self.assertEqual(mediafile.artist, 'Tag Artist') + self.assertEqual(mediafile.album, 'Tag Album') self.importer.run() - albums = self.lib.albums() - self.assertEqual(len(albums), 1) - self.assertEqual(albums[0].albumartist, 'Tag Artist') + for item in self.lib.items(): + imported_file = os.path.join(item.path) + imported_file = MediaFile(imported_file) + self.assertEqual(imported_file.artist, 'Tag Artist') + self.assertEqual(imported_file.album, 'Tag Album') def test_tags_not_restored(self): config['plugins'] = ['scrub'] config['scrub']['auto'] = True config['import']['write'] = False + for mediafile in self.import_media: + self.assertEqual(mediafile.artist, 'Tag Artist') + self.assertEqual(mediafile.album, 'Tag Album') self.importer.run() - albums = self.lib.albums() - self.assertEqual(len(albums), 1) - self.assertEqual(albums[0].albumartist, 'Tag Artist') + for item in self.lib.items(): + imported_file = os.path.join(item.path) + imported_file = MediaFile(imported_file) + self.assertEqual(imported_file.artist, None) + self.assertEqual(imported_file.album, None) @_common.slow_test() From 5c34db565c62aba872bb4bc63da2605f84be5e5a Mon Sep 17 00:00:00 2001 From: Arno Hautala Date: Tue, 12 Sep 2023 20:09:59 -0400 Subject: [PATCH 5/5] must unload_plugins() during teardown after load_plugins() during setup --- test/test_importer.py | 1 + 1 file changed, 1 insertion(+) diff --git a/test/test_importer.py b/test/test_importer.py index 2cff6249b..a948a5efd 100644 --- a/test/test_importer.py +++ b/test/test_importer.py @@ -252,6 +252,7 @@ class ScrubbedImportTest(_common.TestCase, ImportHelper): self._setup_import_session(autotag=False) def tearDown(self): + self.unload_plugins() self.teardown_beets() def test_tags_not_scrubbed(self):