X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=phrases.py;h=cd9e2c3d88c4d3b5bbf998f63b0265d76134b05b;hb=24ef3592330ef7b0ada79cd635b35e8e97eb4e6c;hp=a8348816373f0fc2bd97f4ca5b490268be6c02ab;hpb=5c38e900ada8915ded1a0b4e568d88327b64ea35;p=phrases.git diff --git a/phrases.py b/phrases.py index a834881..cd9e2c3 100755 --- a/phrases.py +++ b/phrases.py @@ -3,13 +3,12 @@ # Armaan Bhojwani 2020 import argparse -import csv -import random +from random import randint +import sqlite3 import sys import os.path -def main(args=sys.argv[1:]): - # Argument parsing +def parse_args(): parser = argparse.ArgumentParser( description="Latin famous phrases in the terminal.") parser.add_argument("-i", "--id", @@ -24,6 +23,9 @@ def main(args=sys.argv[1:]): 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, @@ -34,71 +36,52 @@ 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", - help="set the location of the phrase file.") - parser.add_argument("-o", "--open", - type=int, - help="specify the id of a specific phrase to print.") - args = parser.parse_args() + help="set the location of the phrase database.") + return parser.parse_args() - right_length = [] - - # find phrase file - if args.file: - phrase_file = args.file - if os.path.isfile("phrases.csv"): - phrase_file = "phrases.csv" - elif os.path.isfile("/usr/local/share/phrases/phrases.csv"): - phrase_file = "/usr/local/share/phrases/phrases.csv" +def output(args, row, numx, version): + if not (args.id + or args.latin + or args.english + or args.notes + or args.num + or args.version): + print(row[1]) + sys.exit(0) else: - sys.exit("cannot fine phrase database!") + 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(numx) + sys.exit(0) - # convert csv file into list - with open(phrase_file) as f: - reader = csv.reader(f) - next(reader, None) # skip header - all_lines = list(reader) - f.close() - - # iterate through all the phrases - if args.open: - chosen = args.open +def find_file(args): + if args.file: + return args.file + if os.path.isfile("phrases.db"): + return "phrases.db" + elif os.path.isfile("/usr/local/share/phrases/phrases.db"): + return "/usr/local/share/phrases/phrases.db" else: - 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!") + sys.exit("cannot find the phrase database!") - # 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]) - sys.exit(0) - else: - 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(right_length)) - sys.exit(0) +def main(args): + version = "phrases 1.0.0" + c = sqlite3.connect(find_file(args)).cursor() + c.execute("SELECT * FROM phrases WHERE length <= (?) AND length >= (?)", + (args.max, args.min)) + data = c.fetchall() + output(args, list(data[randint(0, len(data))]), len(data,), version) if __name__ == "__main__": - main() + main(parse_args())