]> git.armaanb.net Git - phrases.git/blob - phrases.py
add -o flag
[phrases.git] / phrases.py
1 #!/usr/bin/env python3
2 # Display Latin famous phrases in the terminal - python version
3 # Armaan Bhojwani 2020
4
5 import argparse
6 import csv
7 import random
8 import sys
9 import os.path
10
11 def main(args=sys.argv[1:]):
12     # Argument parsing
13     parser = argparse.ArgumentParser(
14         description="Latin famous phrases in the terminal.")
15     parser.add_argument("-i", "--id",
16                         action='store_true',
17                         help="print the id of the phrase.")
18     parser.add_argument("-l", "--latin",
19                         action='store_true',
20                         help="print the Latin phrase (default)")
21     parser.add_argument("-e", "--english",
22                         action='store_true',
23                         help="print the English translation.")
24     parser.add_argument("-n", "--notes",
25                         action='store_true',
26                         help="print any notes on phrase.")
27     parser.add_argument("-m", "--min",
28                         default=0,
29                         type=int,
30                         help="set the minimum length of the Latin phrase.")
31     parser.add_argument("-M", "--max",
32                         default=10000000,
33                         type=int,
34                         help="set the maximum length of Latin phrase.")
35     parser.add_argument("-p", "--num",
36                         action='store_true',
37                         help="print number of possibilities within constraints.")
38     parser.add_argument("-f", "--file",
39                         help="set the location of the phrase file.")
40     parser.add_argument("-o", "--open",
41                         type=int,
42                         help="specify the id of a specific phrase to print.")
43     args = parser.parse_args()
44
45     right_length = []
46
47     # find phrase file
48     if args.file:
49         phrase_file = args.file
50     if os.path.isfile("phrases.csv"):
51         phrase_file = "phrases.csv"
52     elif os.path.isfile("/usr/local/share/phrases/phrases.csv"):
53         phrase_file = "/usr/local/share/phrases/phrases.csv"
54     else:
55         sys.exit("cannot fine phrase database!")
56
57     # convert csv file into list
58     with open(phrase_file) as f:
59         reader = csv.reader(f)
60         next(reader, None) # skip header
61         all_lines = list(reader)
62     f.close()
63
64     # iterate through all the phrases
65     if args.open:
66         chosen = args.open
67     else:
68         for row in all_lines:
69             try: # generate a shortlist of phrases of the right length
70                 if args.max >= int(row[4]) >= args.min:
71                     right_length.append(row[0])
72             except: # skip malformed rows without exiting
73                 pass
74
75         try: # choose a random id from the shortlist
76             chosen = int(right_length[random.randint(0, len(right_length) - 1)])
77         except:
78             sys.exit("no phrase within the given parameters!")
79
80     # Output as specified in flags
81     for row in all_lines:
82         if int(row[0]) == chosen:
83             if not (args.id
84                     or args.latin
85                     or args.english
86                     or args.notes
87                     or args.num):
88                 print(row[1])
89                 sys.exit(0)
90             else:
91                 if args.id:
92                     print(row[0])
93                 if args.latin:
94                     print(row[1])
95                 if args.english:
96                     print(row[2])
97                 if args.notes:
98                     print(row[3])
99                 if args.num:
100                     print(len(right_length))
101                 sys.exit(0)
102
103 if __name__ == "__main__":
104     main()