File: fields.rst

package info (click to toggle)
beets 2.5.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 8,016 kB
  • sloc: python: 46,429; javascript: 8,018; xml: 334; sh: 261; makefile: 125
file content (35 lines) | stat: -rw-r--r-- 1,289 bytes parent folder | download
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.