X-Git-Url: https://git.armaanb.net/?a=blobdiff_plain;f=phrases.py;h=3b41b80719e32f460ac84a0b4469d1882643db4c;hb=eb4d4c8315588ba0241ffdcd2fa91e6499cd8447;hp=93f8a2f84375f06bc4dcb98ed4f3914ba68f7f12;hpb=4436720b4b07ef11b97af993e62788992c2ec515;p=phrases.git diff --git a/phrases.py b/phrases.py index 93f8a2f..3b41b80 100755 --- a/phrases.py +++ b/phrases.py @@ -1,55 +1,93 @@ #!/usr/bin/env python3 -# Display famous phrases in the terminal +# Display Latin famous phrases in the terminal # Armaan Bhojwani 2020 -import random -import os -import sys -import re +import argparse +from random import randint +import sqlite3 +from sys import exit +from os import path -def _random_int(start, end): -# Use system random if available, otherwise, use Python's - try: - r = random.SystemRandom() - except: - r = random +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() - return r.randint(start, end) +def output(): + data = c.fetchall() + row = list(data[randint(0, len(data) - 1)]) -def _read_fortunes(fortune_file): - f = open(fortune_file, 'r') - contents = f.read() + 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) - lines = [line.rstrip() for line in contents.split('\n')] - delim = re.compile(r'^%$') - fortunes = [] - cur = [] +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 save_if_nonempty(buf): - fortune = '\n'.join(buf) - if fortune.strip(): - fortunes.append(fortune) - - for line in lines: - if delim.match(line): - save_if_nonempty(cur) - cur = [] - continue - - cur.append(line) - - if cur: - save_if_nonempty(cur) - - return fortunes - -def get_random_fortune(fortune_file): - fortunes = list(_read_fortunes(fortune_file)) - randomRecord = _random_int(0, len(fortunes) - 1) - randFortune = fortunes[randomRecord] - return randFortune.partition('\n')[0] +def get_rand(): + c.execute("SELECT * FROM phrases WHERE length <= (?) AND length >= (?)", + (args.max, args.min)) def main(): - print(get_random_fortune("/usr/share/phrases/phrases")) + get_rand() + output() -main() +if __name__ == "__main__": + version = "phrases 1.0.1" + args = parse_args() + c = sqlite3.connect(find_file()).cursor() + main()