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
|
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:
.. code-block:: python
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 :ref:`ranges <numericquery>`) 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.
|