aboutsummaryrefslogtreecommitdiff
path: root/mu4web/xapian.py
blob: 94e597d70dd6b76a8c120f2194481a20cbf8d1d5 (plain)
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
"""
Extra xapian procedures.

The python-xapian library exists, but doesn't seem to export metadata.
"""

import subprocess
from typing import Optional


def metadata_list(db: str, prefix: Optional[str] = None) -> list[str]:
    """
    Enumerate all metadata entries in the given database.

    :param db:
        File system path to an Xapian "database". This is the
        directory containing iamglass, flintlock, and .glass files.

    :param prefix:
        Limit list to entries starting with this string.
    """
    cmdline = ['xapian-metadata', 'list', db]
    if prefix:
        cmdline.append(prefix)
    cmd = subprocess.run(cmdline, capture_output=True, text=True)
    return cmd.stdout.split('\n')


def metadata_get(db: str, key: str) -> str:
    """
    Get a xapian metadata value.

    :param db:
        Same as for metadata_list

    :param key:
        Exact name of key to look up.
    """
    cmd = subprocess.run(['xapian-metadata', 'get', db, key],
                         capture_output=True, text=True)
    return cmd.stdout.strip()