#!/usr/bin/env python3
-# Display Latin famous phrases in the terminal
+# Display Latin famous phrases in the terminal - python version
# Armaan Bhojwani 2020
import argparse
import csv
import random
import sys
+import os.path
def main(args=sys.argv[1:]):
# Argument parsing
help="print the English translation.")
parser.add_argument("-n", "--notes",
action='store_true',
- help="print any notes on phrase")
+ help="print any notes on phrase.")
parser.add_argument("-m", "--min",
default=0,
type=int,
- help="set the minimum length of the Latin phrase")
+ 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")
+ 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 possibilities within constraints.")
parser.add_argument("-f", "--file",
- default="/usr/share/phrases/phrases.csv",
- help="set the location of the phrase 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()
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"
+ else:
+ sys.exit("cannot fine phrase database!")
+
# convert csv file into list
- with open(args.file) as f:
+ with open(phrase_file) as f:
reader = csv.reader(f)
next(reader, None) # skip header
- all_lines = list(reader)
+ all_lines = list(reader)
f.close()
# 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
+ if args.open:
+ chosen = args.open
+ 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!")
+ 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!")
# Output as specified in flags
for row in all_lines:
or args.notes
or args.num):
print(row[1])
+ sys.exit(0)
else:
if args.id:
- print(row[1])
+ print(row[0])
if args.latin:
print(row[1])
if args.english:
print(row[3])
if args.num:
print(len(right_length))
+ sys.exit(0)
if __name__ == "__main__":
main()