1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
Add Path Format Functions and Fields
====================================
Beets supports *function calls* in its path format syntax (see
:doc:`/reference/pathformat`). Beets includes a few built-in functions, but
plugins can register new functions by adding them to the ``template_funcs``
dictionary.
Here's an example:
.. code-block:: python
class MyPlugin(BeetsPlugin):
def __init__(self):
super().__init__()
self.template_funcs["initial"] = _tmpl_initial
def _tmpl_initial(text: str) -> str:
if text:
return text[0].upper()
else:
return ""
This plugin provides a function ``%initial`` to path templates where
``%initial{$artist}`` expands to the artist's initial (its capitalized first
character).
Plugins can also add template *fields*, which are computed values referenced as
``$name`` in templates. To add a new field, add a function that takes an
``Item`` object to the ``template_fields`` dictionary on the plugin object.
Here's an example that adds a ``$disc_and_track`` field:
.. code-block:: python
class MyPlugin(BeetsPlugin):
def __init__(self):
super().__init__()
self.template_fields["disc_and_track"] = _tmpl_disc_and_track
def _tmpl_disc_and_track(item: Item) -> str:
"""Expand to the disc number and track number if this is a
multi-disc release. Otherwise, just expands to the track
number.
"""
if item.disctotal > 1:
return "%02i.%02i" % (item.disc, item.track)
else:
return "%02i" % (item.track)
With this plugin enabled, templates can reference ``$disc_and_track`` as they
can any standard metadata field.
This field works for *item* templates. Similarly, you can register *album*
template fields by adding a function accepting an ``Album`` argument to the
``album_template_fields`` dict.
|