feat: add pager

This commit is contained in:
Jeffrey Serio 2025-01-07 19:12:24 -06:00
parent 89240d27a7
commit 006f808dca
2 changed files with 72 additions and 58 deletions

View File

@ -4,24 +4,89 @@
Usage:
get-def (WORD)
get-def -n (WORD)
get-def -h
Examples:
get-def hello
get-def -n hello
Options:
-n, --no-pager do not use a pager
-h, --help show this help message and exit
"""
import requests
from docopt import docopt
from rich import box, print
from rich import box
from rich.console import Console
from rich.padding import Padding
from rich.table import Table
from rich.text import Text
def print_def(console: Console, response: requests.Response):
word = response.json()[0].get("word")
console.print()
console.print(" :arrow_forward: ", Text(word, style="bold red", justify="center"))
console.print()
phonetics = response.json()[0].get("phonetics")
phonetics_table = Table(box=box.SQUARE)
phonetics_table.add_column("Phonetic Text", style="cyan")
phonetics_table.add_column("Phonetic Audio")
if len(phonetics) > 0:
for item in phonetics:
text = item.get("text") if item.get("text") else "None"
audio = item.get("audio") if item.get("audio") else "None"
phonetics_table.add_row(text, audio)
console.print(phonetics_table)
console.print(
"IPA chart: https://www.internationalphoneticassociation.org/IPAcharts/inter_chart_2018/IPA_2018.html"
)
console.print()
meanings = response.json()[0].get("meanings")
for item in meanings:
console.print(
f"[bold]{meanings.index(item) + 1}. [underline]{item["partOfSpeech"]}"
)
for definition in item["definitions"]:
console.print(
Padding(
f"[bold blue]Definition:[/bold blue] {definition.get("definition")}",
(0, 0, 0, 3),
)
)
if definition.get("example") is not None:
console.print(
Padding(
f"[bold magenta]Example:[/bold magenta] {definition.get("example")}",
(0, 0, 0, 3),
)
)
if definition.get("synonyms"):
console.print(
Padding(
f"[bold yellow]Synonyms:[/bold yellow] "
+ ", ".join(definition.get("synonyms")),
(0, 0, 0, 3),
)
)
if definition.get("antonyms"):
console.print(
Padding(
f"[bold yellow]Antonyms:[/bold yellow] "
+ ", ".join(definition.get("antonyms")),
(0, 0, 0, 3),
)
)
console.print()
def main():
args = docopt(__doc__)
@ -38,64 +103,13 @@ def main():
"The connection has timed out. This might indicate an issue with DNS, firewall, or your internet connection."
)
word = response.json()[0].get("word")
console = Console(width=100)
print()
print(" :arrow_forward: ", Text(word, style="bold red", justify="center"))
print()
phonetics = response.json()[0].get("phonetics")
phonetics_table = Table(box=box.SQUARE)
phonetics_table.add_column("Phonetic Text", style="cyan")
phonetics_table.add_column("Phonetic Audio")
if len(phonetics) > 0:
for item in phonetics:
text = item.get("text") if item.get("text") else "None"
audio = item.get("audio") if item.get("audio") else "None"
phonetics_table.add_row(text, audio)
console.print(phonetics_table)
print(
"Click to view [link=https://www.internationalphoneticassociation.org/IPAcharts/inter_chart_2018/IPA_2018.html]Interactive IPA chart[/link]"
)
print()
meanings = response.json()[0].get("meanings")
for item in meanings:
print(f"[bold]{meanings.index(item) + 1}. [underline]{item["partOfSpeech"]}")
for definition in item["definitions"]:
print(
Padding(
f"[bold blue]Definition:[/bold blue] {definition.get("definition")}",
(0, 0, 0, 3),
)
)
if definition.get("example") is not None:
print(
Padding(
f"[bold magenta]Example:[/bold magenta] {definition.get("example")}",
(0, 0, 0, 3),
)
)
if definition.get("synonyms"):
print(
Padding(
f"[bold yellow]Synonyms:[/bold yellow] "
+ ", ".join(definition.get("synonyms")),
(0, 0, 0, 3),
)
)
if definition.get("antonyms"):
print(
Padding(
f"[bold yellow]Antonyms:[/bold yellow] "
+ ", ".join(definition.get("antonyms")),
(0, 0, 0, 3),
)
)
print()
if not args["--no-pager"]:
with console.pager(styles=True):
print_def(console, response)
else:
print_def(console, response)
if __name__ == "__main__":

View File

@ -1,6 +1,6 @@
[project]
name = "get-def"
version = "0.4"
version = "0.5"
authors = [
{ name="Jeffrey Serio", email="hyperreal@fedoraproject.org" },
]