Added reading and recall of sermon-analyzer. Kind of slow?
This commit is contained in:
@@ -0,0 +1 @@
|
||||
KJV_SERMON_DB="/home/tyler/kjv-api/sermon-analyzer/data/sermons.db"
|
||||
@@ -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
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user