From 6c5717c4d16658e10800e05f525a46ea1774c4c3 Mon Sep 17 00:00:00 2001 From: Tyler Dinsmoor Date: Sun, 4 Jun 2023 15:30:59 -0700 Subject: [PATCH] INPRO: Bugfixing and better returns --- app.py | 23 +++++++++++--- html/reader.html | 7 ++++ html/reading_plan.html | 5 +++ tools/sanity_check.py | 67 +++++++++++++++++++-------------------- tools/search_keywords.txt | 35 ++++++++++++++++++++ 5 files changed, 98 insertions(+), 39 deletions(-) create mode 100644 tools/search_keywords.txt diff --git a/app.py b/app.py index c9d06be..5c5d43d 100644 --- a/app.py +++ b/app.py @@ -1,5 +1,5 @@ # app.py -from flask import Flask, request, jsonify, send_file, render_template, redirect +from flask import Flask, request, jsonify, send_file, render_template, redirect, Response import random from datetime import date, datetime, timedelta # used for daily verse import sqlite3 @@ -212,6 +212,8 @@ def parse_query(query_override:str = None): query = query_override if query: query = query.strip() + if request.args.get("view", "rich") != "rich": + return jsonify({"Error":"/find endpoint only supports rich responses"}) logging.info(f"Query: {query}") if not query: return send_file("html/find.html") @@ -434,7 +436,7 @@ def page_not_found(e): @app.get("/") def idx(shortcode=''): if not sanity: - return("There is an issue with permissions. Check log, or please notify tyler@dinsmoor.us") + return("Sanity check failed. Check log, or please notify tyler@dinsmoor.us") if shortcode: return resolve_shortcode(shortcode) logging.info("Index Served") @@ -477,6 +479,17 @@ def verse_of_the_day(): response = jsonify(response_list) logging.debug(f"Search Response: {response}") return response +def make_view(response_list=[]): + #TODO: Maybe use flask session to make this easier to deal with + # https://stackoverflow.com/a/53152394 + arg_view = request.args.get("view", None) + if arg_view == "plain": + response = "
".join(response_list) + elif arg_view == "rich": + response = "
".join(response_list) + else: + response = jsonify(response_list) + @app.get("/search") def search(): keywords = request.args.get("kw", None) @@ -504,9 +517,9 @@ def search(): response = jsonify(response_list) logging.debug(f"Search Response: {response}") return response -@app.get("/reader") +@app.get("/browse") def bible_reader(): - return send_file("html/reader.html") + return render_template("reader.html", books=cached.get("book_names")) # We should return an index of all books with # drop down menus of each chapter, and a search # bar at the top for quick seeking, which can use @@ -667,7 +680,7 @@ def resolve_shortcode(shortcode: str = ""): logging.info(f"Resolved Shortcode {shortcode} for query '{query}'") return redirect(f"/find?kw={query}&view=rich") - + if __name__ == "__main__": print("You must run this program within a uwsgi environment if you are running this for multiple users.") print("Otherwise, you may end up with database corruption if multiple writes happen.") diff --git a/html/reader.html b/html/reader.html index e69de29..d38356c 100644 --- a/html/reader.html +++ b/html/reader.html @@ -0,0 +1,7 @@ + + {% for book in books %} + + + + {% endfor %} +
{{ book[0] }}
\ No newline at end of file diff --git a/html/reading_plan.html b/html/reading_plan.html index e69de29..85de282 100644 --- a/html/reading_plan.html +++ b/html/reading_plan.html @@ -0,0 +1,5 @@ +
+ + + +
\ No newline at end of file diff --git a/tools/sanity_check.py b/tools/sanity_check.py index 7ceaca7..7ab1caa 100644 --- a/tools/sanity_check.py +++ b/tools/sanity_check.py @@ -7,14 +7,7 @@ from os import stat, getuid def check_sanity(): check_database_permissions() - check_random() - check_verse_of_the_day() - check_find() - check_define() - check_search() - check_show() - check_seq() - check_shortcode() + def check_database_permissions(): dependancies = ['data/seq.db', "data/shortcodes.db"] @@ -22,35 +15,41 @@ def check_database_permissions(): for dependancy in dependancies: if stat(dependancy).st_uid != current_uid: raise PermissionError(dependancy) - -def check_random(): - #TODO: Ensure random returns a verse - pass -def check_verse_of_the_day(): - #TODO: Ensure VOTD returns a verse, the same, at least twice - pass +def check_queries(url=None): + try: + import requests + except ImportError: + raise ImportError("You must install the requests python3 module") + endpoints: list = 'show find search seq status votd random define'.split(" ") + viewarguments: list = 'rich plain json'.split(" ") + with open("tools/search_keywords.txt") as f: + keywords = f.read().splitlines() -def check_find(): - #TODO: Ensure that a varaity of queries don't cause an error (need to define a few) - pass + log = [] -def check_define(): - #TODO: Ensure a few words that are in the dictionary (and those that are not) and those misspelled, give correct responses - pass + baseurl = "http://localhost:1611" + if url: + baseurl = url -def check_search(): - #TODO: Ensure that blanket searches with different syntaxes resolve correctly - pass + for endpoint in endpoints: + for viewargument in viewarguments: + for keyword in keywords: + testurl = f"{baseurl}/{endpoint}?view={viewargument}&kw={keyword}" + r = requests.get(testurl) + log.append([testurl, r.status_code]) -def check_show(): - #TODO: Ensure that many types of verse syntaxes correctly resolve. - pass + with open("tools/sanity_results.txt", 'r+') as logfile: + for logged in log: + if logged[1] != 200: + logfile.write(f"{logged[1]} - {logged[0]}\n") -def check_seq(): - #TODO: Begin a new sequence and check that it does not give us an error - pass - -def check_shortcode(): - #TODO: make a new shortcode for a search and then try to resolve it. - pass \ No newline at end of file +if __name__ == "__main__": + import argparse + parser = argparse.ArgumentParser("Endpoint testing for your kjv api.") + parser.add_argument('url', type=str, nargs='?', help="like http://localhost:1611") + args = parser.parse_args() + if not args.url: + print("Trying default http://localhost:1611") + url = "http://localhost:1611" + check_queries(url=args.url) \ No newline at end of file diff --git a/tools/search_keywords.txt b/tools/search_keywords.txt new file mode 100644 index 0000000..234b506 --- /dev/null +++ b/tools/search_keywords.txt @@ -0,0 +1,35 @@ +Genesis 1 +Genesis1 +Gen1 +Gen 1: +Genesis 1:- +Genesis 1:1 +Genesis 1:1-2 +Genesis 1:-3 +Genesis 1-2 +Genesis +Genesis 99 +1 Cor 1 +1cor1 +1 cor 1: +1 cor 2: +1 cor 1:1-5 +1 cor 2:3-1 +jude 1 +1 jude 1: +genesis1:1, genesis1 +genesis1:1, genesis1, +genesis1:1,, genesis1, +gen1';,.fen fe efj +fpqm3]p 4 04 4jio4mngf +# a devilish Test +" select * from *;;;;; +walrus +and +lord +his +shall +they +even +therefore +should \ No newline at end of file