X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=phrases.py;h=8f11be18429a32b4e027282740f2abc1da5b693d;hb=a2c0f2555d239ca645957821205f10944bb9c4c8;hp=63199d141d996cccc70d160ad3f71438f2909a32;hpb=f03d1f1de5ed1c36fe3e27505653e669f01a59a3;p=phrases.git diff --git a/phrases.py b/phrases.py index 63199d1..8f11be1 100755 --- a/phrases.py +++ b/phrases.py @@ -1,28 +1,32 @@ #!/usr/bin/env python3 # Display Latin famous phrases in the terminal -# Armaan Bhojwani 2020 +# Armaan Bhojwani 2021 import argparse -import csv -import random -import sys +from random import randint +import sqlite3 +from sys import exit +from os import path -def main(args=sys.argv[1:]): - # Argument parsing + +def parse_args(): parser = argparse.ArgumentParser( - description="Latin famous phrases in the terminal.") + description="Latin famous phrases in the terminal") parser.add_argument("-i", "--id", action='store_true', - help="print the id of the phrase.") + help="print the id of the phrase") parser.add_argument("-l", "--latin", action='store_true', help="print the Latin phrase (default)") parser.add_argument("-e", "--english", action='store_true', - help="print the English translation.") + help="print the English translation") parser.add_argument("-n", "--notes", action='store_true', help="print any notes on phrase") + parser.add_argument("-v", "--version", + action='store_true', + help="print version") parser.add_argument("-m", "--min", default=0, type=int, @@ -33,54 +37,63 @@ def main(args=sys.argv[1:]): help="set the maximum length of Latin phrase") parser.add_argument("-p", "--num", action='store_true', - help="print number of possibilities within constraints") + help="print number of possible phrases") parser.add_argument("-f", "--file", - default="/usr/share/phrases/phrases.csv", - help="set the location of the phrase file") - args = parser.parse_args() + help="set the location of the phrase database") + return parser.parse_args() + + +def output(): + data = c.fetchall() + row = list(data[randint(0, len(data) - 1)]) + + if not (args.id + or args.latin + or args.english + or args.notes + or args.num + or args.version): + print(row[1]) + exit(0) + else: + if args.version: + print(version) + if args.id: + print(row[0]) + if args.latin: + print(row[1]) + if args.english: + print(row[2]) + if args.notes: + print(row[3]) + if args.num: + print(len(data)) + exit(0) + + +def find_file(): + if args.file: + return args.file + if path.isfile("phrases.db"): + return "phrases.db" + elif path.isfile("/usr/local/share/phrases/phrases.db"): + return "/usr/local/share/phrases/phrases.db" + else: + exit("cannot find the phrase database!") - right_length = [] - # convert csv file into list - with open(args.file) as f: - reader = csv.reader(f) - next(reader, None) # skip header - all_lines = list(reader) - f.close() +def get_rand(): + c.execute("SELECT * FROM phrases WHERE length <= (?) AND length >= (?)", + (args.max, args.min)) - # iterate through all the phrases - for row in all_lines: - try: # generate a shortlist of phrases of the right length - if args.max >= int(row[4]) >= args.min: - right_length.append(row[0]) - except: # skip malformed rows without exiting - pass - try: # choose a random id from the shortlist - chosen = int(right_length[random.randint(0, len(right_length) - 1)]) - except: - sys.exit("No phrase within the given parameters!") +def main(): + get_rand() + output() - # Output as specified in flags - for row in all_lines: - if int(row[0]) == chosen: - if not (args.id - or args.latin - or args.english - or args.notes - or args.num): - print(row[1]) - else: - if args.id: - print(row[1]) - if args.latin: - print(row[1]) - if args.english: - print(row[2]) - if args.notes: - print(row[3]) - if args.num: - print(len(right_length)) if __name__ == "__main__": + version = "phrases 1.0.2" + args = parse_args() + c = sqlite3.connect(find_file()).cursor() main()