papis: Add papis-tag tag-listing command

Command takes a query and lists all the tags contained in
all documents of the query sorted alphabetically.
This commit is contained in:
Marty Oehme 2023-08-25 16:26:43 +02:00
parent bda8a3d6f6
commit 6122077124
Signed by: Marty
GPG key ID: EDBF2ED917B2EF6A

View file

@ -0,0 +1,39 @@
#!/usr/bin/env python
# papis-short-help: List all tags occuring in query items
#
# Takes a query and spits out a sorted list of all tags contained therein,
# nothing more.
# Can be very useful for things like picking a tag or two and listing all
# items that contain it:
# $ papis tags "*" | fzf | xargs papis show "tags:{}"
import argparse
from papis import database
from papis.database.base import Database
from papis.document import Document
parser = argparse.ArgumentParser()
parser.add_argument("query", nargs="*", help="the query to search for")
args = parser.parse_args()
def main(db: Database, args) -> None:
query = " ".join(args.query)
docs: list[Document] = db.query(query)
all_tags: set[str] = set()
for doc in docs:
t: list[str] | str = doc.get("tags", "")
tags = (
t.replace(";", ",").replace(" ", "").split(",") if isinstance(t, str) else t
)
for tag in tags:
all_tags.add(tag)
for tag in sorted(all_tags):
print(tag)
if __name__ == "__main__":
main(database.get(), args)