X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=phrases.py;h=4ea6fe390a46056bd3d6f97839da11902d2b07c2;hb=9b80d8ef739c7c4c206dc560367d825352c7eb36;hp=39d6f0c7e59be1d3101d120fb89b57b669e68c5d;hpb=a1843720c7444be2e77d41bab8bd135015247002;p=phrases.git diff --git a/phrases.py b/phrases.py index 39d6f0c..4ea6fe3 100755 --- a/phrases.py +++ b/phrases.py @@ -3,58 +3,97 @@ # Armaan Bhojwani 2020 import argparse -import random -import sys -import re - -# Create list of phrases from phrase file -def read_phrases(phrase_file): - f = open(phrase_file, 'r') - contents = f.read() - - lines = [line.rstrip() for line in contents.split('\n')] - delim = re.compile(r'^%$') - phrases = [] - cur = [] - - for line in lines: - if delim.match(line): - phrase = '\n'.join(cur) - if phrase.strip(): - phrases.append(phrase) - cur = [] - continue - cur.append(line) - - return phrases - -# Main program -def main(args=sys.argv[1:]): - parser = argparse.ArgumentParser(description="Latin famous phrases in the terminal.") - parser.add_argument("-e", "--english", action='store_true', help="Output English.") - parser.add_argument("-l", "--latin", action='store_true', help="Output Latin (default)") - parser.add_argument("-n", "--notes", action='store_true', help="Output notes on phrase") - parser.add_argument("-m", "--min", type=int, help="Set the minimum length of latin") - parser.add_argument("-M", "--max", type=int, help="Set the maximum length of latin") - args = parser.parse_args() - - phrases = list(read_phrases("/usr/share/phrases/phrases")) - randomRecord = random.randint(0, len(phrases) - 1) - randphrase = phrases[randomRecord] - - if args.min: - while True: - randomRecord = random.randint(0, len(phrases) - 1) - randphrase = phrases[randomRecord] - if args.min <= len(randphrase.split('\n')[0]) <= args.max: - break - if args.latin: - print(randphrase.split('\n')[0]) - if args.english: - print(randphrase.split('\n')[1]) - if args.notes: - print(randphrase.split('\n')[2]) - if not len(sys.argv) > 1: - print(randphrase.split('\n')[0]) - -main() +from random import randint +import sqlite3 +from sys import exit +from os import path + + +def parse_args(): + parser = argparse.ArgumentParser( + description="Latin famous phrases in the terminal") + parser.add_argument("-i", "--id", + action='store_true', + 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") + 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, + help="set the minimum length of the Latin phrase") + parser.add_argument("-M", "--max", + default=10000000, + type=int, + help="set the maximum length of Latin phrase") + parser.add_argument("-p", "--num", + action='store_true', + help="print number of possible phrases") + parser.add_argument("-f", "--file", + 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!") + + +def get_rand(): + c.execute("SELECT * FROM phrases WHERE length <= (?) AND length >= (?)", + (args.max, args.min)) + + +def main(): + get_rand() + output() + + +if __name__ == "__main__": + version = "phrases 1.0.2" + args = parse_args() + c = sqlite3.connect(find_file()).cursor() + main()