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:
parent
bda8a3d6f6
commit
6122077124
1 changed files with 39 additions and 0 deletions
39
writing/.config/papis/scripts/papis-tags
Executable file
39
writing/.config/papis/scripts/papis-tags
Executable 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)
|
Loading…
Reference in a new issue