papis: Add ability to show tag counts to papis-tags
The `papis tags` command is extended with the functionality to not just display all tags used in current query, sorted alphabetically, but also to display how often they appear. Use `papis tags -c` to show a space-separated count of how often each tag is used next to the tag name, in descending order.
This commit is contained in:
parent
c4809c78f7
commit
643deaebec
1 changed files with 21 additions and 3 deletions
|
@ -14,7 +14,10 @@ from papis.database.base import Database
|
||||||
from papis.document import Document
|
from papis.document import Document
|
||||||
|
|
||||||
parser = argparse.ArgumentParser()
|
parser = argparse.ArgumentParser()
|
||||||
parser.add_argument("query", nargs="*", help="the query to search for")
|
parser.add_argument(
|
||||||
|
"--count", "-c", help="the query to search for", action="store_true"
|
||||||
|
)
|
||||||
|
parser.add_argument("query", nargs="*", help="the query to search for", default="*")
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
|
||||||
|
@ -22,7 +25,7 @@ def main(db: Database, args) -> None:
|
||||||
query = " ".join(args.query)
|
query = " ".join(args.query)
|
||||||
docs: list[Document] = db.query(query)
|
docs: list[Document] = db.query(query)
|
||||||
|
|
||||||
all_tags: set[str] = set()
|
all_tags: dict[str, int] = {}
|
||||||
for doc in docs:
|
for doc in docs:
|
||||||
t: list[str] | str = doc.get("tags", "")
|
t: list[str] | str = doc.get("tags", "")
|
||||||
tags = (
|
tags = (
|
||||||
|
@ -30,10 +33,25 @@ def main(db: Database, args) -> None:
|
||||||
)
|
)
|
||||||
|
|
||||||
for tag in tags:
|
for tag in tags:
|
||||||
all_tags.add(tag)
|
if tag == '':
|
||||||
|
continue
|
||||||
|
all_tags[tag] = all_tags.get(tag, 0) + 1
|
||||||
|
|
||||||
|
if args.count:
|
||||||
|
print_tags_and_counts(all_tags)
|
||||||
|
else:
|
||||||
|
print_tags_only(all_tags)
|
||||||
|
|
||||||
|
def print_tags_only(all_tags):
|
||||||
for tag in sorted(all_tags):
|
for tag in sorted(all_tags):
|
||||||
print(tag)
|
print(tag)
|
||||||
|
|
||||||
|
def print_tags_and_counts(all_tags):
|
||||||
|
for tag, count in sorted(all_tags.items(), key=lambda d: d[1], reverse=True):
|
||||||
|
if args.count:
|
||||||
|
print(tag, count)
|
||||||
|
else:
|
||||||
|
print(tag)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main(database.get(), args)
|
main(database.get(), args)
|
||||||
|
|
Loading…
Reference in a new issue