zero: optionally update tags in the database.

This commit is contained in:
David Logie 2015-07-08 13:19:07 +01:00
parent ab5a4e2450
commit 71d3be238b
4 changed files with 27 additions and 2 deletions

View file

@ -41,6 +41,7 @@ class ZeroPlugin(BeetsPlugin):
self.config.add({
'fields': [],
'update_database': False,
})
self.patterns = {}
@ -99,3 +100,5 @@ class ZeroPlugin(BeetsPlugin):
if match:
self._log.debug(u'{0}: {1} -> None', field, value)
tags[field] = None
if self.config['update_database']:
item[field] = None

View file

@ -26,6 +26,8 @@ New features:
:bug:`1104` :bug:`1493`
* :doc:`/plugins/plexupdate`: A new ``token`` configuration option lets you
specify a key for Plex Home setups. Thanks to :user:`edcarroll`. :bug:`1494`
* :doc:`/plugins/zero`: A new ``update_database`` configuration option
allows the database to be updated along with files' tags. :bug:`1516`
Fixes:

View file

@ -3,8 +3,7 @@ Zero Plugin
The ``zero`` plugin allows you to null fields in files' metadata tags. Fields
can be nulled unconditionally or conditioned on a pattern match. For example,
the plugin can strip useless comments like "ripped by MyGreatRipper." This
plugin only affects files' tags ; the beets database is left unchanged.
the plugin can strip useless comments like "ripped by MyGreatRipper."
To use the ``zero`` plugin, enable the plugin in your configuration
(see :ref:`using-plugins`).
@ -21,6 +20,8 @@ fields to nullify and the conditions for nullifying them:
embedded in the media file.
* To conditionally filter a field, use ``field: [regexp, regexp]`` to specify
regular expressions.
* 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`` option.
For example::
@ -28,6 +29,7 @@ For example::
fields: month day genre comments
comments: [EAC, LAME, from.+collection, 'ripped by']
genre: [rnb, 'power metal']
update_database: true
If a custom pattern is not defined for a given field, the field will be nulled
unconditionally.

View file

@ -88,6 +88,24 @@ class ZeroPluginTest(unittest.TestCase, TestHelper):
self.assertEqual(item['year'], 2000)
self.assertIsNone(mediafile.year)
def test_change_database(self):
item = self.add_item_fixture(year=2000)
item.write()
mediafile = MediaFile(item.path)
self.assertEqual(2000, mediafile.year)
config['zero'] = {
'fields': ['year'],
'update_database': True,
}
self.load_plugins('zero')
item.write()
mediafile = MediaFile(item.path)
self.assertEqual(item['year'], 0)
self.assertIsNone(mediafile.year)
def test_album_art(self):
path = self.create_mediafile_fixture(images=['jpg'])
item = Item.from_path(path)