Flexible Field Types#
If your plugin uses flexible fields to store numbers or other non-string values,
you can specify the types of those fields. A rating plugin, for example, might
want to declare that the rating field should have an integer type:
from beets.plugins import BeetsPlugin
from beets.dbcore import types
class RatingPlugin(BeetsPlugin):
item_types = {"rating": types.INTEGER}
@property
def album_types(self):
return {"rating": types.INTEGER}
A plugin may define two attributes: item_types and album_types. Each of
those attributes is a dictionary mapping a flexible field name to a type
instance. You can find the built-in types in the beets.dbcore.types and
beets.library modules or implement your own type by inheriting from the
Type class.
Specifying types has several advantages:
Code that accesses the field like
item['my_field']gets the right type (instead of just a string).You can use advanced queries (like ranges) from the command line.
User input for flexible fields may be validated and converted.
Items missing the given field can use an appropriate null value for querying and sorting purposes.