From 5c52944978515abd0859e851c7e6b24881044ac4 Mon Sep 17 00:00:00 2001 From: Armaan Bhojwani <3fb650a9-b47e-4604-a282-1dd91953b2ee@anonaddy.me> Date: Wed, 2 Dec 2020 18:41:15 -0500 Subject: [PATCH] make database-file location more flexible Make the program look for the phrase database first in a user defined location, then in the current directory, then in /usr before giving up --- Makefile | 10 +++++----- README.md | 5 ++++- phrases.py | 20 ++++++++++++++++---- 3 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Makefile b/Makefile index 5ee63d3..6d3967a 100644 --- a/Makefile +++ b/Makefile @@ -2,13 +2,13 @@ install: mkdir -p /usr/local/bin - mkdir -p /usr/share/phrases/ - cp phrases.py /usr/local/bin - cp phrases.csv /usr/share/phrases/ + mkdir -p /usr/local/share/phrases/ + cp phrases.py /usr/local/bin/phrases + cp phrases.csv /usr/local/share/phrases/ uninstall: - rm /usr/local/bin/phrases.py - rm -r /usr/share/phrases/ + rm /usr/local/bin/phrases + rm -r /usr/local/share/phrases/ reinstall: make uninstall diff --git a/README.md b/README.md index f13e0a1..95ffe8d 100644 --- a/README.md +++ b/README.md @@ -7,12 +7,15 @@ Wikipedia contributors, "List of Latin phrases (full)," Wikipedia, The Free Ency There are currently 2239 famous phrases in the database ## Installation +### On Linux + MacOS `sudo make` to install. `sudo make uninstall` to uninstall completely. +The program can also be run without installing + ### Notes - * If you want to generate a new phrases.csv file with the `extract.py` script, then you need the BeautifulSoup Python module. + * If you want to generate a new phrase database file with the `extract.py` script, then you need the beautifulsoup4 Python module. * Tested and written on Python 3.9.0 ## License diff --git a/phrases.py b/phrases.py index 63199d1..43cc774 100755 --- a/phrases.py +++ b/phrases.py @@ -6,6 +6,7 @@ import argparse import csv import random import sys +import os.path def main(args=sys.argv[1:]): # Argument parsing @@ -35,17 +36,26 @@ def main(args=sys.argv[1:]): action='store_true', 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") 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 @@ -59,7 +69,7 @@ def main(args=sys.argv[1:]): 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("no phrase within the given parameters!") # Output as specified in flags for row in all_lines: @@ -70,6 +80,7 @@ def main(args=sys.argv[1:]): or args.notes or args.num): print(row[1]) + sys.exit(0) else: if args.id: print(row[1]) @@ -81,6 +92,7 @@ def main(args=sys.argv[1:]): print(row[3]) if args.num: print(len(right_length)) + sys.exit(0) if __name__ == "__main__": main() -- 2.39.2