Added reading and recall of sermon-analyzer. Kind of slow?

This commit is contained in:
2024-02-14 23:46:21 -08:00
parent f60fa92b88
commit 019e209dad
4 changed files with 74 additions and 2 deletions
+1
View File
@@ -0,0 +1 @@
KJV_SERMON_DB="/home/tyler/kjv-api/sermon-analyzer/data/sermons.db"
+1
View File
@@ -0,0 +1 @@
KJV_SERMON_DB="/home/tyler/kjv-api/sermon-analyzer/data/sermons.db"
+71 -1
View File
@@ -14,9 +14,13 @@ import sqlite3
import string # for literals shortcut
import json # for dictionary
import hunspell # for spell checking (not really used)
import sys
import os
import logging
from tools import sanity_check
from dotenv import load_dotenv
load_dotenv()
SERMON_DB = os.getenv("KJV_SERMON_DB")
sequential_purge_delta: timedelta = timedelta(days=90)
timestamp_runtime: datetime = datetime.now().strftime("%d%b%y-%H:%M")
@@ -56,14 +60,33 @@ https://docs.python.org/3/library/sqlite3.html#sqlite3-placeholders
URL Shortener for sharing groups of scripture.
"""
def dict_factory(cursor, row):
fields = [column[0] for column in cursor.description]
return {key: value for key, value in zip(fields, row)}
kjv_cur = None
sermon_cur = None
if __name__ == "__main__":
# single user mode, running without uwsgi
usermode: str = "Single"
kjv_cur = sqlite3.connect("data/kjv.db", check_same_thread=False).cursor()
if SERMON_DB:
sermon_con = sqlite3.connect(SERMON_DB, check_same_thread=False)
sermon_con.row_factory = dict_factory
sermon_cur = sermon_con.cursor()
else:
# you're running with uwsgi
usermode: str = "Multi"
kjv_cur = sqlite3.connect("data/kjv.db").cursor()
if SERMON_DB:
sermon_con = sqlite3.connect(SERMON_DB)
sermon_con.row_factory = dict_factory
sermon_cur = sermon_con.cursor()
if not kjv_cur:
exit("CRITICAL: Error connecting to KJV Database")
if not sermon_cur:
print("WARN: Error connecting to Sermon Database")
cached: dict = {
"verse_ids": [i[0] for i in kjv_cur.execute("SELECT id FROM fts_kjv;").fetchall()],
@@ -139,6 +162,10 @@ def lookup_by_verse_id(start_verse, end_verse=None) -> list:
).fetchall()
return results
def get_sermons_by_verse_id(verse_id) -> list:
if not sermon_cur:
return
return sermon_cur.execute(f"select * from verse_refs where verse_id={verse_id}").fetchall()
def get_verse_id(book_id, chapter: str, verse: str) -> str:
# verse_id is 00000000 (00 000 000) (book + chapter + verse)
@@ -244,6 +271,49 @@ def ref_parse_book(ref):
return book
return False
@app.get("/ref/<ref>")
def get_single_reference_verse_id(ref:str):
ref = ref.split(",")[0]
ref = ref.split("-")[0]
# only want the first single ref, not a range, and not a group.
ref = ref_input_cleaning(ref)
maybe_chapter: str = ref.split(":")[0][3:]
ref_chapter: str = ""
for maybedigit in maybe_chapter:
if maybedigit.isdigit():
ref_chapter += maybedigit
ref_verse = ref.split(":")[1]
book_str: str = ref_input_cleaning(ref, string.ascii_letters)
ref_bookname: str = ref_parse_book(book_str)
ref_book_id: int = lookup_book_id(ref_bookname)
if not ref_book_id:
return
return get_verse_id(ref_book_id, ref_chapter, ref_verse)
@app.get("/sermon/<ref>")
def find_sermon(ref:str=None):
verse_id = get_single_reference_verse_id(ref=ref)
if not sermon_cur:
return jsonify({'error':"Sermon database not found"})
sermons = get_sermons_by_verse_id(verse_id=verse_id)
for sermon in sermons:
sermon.update({'kjv':find_by_verseid(sermon.get("verse_id"))[4]})
return jsonify(sermons)
def clean_verseid(verse_id):
verse_id = str(verse_id)
clean_verseid = ''
for char in verse_id:
if char in string.digits:
clean_verseid += char
return clean_verseid
@app.get("/verse_id/<verse_id>")
def find_by_verseid(verse_id):
clean_verse_id = clean_verseid(verse_id=verse_id)
return lookup_by_verse_id(clean_verse_id)[0]
@app.get("/find")
def parse_query(query_override: str = None):
+1 -1
View File
@@ -2,7 +2,7 @@
# run from current directory only
FILE=app.py
if test -f "$FILE"; then
uwsgi_python3 --http-socket 0.0.0.0:1612 --wsgi-file app.py --callable app --pyargv "-vvv"
uwsgi_python3 --http-socket 0.0.0.0:1612 --wsgi-file app.py --callable app --pyargv "-vvv" --stats 0.0.0.0:9192
else
cd /opt/kjv-api
echo "WARNING: RUNNING FROM /opt/kjv-api"