From fbdf5e947367b948ef4d0d33eb6af3aa791c6784 Mon Sep 17 00:00:00 2001 From: Tyler Date: Thu, 15 Feb 2024 13:21:01 -0800 Subject: [PATCH] endpoint comments --- app.py | 94 ++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 69 insertions(+), 25 deletions(-) diff --git a/app.py b/app.py index 8c0ac54..91b6dbc 100644 --- a/app.py +++ b/app.py @@ -271,7 +271,7 @@ def ref_parse_book(ref): return book return False -@app.get("/ref/") +@app.get("/ref/") # find database verse_id by english scripture reference (1John5:7) def get_single_reference_verse_id(ref:str): ref = ref.split(",")[0] ref = ref.split("-")[0] @@ -290,8 +290,8 @@ def get_single_reference_verse_id(ref:str): return return get_verse_id(ref_book_id, ref_chapter, ref_verse) -@app.get("/sermon/") -def find_sermon(ref:str=None): +@app.get("/sermon/search/") # find a sermon by english scripture reference (1John5:7) +def find_sermon_by_ref(ref:str=None): verse_id = get_single_reference_verse_id(ref=ref) if not sermon_cur: return jsonify({'error':"Sermon database not found"}) @@ -300,6 +300,46 @@ def find_sermon(ref:str=None): sermon.update({'kjv':find_by_verseid(sermon.get("verse_id"))[4]}) return jsonify(sermons) +@app.get("/sermons") # lists all the sermons in our database +def list_sermons(): + return jsonify(sermon_cur.execute("select distinct title,url,denomination,preacher,church_name,filename from verse_refs").fetchall()) + +@app.get("/sermon//verses") # show all matched info on a sermon by its filename (hash) +def list_sermon_references(filename): + return jsonify(sermon_cur.execute("select distinct verse_id,text from verse_refs where filename=?", (filename,)).fetchall()) + +@app.get("/preachers") # return a list of preachers stored in database, their denomination and church name +def list_preachers(): + return jsonify(sermon_cur.execute("select distinct denomination,preacher,church_name from verse_refs").fetchall()) + +@app.get("/churches") # return a list of churches with sermons in the database +def list_churches(): + return jsonify(sermon_cur.execute("select distinct denomination,church_name from verse_refs").fetchall()) + +@app.get("/denominations") # return a list of denominations included in the database +def list_denominations(): + return jsonify(sermon_cur.execute("select distinct denomination from verse_refs").fetchall()) + +@app.get("/sermons/preacher/") # show all sermons by a paticular preacher +def find_sermons_by_preacher(preacher): + return jsonify(sermon_cur.execute("select distinct title,url,denomination,preacher,church_name from verse_refs where preacher=?", (preacher,)).fetchall()) + +@app.get("/sermons/church/") # show all sermons by a paticular church +def find_sermons_by_church(church_name): + return jsonify(sermon_cur.execute("select distinct title,url,denomination,preacher,church_name from verse_refs where church_name=?", (church_name,)).fetchall()) + +@app.get("/sermons/denomination/") # show all sermons by a paticular denomination +def find_sermons_by_denomination(denomination): + return jsonify(sermon_cur.execute("select distinct title,url,denomination,preacher,church_name from verse_refs where denomination=?", (denomination,)).fetchall()) + +@app.get("/sermon/") # show general information about a sermon by filename (hash) +def find_sermons_by_filename(filename): + return jsonify(sermon_cur.execute("select distinct title,url,denomination,preacher,church_name from verse_refs where filename=?", (filename,)).fetchall()) + +@app.get("/sermon/url/") # show general information about a sermon by url +def find_sermons_by_url(url): + return jsonify(sermon_cur.execute("select distinct title,url,denomination,preacher,church_name from verse_refs where url=?", (url,)).fetchall()) + def clean_verseid(verse_id): verse_id = str(verse_id) clean_verseid = '' @@ -309,13 +349,17 @@ def clean_verseid(verse_id): return clean_verseid -@app.get("/verse_id/") def find_by_verseid(verse_id): + return lookup_by_verse_id(verse_id)[0] +# wow lol I just wrote this and forgot how it works already lmao + + +@app.get("/verse_id/") # return the database entry of an internal verse_id +def web_verseid(verse_id): clean_verse_id = clean_verseid(verse_id=verse_id) - return lookup_by_verse_id(clean_verse_id)[0] + return jsonify(lookup_by_verse_id(clean_verse_id)[0]) - -@app.get("/find") +@app.get("/find") # user-facing general search parser. This will move to an independant frontend. def parse_query(query_override: str = None): query = request.args.get("kw", None) # /find should always return human readable (rich) but some users may try @@ -369,7 +413,7 @@ def parse_query(query_override: str = None): return result -@app.get("/define") +@app.get("/define") # user-facing Webster Dictionary, this will move to an independent frontend. def define(word=None): ref = request.args.get("kw", None) if word: @@ -424,7 +468,7 @@ def return_dict_rich(ref, defs, simple): ) -@app.get("/show") +@app.get("/show") # user facing to show a group of scripture. This will be deprecated and moved to backend. def show(kw=None, get_start_verse_id=False, human_readable=False): ref: str = request.args.get("kw", None) get_chapter: bool = request.args.get("all", False) @@ -576,8 +620,8 @@ def page_not_found(e): return jsonify(message) -@app.get("/") -@app.get("/") +@app.get("/") # index +@app.get("/") # resolves a generated shortcode def idx(shortcode=""): if not sanity: return "Sanity check failed. Check database ownership or please notify tyler@dinsmoor.us" @@ -588,13 +632,13 @@ def idx(shortcode=""): return send_file("html/index.html") -@app.get("/salvation") +@app.get("/salvation") # a web page about going to heaven def salvation(): return send_file("html/heaven.html") -@app.get("/t/random", defaults={"view": "plain"}) # backwards-compatibility -@app.get("/random") +@app.get("/t/random", defaults={"view": "plain"}) # backwards-compatibility plaintext random Bible verse +@app.get("/random") # truely random Bible verse def random_verse(): rand_id = random.SystemRandom().choice(cached["verse_ids"]) scripture = lookup_by_verse_id(rand_id) @@ -611,8 +655,8 @@ def random_verse(): return response -@app.get("/t/votd", defaults={"view": "plain"}) # backwards-compatibility -@app.get("/votd") +@app.get("/t/votd", defaults={"view": "plain"}) # backwards-compatibility plaintext "Today's" Bible verse +@app.get("/votd") # "today's" Bible verse def verse_of_the_day(): # plain takes 38ms -TODO can we cache this? logging.info("VOTD Served") @@ -644,7 +688,7 @@ def make_view(response_list=[]): response = jsonify(response_list) -@app.get("/search") +@app.get("/search") # user-facing keyword search. To be moved to backend, possibly replaced with semantic search. def search(): keywords = request.args.get("kw", None) logging.debug(f"search({keywords})") @@ -673,7 +717,7 @@ def search(): return response -@app.get("/browse") +@app.get("/browse") # not implemented. TO be moved to frontend. def bible_reader(): return render_template("reader.html", books=cached.get("book_names")) # We should return an index of all books with @@ -685,7 +729,7 @@ def bible_reader(): # Maybe preliminary theming support -@app.get("/plan") +@app.get("/plan") # not implmeneted. To be moved to frontend. def reading_plan(): # needs 2 sets of data, books and time frame. # should default to the entire Bible in 1 year. @@ -694,7 +738,7 @@ def reading_plan(): return render_template("reading_plan.html") -@app.get("/status") +@app.get("/status") # basic instance info def status(): import resource @@ -704,7 +748,7 @@ Memory: {resource.getrusage(resource.RUSAGE_SELF).ru_maxrss} """ -@app.get("/seqreport") +@app.get("/seqreport") # shows current tracked scripture sequences def sequential_report(uid=None): if usermode == "Single": seq_conn = sqlite3.connect("data/seq.db", check_same_thread=False) @@ -714,7 +758,7 @@ def sequential_report(uid=None): uids = seq_cur.execute("select * from reading_tracker").fetchall() return render_template("seq_report.html", uids=uids) -@app.get("/screport") +@app.get("/screport") # shows current remembered shortcodes def shortcode_report(shortcode=None): if usermode == "Single": short_conn = sqlite3.connect("data/shortcodes.db", check_same_thread=False) @@ -747,7 +791,7 @@ def sequential_purge(): seq_cur.close() -@app.get("/seq") +@app.get("/seq") # allows you to get groups of scripture sequentially def sequential_read(start=0, num=1, uid=None, getuid=False): # /seq?uid=1 uid = request.args.get("uid", uid) @@ -828,7 +872,7 @@ def sequential_read(start=0, num=1, uid=None, getuid=False): return response -@app.get("/mksc/") +@app.get("/mksc/") # create and remember a new shortcode def generate_shortcode(query: str = ""): query = search_input_cleaning(query, extra_chars=":-,") if not query: @@ -881,4 +925,4 @@ if __name__ == "__main__": "Otherwise, you may end up with database corruption if multiple writes happen." ) print("Operating in single user mode.") - app.run(host="127.0.0.1", port=1611) + app.run(host="0.0.0.0", port=1612, debug=True, threaded=True)