Change parameter name, add return, add tests

Change the parameter name to omit_single_disc (vs previously zero_disc_if_single_disc)

Add return of 'fields_set' so that, if triggered by the command line `beets zero`, it will still effect the item.write.

Added tests.
This commit is contained in:
Michael Krieger 2025-09-16 10:04:24 -04:00 committed by Šarūnas Nejus
parent 5fc15bcfa4
commit b1c87cd98c
4 changed files with 57 additions and 8 deletions

View file

@ -41,7 +41,7 @@ class ZeroPlugin(BeetsPlugin):
"fields": [], "fields": [],
"keep_fields": [], "keep_fields": [],
"update_database": False, "update_database": False,
"zero_disc_if_single_disc": False, "omit_single_disc": False,
} }
) )
@ -124,14 +124,15 @@ class ZeroPlugin(BeetsPlugin):
""" """
fields_set = False fields_set = False
if "disc" in tags and self.config["zero_disc_if_single_disc"].get(bool): if "disc" in tags and self.config["omit_single_disc"].get(bool):
if item.disctotal == 1: if item.disctotal == 1:
fields_set = True
self._log.debug("disc: {.disc} -> None", item) self._log.debug("disc: {.disc} -> None", item)
tags["disc"] = None tags["disc"] = None
if not self.fields_to_progs: if not self.fields_to_progs:
self._log.warning("no fields list to remove") self._log.warning("no fields list to remove")
return False return fields_set
for field, progs in self.fields_to_progs.items(): for field, progs in self.fields_to_progs.items():
if field in tags: if field in tags:

View file

@ -9,9 +9,9 @@ Unreleased
New features: New features:
- :doc:`plugins/zero`: Add new configuration option, - :doc:`plugins/zero`: Add new configuration option, ``omit_single_disc``, to
``zero_disc_if_single_disc``, to allow zeroing the disc number on write for allow zeroing the disc number on write for single-disc albums. Defaults to
single-disc albums. Defaults to False. False.
Bug fixes: Bug fixes:

View file

@ -31,8 +31,8 @@ to nullify and the conditions for nullifying them:
``keep_fields``---not both! ``keep_fields``---not both!
- To conditionally filter a field, use ``field: [regexp, regexp]`` to specify - To conditionally filter a field, use ``field: [regexp, regexp]`` to specify
regular expressions. regular expressions.
- Set ``zero_disc_if_single_disc`` to ``True`` to zero the disc number field - Set ``omit_single_disc`` to ``True`` to zero the disc number field only if the
only if the album contains a disctotal count and is a single disc. album contains a disctotal count and is a single disc.
- By default this plugin only affects files' tags; the beets database is left - By default this plugin only affects files' tags; the beets database is left
unchanged. To update the tags in the database, set the ``update_database`` unchanged. To update the tags in the database, set the ``update_database``
option to true. option to true.

View file

@ -249,6 +249,54 @@ class ZeroPluginTest(PluginTestCase):
assert "id" not in z.fields_to_progs assert "id" not in z.fields_to_progs
def test_omit_single_disc_with_tags_single(self):
item = self.add_item_fixture(
disctotal=1, disc=1, comments="test comment"
)
item.write()
with self.configure_plugin(
{"omit_single_disc": True, "fields": ["comments"]}
):
item.write()
mf = MediaFile(syspath(item.path))
assert mf.comments is None
assert mf.disc == 0
def test_omit_single_disc_with_tags_multi(self):
item = self.add_item_fixture(
disctotal=4, disc=1, comments="test comment"
)
item.write()
with self.configure_plugin(
{"omit_single_disc": True, "fields": ["comments"]}
):
item.write()
mf = MediaFile(syspath(item.path))
assert mf.comments is None
assert mf.disc == 1
def test_omit_single_disc_only_change_single(self):
item = self.add_item_fixture(disctotal=1, disc=1)
item.write()
with self.configure_plugin({"omit_single_disc": True}):
item.write()
mf = MediaFile(syspath(item.path))
assert mf.disc == 0
def test_omit_single_disc_only_change_multi(self):
item = self.add_item_fixture(disctotal=4, disc=1)
item.write()
with self.configure_plugin({"omit_single_disc": True}):
item.write()
mf = MediaFile(syspath(item.path))
assert mf.disc == 1
def test_empty_query_n_response_no_changes(self): def test_empty_query_n_response_no_changes(self):
item = self.add_item_fixture( item = self.add_item_fixture(
year=2016, day=13, month=3, comments="test comment" year=2016, day=13, month=3, comments="test comment"