mirror of
https://github.com/kennethreitz/kjvstudy.org.git
synced 2026-06-05 23:00:16 +00:00
Refactor API and route functions to be asynchronous
- Updated all route handler functions in the API to be asynchronous by adding 'async' keyword. - This change enhances performance and allows for better handling of concurrent requests. - Adjusted related documentation comments to reflect the changes in function signatures.
This commit is contained in:
+34
-34
@@ -338,7 +338,7 @@ def init_templates(app_templates):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/")
|
@router.get("/")
|
||||||
def api_index():
|
async def api_index():
|
||||||
"""API index with links to documentation and available endpoints."""
|
"""API index with links to documentation and available endpoints."""
|
||||||
return {
|
return {
|
||||||
"name": "KJV Study API",
|
"name": "KJV Study API",
|
||||||
@@ -382,7 +382,7 @@ def api_index():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/health")
|
@router.get("/health")
|
||||||
def api_health_check():
|
async def api_health_check():
|
||||||
"""API health check endpoint for monitoring and status verification."""
|
"""API health check endpoint for monitoring and status verification."""
|
||||||
return {
|
return {
|
||||||
"status": "healthy",
|
"status": "healthy",
|
||||||
@@ -392,7 +392,7 @@ def api_health_check():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/search")
|
@router.get("/search")
|
||||||
def search_api(
|
async def search_api(
|
||||||
q: str = Query(..., description="Search query", example="faith"),
|
q: str = Query(..., description="Search query", example="faith"),
|
||||||
limit: Optional[int] = Query(None, description="Max results", example=10)
|
limit: Optional[int] = Query(None, description="Max results", example=10)
|
||||||
):
|
):
|
||||||
@@ -416,7 +416,7 @@ def search_api(
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/universal-search")
|
@router.get("/universal-search")
|
||||||
def universal_search_api(
|
async def universal_search_api(
|
||||||
q: str = Query(..., description="Search query", example="love"),
|
q: str = Query(..., description="Search query", example="love"),
|
||||||
limit: int = Query(5, description="Max results per category", example=5)
|
limit: int = Query(5, description="Max results per category", example=5)
|
||||||
):
|
):
|
||||||
@@ -612,7 +612,7 @@ def universal_search_api(
|
|||||||
summary="Get verse of the day",
|
summary="Get verse of the day",
|
||||||
description="Returns a featured verse that changes daily"
|
description="Returns a featured verse that changes daily"
|
||||||
)
|
)
|
||||||
def verse_of_the_day_api():
|
async def verse_of_the_day_api():
|
||||||
"""API endpoint for verse of the day."""
|
"""API endpoint for verse of the day."""
|
||||||
return get_daily_verse()
|
return get_daily_verse()
|
||||||
|
|
||||||
@@ -667,7 +667,7 @@ def verse_of_the_day_api():
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
def api_get_verse(
|
async def api_get_verse(
|
||||||
book: str = Path(..., description="Book name (supports abbreviations)", example="John"),
|
book: str = Path(..., description="Book name (supports abbreviations)", example="John"),
|
||||||
chapter: int = Path(..., description="Chapter number", example=3, ge=1),
|
chapter: int = Path(..., description="Chapter number", example=3, ge=1),
|
||||||
verse: int = Path(..., description="Verse number", example=16, ge=1),
|
verse: int = Path(..., description="Verse number", example=16, ge=1),
|
||||||
@@ -787,7 +787,7 @@ def api_get_verse(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
def api_get_verse_range(
|
async def api_get_verse_range(
|
||||||
book: str = Path(..., description="Book name (supports abbreviations)", example="Psalms"),
|
book: str = Path(..., description="Book name (supports abbreviations)", example="Psalms"),
|
||||||
chapter: int = Path(..., description="Chapter number", example=23, ge=1),
|
chapter: int = Path(..., description="Chapter number", example=23, ge=1),
|
||||||
start: int = Path(..., description="Starting verse number", example=1, ge=1),
|
start: int = Path(..., description="Starting verse number", example=1, ge=1),
|
||||||
@@ -836,7 +836,7 @@ def api_get_verse_range(
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/interlinear/{book}/{chapter}/{verse}")
|
@router.get("/interlinear/{book}/{chapter}/{verse}")
|
||||||
def api_get_interlinear(
|
async def api_get_interlinear(
|
||||||
book: str = Path(..., description="Book name", example="John"),
|
book: str = Path(..., description="Book name", example="John"),
|
||||||
chapter: int = Path(..., description="Chapter number", example=1),
|
chapter: int = Path(..., description="Chapter number", example=1),
|
||||||
verse: int = Path(..., description="Verse number", example=1)
|
verse: int = Path(..., description="Verse number", example=1)
|
||||||
@@ -884,7 +884,7 @@ def api_get_interlinear(
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/books")
|
@router.get("/books")
|
||||||
def api_get_books():
|
async def api_get_books():
|
||||||
"""Get list of all Bible books with metadata."""
|
"""Get list of all Bible books with metadata."""
|
||||||
books = bible.get_books()
|
books = bible.get_books()
|
||||||
|
|
||||||
@@ -921,7 +921,7 @@ def api_get_books():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/books/{book}")
|
@router.get("/books/{book}")
|
||||||
def api_get_book(book: str = Path(..., description="Book name", example="Genesis")):
|
async def api_get_book(book: str = Path(..., description="Book name", example="Genesis")):
|
||||||
"""Get details about a specific book including introduction and study material."""
|
"""Get details about a specific book including introduction and study material."""
|
||||||
canonical_name = normalize_book_name(book)
|
canonical_name = normalize_book_name(book)
|
||||||
if canonical_name:
|
if canonical_name:
|
||||||
@@ -1031,7 +1031,7 @@ async def api_book_pdf(book: str = Path(..., description="Book name", example="G
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/books/{book}/chapters/{chapter}")
|
@router.get("/books/{book}/chapters/{chapter}")
|
||||||
def api_get_chapter(
|
async def api_get_chapter(
|
||||||
book: str = Path(..., description="Book name", example="Romans"),
|
book: str = Path(..., description="Book name", example="Romans"),
|
||||||
chapter: int = Path(..., description="Chapter number", example=8)
|
chapter: int = Path(..., description="Chapter number", example=8)
|
||||||
):
|
):
|
||||||
@@ -1114,7 +1114,7 @@ async def api_chapter_pdf(
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/books/{book}/text")
|
@router.get("/books/{book}/text")
|
||||||
def api_get_book_text(book: str = Path(..., description="Book name", example="Philemon")):
|
async def api_get_book_text(book: str = Path(..., description="Book name", example="Philemon")):
|
||||||
"""Get all text content of a book."""
|
"""Get all text content of a book."""
|
||||||
canonical_name = normalize_book_name(book)
|
canonical_name = normalize_book_name(book)
|
||||||
if canonical_name:
|
if canonical_name:
|
||||||
@@ -1149,7 +1149,7 @@ def api_get_book_text(book: str = Path(..., description="Book name", example="Ph
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/bible")
|
@router.get("/bible")
|
||||||
def api_get_bible():
|
async def api_get_bible():
|
||||||
"""Get the entire Bible text."""
|
"""Get the entire Bible text."""
|
||||||
books_data = {}
|
books_data = {}
|
||||||
for v in bible.iter_verses():
|
for v in bible.iter_verses():
|
||||||
@@ -1186,7 +1186,7 @@ def api_get_bible():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/cross-references/{book}/{chapter}/{verse}")
|
@router.get("/cross-references/{book}/{chapter}/{verse}")
|
||||||
def api_get_cross_references(
|
async def api_get_cross_references(
|
||||||
book: str = Path(..., description="Book name", example="John"),
|
book: str = Path(..., description="Book name", example="John"),
|
||||||
chapter: int = Path(..., description="Chapter number", example=3),
|
chapter: int = Path(..., description="Chapter number", example=3),
|
||||||
verse: int = Path(..., description="Verse number", example=16)
|
verse: int = Path(..., description="Verse number", example=16)
|
||||||
@@ -1212,7 +1212,7 @@ def api_get_cross_references(
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/topics")
|
@router.get("/topics")
|
||||||
def api_get_topics():
|
async def api_get_topics():
|
||||||
"""Get list of all topics."""
|
"""Get list of all topics."""
|
||||||
topics = get_all_topics()
|
topics = get_all_topics()
|
||||||
|
|
||||||
@@ -1232,7 +1232,7 @@ def api_get_topics():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/topics/{topic_name}")
|
@router.get("/topics/{topic_name}")
|
||||||
def api_get_topic(topic_name: str = Path(..., description="Topic name", example="faith")):
|
async def api_get_topic(topic_name: str = Path(..., description="Topic name", example="faith")):
|
||||||
"""Get details about a specific topic."""
|
"""Get details about a specific topic."""
|
||||||
topic = get_topic(topic_name)
|
topic = get_topic(topic_name)
|
||||||
if not topic:
|
if not topic:
|
||||||
@@ -1247,7 +1247,7 @@ def api_get_topic(topic_name: str = Path(..., description="Topic name", example=
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/reading-plans")
|
@router.get("/reading-plans")
|
||||||
def api_get_reading_plans():
|
async def api_get_reading_plans():
|
||||||
"""Get list of all reading plans."""
|
"""Get list of all reading plans."""
|
||||||
plans = get_plan_summary()
|
plans = get_plan_summary()
|
||||||
|
|
||||||
@@ -1258,7 +1258,7 @@ def api_get_reading_plans():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/reading-plans/{plan_id}")
|
@router.get("/reading-plans/{plan_id}")
|
||||||
def api_get_reading_plan(plan_id: str = Path(..., description="Reading plan ID", example="chronological")):
|
async def api_get_reading_plan(plan_id: str = Path(..., description="Reading plan ID", example="chronological")):
|
||||||
"""Get details about a specific reading plan."""
|
"""Get details about a specific reading plan."""
|
||||||
plan = get_plan(plan_id)
|
plan = get_plan(plan_id)
|
||||||
if not plan:
|
if not plan:
|
||||||
@@ -1268,7 +1268,7 @@ def api_get_reading_plan(plan_id: str = Path(..., description="Reading plan ID",
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/stories")
|
@router.get("/stories")
|
||||||
def api_get_stories():
|
async def api_get_stories():
|
||||||
"""Get list of all Bible stories organized by category."""
|
"""Get list of all Bible stories organized by category."""
|
||||||
categories = get_categories()
|
categories = get_categories()
|
||||||
story_count = get_story_count()
|
story_count = get_story_count()
|
||||||
@@ -1306,7 +1306,7 @@ def api_get_stories():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/stories/{slug}")
|
@router.get("/stories/{slug}")
|
||||||
def api_get_story(slug: str = Path(..., description="Story slug", example="creation-of-the-world")):
|
async def api_get_story(slug: str = Path(..., description="Story slug", example="creation-of-the-world")):
|
||||||
"""Get a specific Bible story by slug."""
|
"""Get a specific Bible story by slug."""
|
||||||
story = get_story_by_slug(slug)
|
story = get_story_by_slug(slug)
|
||||||
if not story:
|
if not story:
|
||||||
@@ -1411,7 +1411,7 @@ async def api_story_kids_pdf(slug: str = Path(..., description="Story slug")):
|
|||||||
summary="List all resource categories",
|
summary="List all resource categories",
|
||||||
description="Get a list of all biblical resource categories (locations, angels, prophets, etc.)"
|
description="Get a list of all biblical resource categories (locations, angels, prophets, etc.)"
|
||||||
)
|
)
|
||||||
def api_list_resource_categories():
|
async def api_list_resource_categories():
|
||||||
"""List all available resource categories."""
|
"""List all available resource categories."""
|
||||||
def format_title(key: str) -> str:
|
def format_title(key: str) -> str:
|
||||||
"""Convert snake_case to Title Case."""
|
"""Convert snake_case to Title Case."""
|
||||||
@@ -1477,7 +1477,7 @@ def api_list_resource_categories():
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
def api_get_resource_category(
|
async def api_get_resource_category(
|
||||||
category: str = Path(..., description="Resource category name", example="biblical_locations")
|
category: str = Path(..., description="Resource category name", example="biblical_locations")
|
||||||
):
|
):
|
||||||
"""Get all items in a specific resource category."""
|
"""Get all items in a specific resource category."""
|
||||||
@@ -1551,7 +1551,7 @@ def api_get_resource_category(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
def api_get_resource_item(
|
async def api_get_resource_item(
|
||||||
category: str = Path(..., description="Resource category name", example="biblical_locations"),
|
category: str = Path(..., description="Resource category name", example="biblical_locations"),
|
||||||
slug: str = Path(..., description="Resource item slug", example="garden-of-eden")
|
slug: str = Path(..., description="Resource item slug", example="garden-of-eden")
|
||||||
):
|
):
|
||||||
@@ -1708,7 +1708,7 @@ async def api_get_resource_item_pdf(
|
|||||||
summary="List all red letter verses",
|
summary="List all red letter verses",
|
||||||
description="Get a list of all verses containing the words of Jesus Christ (red letter edition). Supports filtering by book and pagination."
|
description="Get a list of all verses containing the words of Jesus Christ (red letter edition). Supports filtering by book and pagination."
|
||||||
)
|
)
|
||||||
def api_list_red_letter_verses(
|
async def api_list_red_letter_verses(
|
||||||
book: Optional[str] = Query(None, description="Filter by book name", example="John"),
|
book: Optional[str] = Query(None, description="Filter by book name", example="John"),
|
||||||
limit: int = Query(50, description="Maximum number of verses to return", example=50, ge=1, le=500),
|
limit: int = Query(50, description="Maximum number of verses to return", example=50, ge=1, le=500),
|
||||||
offset: int = Query(0, description="Number of verses to skip", example=0, ge=0)
|
offset: int = Query(0, description="Number of verses to skip", example=0, ge=0)
|
||||||
@@ -1775,7 +1775,7 @@ def api_list_red_letter_verses(
|
|||||||
summary="Get red letter statistics",
|
summary="Get red letter statistics",
|
||||||
description="Get statistics about verses containing the words of Jesus Christ, including counts by book and full vs. partial verses."
|
description="Get statistics about verses containing the words of Jesus Christ, including counts by book and full vs. partial verses."
|
||||||
)
|
)
|
||||||
def api_red_letter_stats():
|
async def api_red_letter_stats():
|
||||||
"""Get statistics about red letter verses in the Bible."""
|
"""Get statistics about red letter verses in the Bible."""
|
||||||
red_letter_data = load_red_letter_verses()
|
red_letter_data = load_red_letter_verses()
|
||||||
|
|
||||||
@@ -1815,7 +1815,7 @@ def api_red_letter_stats():
|
|||||||
summary="Get a random verse",
|
summary="Get a random verse",
|
||||||
description="Returns a random Bible verse. Optionally filter by testament (ot/nt) or specific book."
|
description="Returns a random Bible verse. Optionally filter by testament (ot/nt) or specific book."
|
||||||
)
|
)
|
||||||
def api_random_verse(
|
async def api_random_verse(
|
||||||
testament: Optional[str] = Query(None, description="Filter by testament: 'ot' or 'nt'", example="nt"),
|
testament: Optional[str] = Query(None, description="Filter by testament: 'ot' or 'nt'", example="nt"),
|
||||||
book: Optional[str] = Query(None, description="Filter by book name", example="John")
|
book: Optional[str] = Query(None, description="Filter by book name", example="John")
|
||||||
):
|
):
|
||||||
@@ -1884,7 +1884,7 @@ def api_random_verse(
|
|||||||
summary="Get verse commentary",
|
summary="Get verse commentary",
|
||||||
description="Get AI-generated theological commentary for a specific verse, including analysis, historical context, and reflection questions."
|
description="Get AI-generated theological commentary for a specific verse, including analysis, historical context, and reflection questions."
|
||||||
)
|
)
|
||||||
def api_get_verse_commentary(
|
async def api_get_verse_commentary(
|
||||||
book: str = Path(..., description="Book name", example="John"),
|
book: str = Path(..., description="Book name", example="John"),
|
||||||
chapter: int = Path(..., description="Chapter number", example=3),
|
chapter: int = Path(..., description="Chapter number", example=3),
|
||||||
verse: int = Path(..., description="Verse number", example=16)
|
verse: int = Path(..., description="Verse number", example=16)
|
||||||
@@ -1937,7 +1937,7 @@ def api_get_verse_commentary(
|
|||||||
summary="Get chapter commentary",
|
summary="Get chapter commentary",
|
||||||
description="Get a brief explanation of what a chapter contains and why it's significant."
|
description="Get a brief explanation of what a chapter contains and why it's significant."
|
||||||
)
|
)
|
||||||
def api_get_chapter_commentary(
|
async def api_get_chapter_commentary(
|
||||||
book: str = Path(..., description="Book name", example="Genesis"),
|
book: str = Path(..., description="Book name", example="Genesis"),
|
||||||
chapter: int = Path(..., description="Chapter number", example=1)
|
chapter: int = Path(..., description="Chapter number", example=1)
|
||||||
):
|
):
|
||||||
@@ -1976,7 +1976,7 @@ def api_get_chapter_commentary(
|
|||||||
summary="Bulk verse lookup",
|
summary="Bulk verse lookup",
|
||||||
description="Fetch multiple verses in a single request. Provide an array of verse references like ['John 3:16', 'Romans 8:28']."
|
description="Fetch multiple verses in a single request. Provide an array of verse references like ['John 3:16', 'Romans 8:28']."
|
||||||
)
|
)
|
||||||
def api_bulk_verse_lookup(request: BulkVerseRequest):
|
async def api_bulk_verse_lookup(request: BulkVerseRequest):
|
||||||
"""Look up multiple verses in a single request."""
|
"""Look up multiple verses in a single request."""
|
||||||
from ..kjv import VerseReference
|
from ..kjv import VerseReference
|
||||||
|
|
||||||
@@ -2023,7 +2023,7 @@ def api_bulk_verse_lookup(request: BulkVerseRequest):
|
|||||||
summary="Get family tree statistics",
|
summary="Get family tree statistics",
|
||||||
description="Get comprehensive statistics about the biblical family tree from the GEDCOM genealogy data."
|
description="Get comprehensive statistics about the biblical family tree from the GEDCOM genealogy data."
|
||||||
)
|
)
|
||||||
def api_family_tree_stats():
|
async def api_family_tree_stats():
|
||||||
"""Get statistics about the biblical family tree from GEDCOM data."""
|
"""Get statistics about the biblical family tree from GEDCOM data."""
|
||||||
from ..routes.family_tree import get_family_tree_data
|
from ..routes.family_tree import get_family_tree_data
|
||||||
import re
|
import re
|
||||||
@@ -2204,7 +2204,7 @@ def api_family_tree_stats():
|
|||||||
summary="List all biblical figures",
|
summary="List all biblical figures",
|
||||||
description="Get a list of all people who have biographies in the family tree database."
|
description="Get a list of all people who have biographies in the family tree database."
|
||||||
)
|
)
|
||||||
def api_list_family_tree():
|
async def api_list_family_tree():
|
||||||
"""List all people with biographies."""
|
"""List all people with biographies."""
|
||||||
data = _load_biographies()
|
data = _load_biographies()
|
||||||
biographies = data.get("biographies", {})
|
biographies = data.get("biographies", {})
|
||||||
@@ -2223,7 +2223,7 @@ def api_list_family_tree():
|
|||||||
summary="Get biography of biblical figure",
|
summary="Get biography of biblical figure",
|
||||||
description="Get detailed biography including summary, significance, and key life events for a specific biblical figure."
|
description="Get detailed biography including summary, significance, and key life events for a specific biblical figure."
|
||||||
)
|
)
|
||||||
def api_get_biography(
|
async def api_get_biography(
|
||||||
name: str = Path(..., description="Name of the person", example="Abraham")
|
name: str = Path(..., description="Name of the person", example="Abraham")
|
||||||
):
|
):
|
||||||
"""Get biography of a specific person."""
|
"""Get biography of a specific person."""
|
||||||
@@ -2277,7 +2277,7 @@ def api_get_biography(
|
|||||||
404: {"description": "Strong's number not found"}
|
404: {"description": "Strong's number not found"}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
def api_get_strongs(
|
async def api_get_strongs(
|
||||||
strongs_number: str = Path(
|
strongs_number: str = Path(
|
||||||
...,
|
...,
|
||||||
description="Strong's number (H1-H8674 for Hebrew, G1-G5624 for Greek)",
|
description="Strong's number (H1-H8674 for Hebrew, G1-G5624 for Greek)",
|
||||||
@@ -2322,7 +2322,7 @@ def api_get_strongs(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
def api_search_strongs(
|
async def api_search_strongs(
|
||||||
q: str = Query(..., description="Search query", example="love"),
|
q: str = Query(..., description="Search query", example="love"),
|
||||||
language: str = Query(
|
language: str = Query(
|
||||||
"both",
|
"both",
|
||||||
|
|||||||
@@ -137,7 +137,7 @@ def get_verse_text(book, chapter, verse):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/commentary/{book}/{chapter}")
|
@router.get("/commentary/{book}/{chapter}")
|
||||||
def commentary_redirect(book: str, chapter: int):
|
async def commentary_redirect(book: str, chapter: int):
|
||||||
"""Redirect old chapter commentary URLs to chapter page"""
|
"""Redirect old chapter commentary URLs to chapter page"""
|
||||||
from fastapi.responses import RedirectResponse
|
from fastapi.responses import RedirectResponse
|
||||||
return RedirectResponse(url=f"/book/{book}/chapter/{chapter}", status_code=301)
|
return RedirectResponse(url=f"/book/{book}/chapter/{chapter}", status_code=301)
|
||||||
|
|||||||
@@ -370,7 +370,7 @@ def search_family_tree(query: str, limit: Optional[int] = None) -> List[Dict]:
|
|||||||
# ============================================================================
|
# ============================================================================
|
||||||
|
|
||||||
@router.get("/family-tree", response_class=HTMLResponse)
|
@router.get("/family-tree", response_class=HTMLResponse)
|
||||||
def family_tree_page(request: Request):
|
async def family_tree_page(request: Request):
|
||||||
"""Biblical family tree page using GEDCOM file."""
|
"""Biblical family tree page using GEDCOM file."""
|
||||||
family_tree_data, generations = get_family_tree_data()
|
family_tree_data, generations = get_family_tree_data()
|
||||||
|
|
||||||
@@ -404,7 +404,7 @@ def family_tree_page(request: Request):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/family-tree/generation/{gen_num}", response_class=HTMLResponse)
|
@router.get("/family-tree/generation/{gen_num}", response_class=HTMLResponse)
|
||||||
def family_tree_generation_page(request: Request, gen_num: int):
|
async def family_tree_generation_page(request: Request, gen_num: int):
|
||||||
"""Individual generation page."""
|
"""Individual generation page."""
|
||||||
gedcom_path = get_static_dir() / "adameve.ged"
|
gedcom_path = get_static_dir() / "adameve.ged"
|
||||||
|
|
||||||
@@ -455,7 +455,7 @@ def family_tree_generation_page(request: Request, gen_num: int):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/family-tree/person/{person_id}", response_class=HTMLResponse)
|
@router.get("/family-tree/person/{person_id}", response_class=HTMLResponse)
|
||||||
def family_tree_person_page(request: Request, person_id: str):
|
async def family_tree_person_page(request: Request, person_id: str):
|
||||||
"""Individual person page."""
|
"""Individual person page."""
|
||||||
from ..biblical_biographies import get_biography
|
from ..biblical_biographies import get_biography
|
||||||
|
|
||||||
@@ -511,7 +511,7 @@ def family_tree_person_page(request: Request, person_id: str):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/family-tree/search", response_class=HTMLResponse)
|
@router.get("/family-tree/search", response_class=HTMLResponse)
|
||||||
def family_tree_search_page(request: Request, q: str = ""):
|
async def family_tree_search_page(request: Request, q: str = ""):
|
||||||
"""Search the family tree."""
|
"""Search the family tree."""
|
||||||
gedcom_path = get_static_dir() / "adameve.ged"
|
gedcom_path = get_static_dir() / "adameve.ged"
|
||||||
|
|
||||||
@@ -574,7 +574,7 @@ def family_tree_search_page(request: Request, q: str = ""):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/family-tree/interactive", response_class=HTMLResponse)
|
@router.get("/family-tree/interactive", response_class=HTMLResponse)
|
||||||
def family_tree_interactive_page(request: Request):
|
async def family_tree_interactive_page(request: Request):
|
||||||
"""Interactive D3.js-based family tree visualization."""
|
"""Interactive D3.js-based family tree visualization."""
|
||||||
family_tree_data, generations = get_family_tree_data()
|
family_tree_data, generations = get_family_tree_data()
|
||||||
|
|
||||||
@@ -601,7 +601,7 @@ def family_tree_interactive_page(request: Request):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/family-tree/lineage", response_class=HTMLResponse)
|
@router.get("/family-tree/lineage", response_class=HTMLResponse)
|
||||||
def family_tree_lineage_page(request: Request):
|
async def family_tree_lineage_page(request: Request):
|
||||||
"""Dedicated page for the Messianic lineage visualization."""
|
"""Dedicated page for the Messianic lineage visualization."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -618,7 +618,7 @@ def family_tree_lineage_page(request: Request):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/family-tree/person/{person_id}/descendants", response_class=HTMLResponse)
|
@router.get("/family-tree/person/{person_id}/descendants", response_class=HTMLResponse)
|
||||||
def family_tree_descendants_page(request: Request, person_id: str):
|
async def family_tree_descendants_page(request: Request, person_id: str):
|
||||||
"""View all descendants of a person."""
|
"""View all descendants of a person."""
|
||||||
family_tree_data, generations = get_family_tree_data()
|
family_tree_data, generations = get_family_tree_data()
|
||||||
|
|
||||||
@@ -674,7 +674,7 @@ def family_tree_descendants_page(request: Request, person_id: str):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/family-tree/person/{person_id}/ancestors", response_class=HTMLResponse)
|
@router.get("/family-tree/person/{person_id}/ancestors", response_class=HTMLResponse)
|
||||||
def family_tree_ancestors_page(request: Request, person_id: str):
|
async def family_tree_ancestors_page(request: Request, person_id: str):
|
||||||
"""View all ancestors of a person."""
|
"""View all ancestors of a person."""
|
||||||
family_tree_data, generations = get_family_tree_data()
|
family_tree_data, generations = get_family_tree_data()
|
||||||
|
|
||||||
@@ -730,7 +730,7 @@ def family_tree_ancestors_page(request: Request, person_id: str):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/family-tree/lineage.svg")
|
@router.get("/family-tree/lineage.svg")
|
||||||
def family_tree_lineage_svg(request: Request):
|
async def family_tree_lineage_svg(request: Request):
|
||||||
"""Generate SVG visualization of the Messianic lineage (Adam to Jesus)."""
|
"""Generate SVG visualization of the Messianic lineage (Adam to Jesus)."""
|
||||||
gedcom_path = get_static_dir() / "adameve.ged"
|
gedcom_path = get_static_dir() / "adameve.ged"
|
||||||
|
|
||||||
|
|||||||
@@ -187,7 +187,7 @@ async def _resource_index_pdf_response(resource_data: dict, page_title: str, pag
|
|||||||
# BIBLICAL MAPS
|
# BIBLICAL MAPS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/biblical-maps", response_class=HTMLResponse)
|
@router.get("/biblical-maps", response_class=HTMLResponse)
|
||||||
def biblical_maps_page(request: Request):
|
async def biblical_maps_page(request: Request):
|
||||||
"""Biblical maps page showing important biblical locations."""
|
"""Biblical maps page showing important biblical locations."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -208,7 +208,7 @@ def biblical_maps_page(request: Request):
|
|||||||
# BIBLICAL ANGELS
|
# BIBLICAL ANGELS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/biblical-angels", response_class=HTMLResponse)
|
@router.get("/biblical-angels", response_class=HTMLResponse)
|
||||||
def biblical_angels_page(request: Request):
|
async def biblical_angels_page(request: Request):
|
||||||
"""Biblical angels page exploring angels throughout Scripture."""
|
"""Biblical angels page exploring angels throughout Scripture."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -237,7 +237,7 @@ async def biblical_angels_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/biblical-angels/{angel_slug}", response_class=HTMLResponse)
|
@router.get("/biblical-angels/{angel_slug}", response_class=HTMLResponse)
|
||||||
def angel_detail(request: Request, angel_slug: str):
|
async def angel_detail(request: Request, angel_slug: str):
|
||||||
"""Individual biblical angels detail page."""
|
"""Individual biblical angels detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -265,7 +265,7 @@ async def angel_detail_pdf(angel_slug: str):
|
|||||||
# BIBLICAL PROPHETS
|
# BIBLICAL PROPHETS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/biblical-prophets", response_class=HTMLResponse)
|
@router.get("/biblical-prophets", response_class=HTMLResponse)
|
||||||
def biblical_prophets_page(request: Request):
|
async def biblical_prophets_page(request: Request):
|
||||||
"""Biblical prophets page exploring the prophetic ministry throughout Scripture."""
|
"""Biblical prophets page exploring the prophetic ministry throughout Scripture."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -303,7 +303,7 @@ async def biblical_prophets_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/biblical-prophets/{prophet_slug}", response_class=HTMLResponse)
|
@router.get("/biblical-prophets/{prophet_slug}", response_class=HTMLResponse)
|
||||||
def prophet_detail(request: Request, prophet_slug: str):
|
async def prophet_detail(request: Request, prophet_slug: str):
|
||||||
"""Individual biblical prophets detail page."""
|
"""Individual biblical prophets detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -331,7 +331,7 @@ async def prophet_detail_pdf(prophet_slug: str):
|
|||||||
# NAMES OF GOD
|
# NAMES OF GOD
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/names-of-god", response_class=HTMLResponse)
|
@router.get("/names-of-god", response_class=HTMLResponse)
|
||||||
def names_of_god_page(request: Request):
|
async def names_of_god_page(request: Request):
|
||||||
"""Names of God page exploring divine names throughout Scripture."""
|
"""Names of God page exploring divine names throughout Scripture."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -360,7 +360,7 @@ async def names_of_god_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/names-of-god/{name_slug}", response_class=HTMLResponse)
|
@router.get("/names-of-god/{name_slug}", response_class=HTMLResponse)
|
||||||
def name_of_god_detail(request: Request, name_slug: str):
|
async def name_of_god_detail(request: Request, name_slug: str):
|
||||||
"""Individual name of God detail page."""
|
"""Individual name of God detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -388,7 +388,7 @@ async def name_of_god_detail_pdf(name_slug: str):
|
|||||||
# PARABLES
|
# PARABLES
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/parables", response_class=HTMLResponse)
|
@router.get("/parables", response_class=HTMLResponse)
|
||||||
def parables_page(request: Request):
|
async def parables_page(request: Request):
|
||||||
"""Parables of Jesus page."""
|
"""Parables of Jesus page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -426,7 +426,7 @@ async def parables_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/parables/{parable_slug}", response_class=HTMLResponse)
|
@router.get("/parables/{parable_slug}", response_class=HTMLResponse)
|
||||||
def parable_detail(request: Request, parable_slug: str):
|
async def parable_detail(request: Request, parable_slug: str):
|
||||||
"""Individual parable detail page."""
|
"""Individual parable detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -454,7 +454,7 @@ async def parable_detail_pdf(parable_slug: str):
|
|||||||
# BIBLICAL COVENANTS
|
# BIBLICAL COVENANTS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/biblical-covenants", response_class=HTMLResponse)
|
@router.get("/biblical-covenants", response_class=HTMLResponse)
|
||||||
def biblical_covenants_page(request: Request):
|
async def biblical_covenants_page(request: Request):
|
||||||
"""Biblical covenants page."""
|
"""Biblical covenants page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -483,7 +483,7 @@ async def biblical_covenants_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/biblical-covenants/{covenant_slug}", response_class=HTMLResponse)
|
@router.get("/biblical-covenants/{covenant_slug}", response_class=HTMLResponse)
|
||||||
def covenant_detail(request: Request, covenant_slug: str):
|
async def covenant_detail(request: Request, covenant_slug: str):
|
||||||
"""Individual covenant detail page."""
|
"""Individual covenant detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -511,7 +511,7 @@ async def covenant_detail_pdf(covenant_slug: str):
|
|||||||
# THE TWELVE APOSTLES
|
# THE TWELVE APOSTLES
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/the-twelve-apostles", response_class=HTMLResponse)
|
@router.get("/the-twelve-apostles", response_class=HTMLResponse)
|
||||||
def apostles_page(request: Request):
|
async def apostles_page(request: Request):
|
||||||
"""The Twelve Apostles page."""
|
"""The Twelve Apostles page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -549,7 +549,7 @@ async def apostles_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/the-twelve-apostles/{apostle_slug}", response_class=HTMLResponse)
|
@router.get("/the-twelve-apostles/{apostle_slug}", response_class=HTMLResponse)
|
||||||
def apostle_detail(request: Request, apostle_slug: str):
|
async def apostle_detail(request: Request, apostle_slug: str):
|
||||||
"""Individual apostle detail page."""
|
"""Individual apostle detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -577,7 +577,7 @@ async def apostle_detail_pdf(apostle_slug: str):
|
|||||||
# WOMEN OF THE BIBLE
|
# WOMEN OF THE BIBLE
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/women-of-the-bible", response_class=HTMLResponse)
|
@router.get("/women-of-the-bible", response_class=HTMLResponse)
|
||||||
def women_of_the_bible_page(request: Request):
|
async def women_of_the_bible_page(request: Request):
|
||||||
"""Women of the Bible page."""
|
"""Women of the Bible page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -606,7 +606,7 @@ async def women_of_the_bible_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/women-of-the-bible/{woman_slug}", response_class=HTMLResponse)
|
@router.get("/women-of-the-bible/{woman_slug}", response_class=HTMLResponse)
|
||||||
def woman_detail(request: Request, woman_slug: str):
|
async def woman_detail(request: Request, woman_slug: str):
|
||||||
"""Individual woman of the Bible detail page."""
|
"""Individual woman of the Bible detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -634,7 +634,7 @@ async def woman_detail_pdf(woman_slug: str):
|
|||||||
# BIBLICAL FESTIVALS
|
# BIBLICAL FESTIVALS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/biblical-festivals", response_class=HTMLResponse)
|
@router.get("/biblical-festivals", response_class=HTMLResponse)
|
||||||
def biblical_festivals_page(request: Request):
|
async def biblical_festivals_page(request: Request):
|
||||||
"""Biblical festivals page."""
|
"""Biblical festivals page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -663,7 +663,7 @@ async def biblical_festivals_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/biblical-festivals/{festival_slug}", response_class=HTMLResponse)
|
@router.get("/biblical-festivals/{festival_slug}", response_class=HTMLResponse)
|
||||||
def festival_detail(request: Request, festival_slug: str):
|
async def festival_detail(request: Request, festival_slug: str):
|
||||||
"""Individual biblical festival detail page."""
|
"""Individual biblical festival detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -691,7 +691,7 @@ async def festival_detail_pdf(festival_slug: str):
|
|||||||
# FRUITS OF THE SPIRIT
|
# FRUITS OF THE SPIRIT
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/fruits-of-the-spirit", response_class=HTMLResponse)
|
@router.get("/fruits-of-the-spirit", response_class=HTMLResponse)
|
||||||
def fruits_of_the_spirit_page(request: Request):
|
async def fruits_of_the_spirit_page(request: Request):
|
||||||
"""Fruits of the Spirit page."""
|
"""Fruits of the Spirit page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -720,7 +720,7 @@ async def fruits_of_the_spirit_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/fruits-of-the-spirit/{fruit_slug}", response_class=HTMLResponse)
|
@router.get("/fruits-of-the-spirit/{fruit_slug}", response_class=HTMLResponse)
|
||||||
def fruit_detail(request: Request, fruit_slug: str):
|
async def fruit_detail(request: Request, fruit_slug: str):
|
||||||
"""Individual fruit of the Spirit detail page."""
|
"""Individual fruit of the Spirit detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -790,7 +790,7 @@ TETRAGRAMMATON_CONTENT = {
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/tetragrammaton", response_class=HTMLResponse)
|
@router.get("/tetragrammaton", response_class=HTMLResponse)
|
||||||
def tetragrammaton_page(request: Request):
|
async def tetragrammaton_page(request: Request):
|
||||||
"""The sacred Tetragrammaton - YHWH."""
|
"""The sacred Tetragrammaton - YHWH."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -831,7 +831,7 @@ async def tetragrammaton_pdf():
|
|||||||
# MIRACLES OF JESUS
|
# MIRACLES OF JESUS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/miracles-of-jesus", response_class=HTMLResponse)
|
@router.get("/miracles-of-jesus", response_class=HTMLResponse)
|
||||||
def miracles_page(request: Request):
|
async def miracles_page(request: Request):
|
||||||
"""Miracles of Jesus page."""
|
"""Miracles of Jesus page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -864,7 +864,7 @@ async def miracles_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/miracles-of-jesus/{miracle_slug}", response_class=HTMLResponse)
|
@router.get("/miracles-of-jesus/{miracle_slug}", response_class=HTMLResponse)
|
||||||
def miracle_detail(request: Request, miracle_slug: str):
|
async def miracle_detail(request: Request, miracle_slug: str):
|
||||||
"""Individual miracle detail page."""
|
"""Individual miracle detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -892,7 +892,7 @@ async def miracle_detail_pdf(miracle_slug: str):
|
|||||||
# PRAYERS OF THE BIBLE
|
# PRAYERS OF THE BIBLE
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/prayers-of-the-bible", response_class=HTMLResponse)
|
@router.get("/prayers-of-the-bible", response_class=HTMLResponse)
|
||||||
def prayers_page(request: Request):
|
async def prayers_page(request: Request):
|
||||||
"""Prayers of the Bible page."""
|
"""Prayers of the Bible page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -925,7 +925,7 @@ async def prayers_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/prayers-of-the-bible/{prayer_slug}", response_class=HTMLResponse)
|
@router.get("/prayers-of-the-bible/{prayer_slug}", response_class=HTMLResponse)
|
||||||
def prayer_detail(request: Request, prayer_slug: str):
|
async def prayer_detail(request: Request, prayer_slug: str):
|
||||||
"""Individual prayer detail page."""
|
"""Individual prayer detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -953,7 +953,7 @@ async def prayer_detail_pdf(prayer_slug: str):
|
|||||||
# THE BEATITUDES
|
# THE BEATITUDES
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/beatitudes", response_class=HTMLResponse)
|
@router.get("/beatitudes", response_class=HTMLResponse)
|
||||||
def beatitudes_page(request: Request):
|
async def beatitudes_page(request: Request):
|
||||||
"""The Beatitudes page."""
|
"""The Beatitudes page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -986,7 +986,7 @@ async def beatitudes_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/beatitudes/{beatitude_slug}", response_class=HTMLResponse)
|
@router.get("/beatitudes/{beatitude_slug}", response_class=HTMLResponse)
|
||||||
def beatitude_detail(request: Request, beatitude_slug: str):
|
async def beatitude_detail(request: Request, beatitude_slug: str):
|
||||||
"""Individual beatitude detail page."""
|
"""Individual beatitude detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1014,7 +1014,7 @@ async def beatitude_detail_pdf(beatitude_slug: str):
|
|||||||
# THE TEN COMMANDMENTS
|
# THE TEN COMMANDMENTS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/ten-commandments", response_class=HTMLResponse)
|
@router.get("/ten-commandments", response_class=HTMLResponse)
|
||||||
def ten_commandments_page(request: Request):
|
async def ten_commandments_page(request: Request):
|
||||||
"""The Ten Commandments page."""
|
"""The Ten Commandments page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1047,7 +1047,7 @@ async def ten_commandments_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/ten-commandments/{commandment_slug}", response_class=HTMLResponse)
|
@router.get("/ten-commandments/{commandment_slug}", response_class=HTMLResponse)
|
||||||
def commandment_detail(request: Request, commandment_slug: str):
|
async def commandment_detail(request: Request, commandment_slug: str):
|
||||||
"""Individual commandment detail page."""
|
"""Individual commandment detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1075,7 +1075,7 @@ async def commandment_detail_pdf(commandment_slug: str):
|
|||||||
# THE ARMOR OF GOD
|
# THE ARMOR OF GOD
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/armor-of-god", response_class=HTMLResponse)
|
@router.get("/armor-of-god", response_class=HTMLResponse)
|
||||||
def armor_of_god_page(request: Request):
|
async def armor_of_god_page(request: Request):
|
||||||
"""The Armor of God page."""
|
"""The Armor of God page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1108,7 +1108,7 @@ async def armor_of_god_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/armor-of-god/{armor_slug}", response_class=HTMLResponse)
|
@router.get("/armor-of-god/{armor_slug}", response_class=HTMLResponse)
|
||||||
def armor_detail(request: Request, armor_slug: str):
|
async def armor_detail(request: Request, armor_slug: str):
|
||||||
"""Individual armor piece detail page."""
|
"""Individual armor piece detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1136,7 +1136,7 @@ async def armor_detail_pdf(armor_slug: str):
|
|||||||
# I AM STATEMENTS OF JESUS
|
# I AM STATEMENTS OF JESUS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/i-am-statements", response_class=HTMLResponse)
|
@router.get("/i-am-statements", response_class=HTMLResponse)
|
||||||
def i_am_statements_page(request: Request):
|
async def i_am_statements_page(request: Request):
|
||||||
"""I Am Statements of Jesus page."""
|
"""I Am Statements of Jesus page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1169,7 +1169,7 @@ async def i_am_statements_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/i-am-statements/{statement_slug}", response_class=HTMLResponse)
|
@router.get("/i-am-statements/{statement_slug}", response_class=HTMLResponse)
|
||||||
def i_am_statement_detail(request: Request, statement_slug: str):
|
async def i_am_statement_detail(request: Request, statement_slug: str):
|
||||||
"""Individual I Am statement detail page."""
|
"""Individual I Am statement detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1197,7 +1197,7 @@ async def i_am_statement_detail_pdf(statement_slug: str):
|
|||||||
# THE TRINITY
|
# THE TRINITY
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/trinity", response_class=HTMLResponse)
|
@router.get("/trinity", response_class=HTMLResponse)
|
||||||
def trinity_page(request: Request):
|
async def trinity_page(request: Request):
|
||||||
"""The Trinity - doctrine of God page."""
|
"""The Trinity - doctrine of God page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1230,7 +1230,7 @@ async def trinity_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/trinity/{item_slug}", response_class=HTMLResponse)
|
@router.get("/trinity/{item_slug}", response_class=HTMLResponse)
|
||||||
def trinity_detail(request: Request, item_slug: str):
|
async def trinity_detail(request: Request, item_slug: str):
|
||||||
"""Individual Trinity topic detail page."""
|
"""Individual Trinity topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1258,7 +1258,7 @@ async def trinity_detail_pdf(item_slug: str):
|
|||||||
# CHRISTOLOGY
|
# CHRISTOLOGY
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/christology", response_class=HTMLResponse)
|
@router.get("/christology", response_class=HTMLResponse)
|
||||||
def christology_page(request: Request):
|
async def christology_page(request: Request):
|
||||||
"""Christology - the doctrine of Christ page."""
|
"""Christology - the doctrine of Christ page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1291,7 +1291,7 @@ async def christology_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/christology/{item_slug}", response_class=HTMLResponse)
|
@router.get("/christology/{item_slug}", response_class=HTMLResponse)
|
||||||
def christology_detail(request: Request, item_slug: str):
|
async def christology_detail(request: Request, item_slug: str):
|
||||||
"""Individual Christology topic detail page."""
|
"""Individual Christology topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1319,7 +1319,7 @@ async def christology_detail_pdf(item_slug: str):
|
|||||||
# SOTERIOLOGY
|
# SOTERIOLOGY
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/soteriology", response_class=HTMLResponse)
|
@router.get("/soteriology", response_class=HTMLResponse)
|
||||||
def soteriology_page(request: Request):
|
async def soteriology_page(request: Request):
|
||||||
"""Soteriology - the doctrine of salvation page."""
|
"""Soteriology - the doctrine of salvation page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1352,7 +1352,7 @@ async def soteriology_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/soteriology/{item_slug}", response_class=HTMLResponse)
|
@router.get("/soteriology/{item_slug}", response_class=HTMLResponse)
|
||||||
def soteriology_detail(request: Request, item_slug: str):
|
async def soteriology_detail(request: Request, item_slug: str):
|
||||||
"""Individual Soteriology topic detail page."""
|
"""Individual Soteriology topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1380,7 +1380,7 @@ async def soteriology_detail_pdf(item_slug: str):
|
|||||||
# PNEUMATOLOGY
|
# PNEUMATOLOGY
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/pneumatology", response_class=HTMLResponse)
|
@router.get("/pneumatology", response_class=HTMLResponse)
|
||||||
def pneumatology_page(request: Request):
|
async def pneumatology_page(request: Request):
|
||||||
"""Pneumatology - the doctrine of the Holy Spirit page."""
|
"""Pneumatology - the doctrine of the Holy Spirit page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1413,7 +1413,7 @@ async def pneumatology_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/pneumatology/{item_slug}", response_class=HTMLResponse)
|
@router.get("/pneumatology/{item_slug}", response_class=HTMLResponse)
|
||||||
def pneumatology_detail(request: Request, item_slug: str):
|
async def pneumatology_detail(request: Request, item_slug: str):
|
||||||
"""Individual Pneumatology topic detail page."""
|
"""Individual Pneumatology topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1441,7 +1441,7 @@ async def pneumatology_detail_pdf(item_slug: str):
|
|||||||
# ESCHATOLOGY
|
# ESCHATOLOGY
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/eschatology", response_class=HTMLResponse)
|
@router.get("/eschatology", response_class=HTMLResponse)
|
||||||
def eschatology_page(request: Request):
|
async def eschatology_page(request: Request):
|
||||||
"""Eschatology - the doctrine of last things page."""
|
"""Eschatology - the doctrine of last things page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1474,7 +1474,7 @@ async def eschatology_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/eschatology/{item_slug}", response_class=HTMLResponse)
|
@router.get("/eschatology/{item_slug}", response_class=HTMLResponse)
|
||||||
def eschatology_detail(request: Request, item_slug: str):
|
async def eschatology_detail(request: Request, item_slug: str):
|
||||||
"""Individual Eschatology topic detail page."""
|
"""Individual Eschatology topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1502,7 +1502,7 @@ async def eschatology_detail_pdf(item_slug: str):
|
|||||||
# ECCLESIOLOGY
|
# ECCLESIOLOGY
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/ecclesiology", response_class=HTMLResponse)
|
@router.get("/ecclesiology", response_class=HTMLResponse)
|
||||||
def ecclesiology_page(request: Request):
|
async def ecclesiology_page(request: Request):
|
||||||
"""Ecclesiology - the doctrine of the church page."""
|
"""Ecclesiology - the doctrine of the church page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1535,7 +1535,7 @@ async def ecclesiology_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/ecclesiology/{item_slug}", response_class=HTMLResponse)
|
@router.get("/ecclesiology/{item_slug}", response_class=HTMLResponse)
|
||||||
def ecclesiology_detail(request: Request, item_slug: str):
|
async def ecclesiology_detail(request: Request, item_slug: str):
|
||||||
"""Individual Ecclesiology topic detail page."""
|
"""Individual Ecclesiology topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1563,7 +1563,7 @@ async def ecclesiology_detail_pdf(item_slug: str):
|
|||||||
# TYPES AND SHADOWS OF CHRIST
|
# TYPES AND SHADOWS OF CHRIST
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/types-and-shadows", response_class=HTMLResponse)
|
@router.get("/types-and-shadows", response_class=HTMLResponse)
|
||||||
def types_and_shadows_page(request: Request):
|
async def types_and_shadows_page(request: Request):
|
||||||
"""Types and Shadows of Christ page."""
|
"""Types and Shadows of Christ page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1596,7 +1596,7 @@ async def types_and_shadows_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/types-and-shadows/{item_slug}", response_class=HTMLResponse)
|
@router.get("/types-and-shadows/{item_slug}", response_class=HTMLResponse)
|
||||||
def types_and_shadows_detail(request: Request, item_slug: str):
|
async def types_and_shadows_detail(request: Request, item_slug: str):
|
||||||
"""Individual Types and Shadows topic detail page."""
|
"""Individual Types and Shadows topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1624,7 +1624,7 @@ async def types_and_shadows_detail_pdf(item_slug: str):
|
|||||||
# MESSIANIC PROPHECIES
|
# MESSIANIC PROPHECIES
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/messianic-prophecies", response_class=HTMLResponse)
|
@router.get("/messianic-prophecies", response_class=HTMLResponse)
|
||||||
def messianic_prophecies_page(request: Request):
|
async def messianic_prophecies_page(request: Request):
|
||||||
"""Messianic Prophecies page."""
|
"""Messianic Prophecies page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1657,7 +1657,7 @@ async def messianic_prophecies_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/messianic-prophecies/{item_slug}", response_class=HTMLResponse)
|
@router.get("/messianic-prophecies/{item_slug}", response_class=HTMLResponse)
|
||||||
def messianic_prophecies_detail(request: Request, item_slug: str):
|
async def messianic_prophecies_detail(request: Request, item_slug: str):
|
||||||
"""Individual Messianic Prophecy topic detail page."""
|
"""Individual Messianic Prophecy topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1685,7 +1685,7 @@ async def messianic_prophecies_detail_pdf(item_slug: str):
|
|||||||
# THE BLOOD IN SCRIPTURE
|
# THE BLOOD IN SCRIPTURE
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/blood-in-scripture", response_class=HTMLResponse)
|
@router.get("/blood-in-scripture", response_class=HTMLResponse)
|
||||||
def blood_in_scripture_page(request: Request):
|
async def blood_in_scripture_page(request: Request):
|
||||||
"""The Blood in Scripture page."""
|
"""The Blood in Scripture page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1718,7 +1718,7 @@ async def blood_in_scripture_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/blood-in-scripture/{item_slug}", response_class=HTMLResponse)
|
@router.get("/blood-in-scripture/{item_slug}", response_class=HTMLResponse)
|
||||||
def blood_in_scripture_detail(request: Request, item_slug: str):
|
async def blood_in_scripture_detail(request: Request, item_slug: str):
|
||||||
"""Individual Blood in Scripture topic detail page."""
|
"""Individual Blood in Scripture topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1746,7 +1746,7 @@ async def blood_in_scripture_detail_pdf(item_slug: str):
|
|||||||
# THE KINGDOM OF GOD
|
# THE KINGDOM OF GOD
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/kingdom-of-god", response_class=HTMLResponse)
|
@router.get("/kingdom-of-god", response_class=HTMLResponse)
|
||||||
def kingdom_of_god_page(request: Request):
|
async def kingdom_of_god_page(request: Request):
|
||||||
"""The Kingdom of God page."""
|
"""The Kingdom of God page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1779,7 +1779,7 @@ async def kingdom_of_god_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/kingdom-of-god/{item_slug}", response_class=HTMLResponse)
|
@router.get("/kingdom-of-god/{item_slug}", response_class=HTMLResponse)
|
||||||
def kingdom_of_god_detail(request: Request, item_slug: str):
|
async def kingdom_of_god_detail(request: Request, item_slug: str):
|
||||||
"""Individual Kingdom of God topic detail page."""
|
"""Individual Kingdom of God topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1807,7 +1807,7 @@ async def kingdom_of_god_detail_pdf(item_slug: str):
|
|||||||
# NAMES AND TITLES OF CHRIST
|
# NAMES AND TITLES OF CHRIST
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/names-of-christ", response_class=HTMLResponse)
|
@router.get("/names-of-christ", response_class=HTMLResponse)
|
||||||
def names_of_christ_page(request: Request):
|
async def names_of_christ_page(request: Request):
|
||||||
"""Names and Titles of Christ page."""
|
"""Names and Titles of Christ page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1840,7 +1840,7 @@ async def names_of_christ_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/names-of-christ/{item_slug}", response_class=HTMLResponse)
|
@router.get("/names-of-christ/{item_slug}", response_class=HTMLResponse)
|
||||||
def names_of_christ_detail(request: Request, item_slug: str):
|
async def names_of_christ_detail(request: Request, item_slug: str):
|
||||||
"""Individual Names of Christ topic detail page."""
|
"""Individual Names of Christ topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1868,7 +1868,7 @@ async def names_of_christ_detail_pdf(item_slug: str):
|
|||||||
# SPIRITS AND DEMONS
|
# SPIRITS AND DEMONS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/spirits-and-demons", response_class=HTMLResponse)
|
@router.get("/spirits-and-demons", response_class=HTMLResponse)
|
||||||
def spirits_and_demons_page(request: Request):
|
async def spirits_and_demons_page(request: Request):
|
||||||
"""Spirits and Demons - biblical demonology page."""
|
"""Spirits and Demons - biblical demonology page."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1901,7 +1901,7 @@ async def spirits_and_demons_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/spirits-and-demons/{item_slug}", response_class=HTMLResponse)
|
@router.get("/spirits-and-demons/{item_slug}", response_class=HTMLResponse)
|
||||||
def spirits_and_demons_detail(request: Request, item_slug: str):
|
async def spirits_and_demons_detail(request: Request, item_slug: str):
|
||||||
"""Individual Spirits and Demons topic detail page."""
|
"""Individual Spirits and Demons topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1929,7 +1929,7 @@ async def spirits_and_demons_detail_pdf(item_slug: str):
|
|||||||
# PERSONIFICATIONS IN SCRIPTURE
|
# PERSONIFICATIONS IN SCRIPTURE
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/personifications", response_class=HTMLResponse)
|
@router.get("/personifications", response_class=HTMLResponse)
|
||||||
def personifications_page(request: Request):
|
async def personifications_page(request: Request):
|
||||||
"""Personifications in Scripture - abstract concepts given human form."""
|
"""Personifications in Scripture - abstract concepts given human form."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -1962,7 +1962,7 @@ async def personifications_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/personifications/{item_slug}", response_class=HTMLResponse)
|
@router.get("/personifications/{item_slug}", response_class=HTMLResponse)
|
||||||
def personifications_detail(request: Request, item_slug: str):
|
async def personifications_detail(request: Request, item_slug: str):
|
||||||
"""Individual Personification topic detail page."""
|
"""Individual Personification topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -1990,7 +1990,7 @@ async def personifications_detail_pdf(item_slug: str):
|
|||||||
# BIBLIOLOGY - THE DOCTRINE OF SCRIPTURE
|
# BIBLIOLOGY - THE DOCTRINE OF SCRIPTURE
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/bibliology", response_class=HTMLResponse)
|
@router.get("/bibliology", response_class=HTMLResponse)
|
||||||
def bibliology_page(request: Request):
|
async def bibliology_page(request: Request):
|
||||||
"""Bibliology - The Doctrine of Scripture."""
|
"""Bibliology - The Doctrine of Scripture."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -2023,7 +2023,7 @@ async def bibliology_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/bibliology/{item_slug}", response_class=HTMLResponse)
|
@router.get("/bibliology/{item_slug}", response_class=HTMLResponse)
|
||||||
def bibliology_detail(request: Request, item_slug: str):
|
async def bibliology_detail(request: Request, item_slug: str):
|
||||||
"""Individual Bibliology topic detail page."""
|
"""Individual Bibliology topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -2051,7 +2051,7 @@ async def bibliology_detail_pdf(item_slug: str):
|
|||||||
# THEOLOGY PROPER - THE ATTRIBUTES OF GOD
|
# THEOLOGY PROPER - THE ATTRIBUTES OF GOD
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/theology-proper", response_class=HTMLResponse)
|
@router.get("/theology-proper", response_class=HTMLResponse)
|
||||||
def theology_proper_page(request: Request):
|
async def theology_proper_page(request: Request):
|
||||||
"""Theology Proper - The Attributes of God."""
|
"""Theology Proper - The Attributes of God."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -2084,7 +2084,7 @@ async def theology_proper_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/theology-proper/{item_slug}", response_class=HTMLResponse)
|
@router.get("/theology-proper/{item_slug}", response_class=HTMLResponse)
|
||||||
def theology_proper_detail(request: Request, item_slug: str):
|
async def theology_proper_detail(request: Request, item_slug: str):
|
||||||
"""Individual Theology Proper topic detail page."""
|
"""Individual Theology Proper topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -2112,7 +2112,7 @@ async def theology_proper_detail_pdf(item_slug: str):
|
|||||||
# ANTHROPOLOGY - THE DOCTRINE OF MAN
|
# ANTHROPOLOGY - THE DOCTRINE OF MAN
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/anthropology", response_class=HTMLResponse)
|
@router.get("/anthropology", response_class=HTMLResponse)
|
||||||
def anthropology_page(request: Request):
|
async def anthropology_page(request: Request):
|
||||||
"""Anthropology - The Doctrine of Man."""
|
"""Anthropology - The Doctrine of Man."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -2145,7 +2145,7 @@ async def anthropology_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/anthropology/{item_slug}", response_class=HTMLResponse)
|
@router.get("/anthropology/{item_slug}", response_class=HTMLResponse)
|
||||||
def anthropology_detail(request: Request, item_slug: str):
|
async def anthropology_detail(request: Request, item_slug: str):
|
||||||
"""Individual Anthropology topic detail page."""
|
"""Individual Anthropology topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -2173,7 +2173,7 @@ async def anthropology_detail_pdf(item_slug: str):
|
|||||||
# HAMARTIOLOGY - THE DOCTRINE OF SIN
|
# HAMARTIOLOGY - THE DOCTRINE OF SIN
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/hamartiology", response_class=HTMLResponse)
|
@router.get("/hamartiology", response_class=HTMLResponse)
|
||||||
def hamartiology_page(request: Request):
|
async def hamartiology_page(request: Request):
|
||||||
"""Hamartiology - The Doctrine of Sin."""
|
"""Hamartiology - The Doctrine of Sin."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -2206,7 +2206,7 @@ async def hamartiology_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/hamartiology/{item_slug}", response_class=HTMLResponse)
|
@router.get("/hamartiology/{item_slug}", response_class=HTMLResponse)
|
||||||
def hamartiology_detail(request: Request, item_slug: str):
|
async def hamartiology_detail(request: Request, item_slug: str):
|
||||||
"""Individual Hamartiology topic detail page."""
|
"""Individual Hamartiology topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -2234,7 +2234,7 @@ async def hamartiology_detail_pdf(item_slug: str):
|
|||||||
# PROVIDENCE - DIVINE PROVIDENCE
|
# PROVIDENCE - DIVINE PROVIDENCE
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/providence", response_class=HTMLResponse)
|
@router.get("/providence", response_class=HTMLResponse)
|
||||||
def providence_page(request: Request):
|
async def providence_page(request: Request):
|
||||||
"""Providence - Divine Providence."""
|
"""Providence - Divine Providence."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -2267,7 +2267,7 @@ async def providence_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/providence/{item_slug}", response_class=HTMLResponse)
|
@router.get("/providence/{item_slug}", response_class=HTMLResponse)
|
||||||
def providence_detail(request: Request, item_slug: str):
|
async def providence_detail(request: Request, item_slug: str):
|
||||||
"""Individual Providence topic detail page."""
|
"""Individual Providence topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -2295,7 +2295,7 @@ async def providence_detail_pdf(item_slug: str):
|
|||||||
# GRACE - THE DOCTRINE OF GRACE
|
# GRACE - THE DOCTRINE OF GRACE
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/grace", response_class=HTMLResponse)
|
@router.get("/grace", response_class=HTMLResponse)
|
||||||
def grace_page(request: Request):
|
async def grace_page(request: Request):
|
||||||
"""Grace - The Doctrine of Grace."""
|
"""Grace - The Doctrine of Grace."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -2328,7 +2328,7 @@ async def grace_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/grace/{item_slug}", response_class=HTMLResponse)
|
@router.get("/grace/{item_slug}", response_class=HTMLResponse)
|
||||||
def grace_detail(request: Request, item_slug: str):
|
async def grace_detail(request: Request, item_slug: str):
|
||||||
"""Individual Grace topic detail page."""
|
"""Individual Grace topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -2356,7 +2356,7 @@ async def grace_detail_pdf(item_slug: str):
|
|||||||
# JUSTIFICATION - THE DOCTRINE OF JUSTIFICATION
|
# JUSTIFICATION - THE DOCTRINE OF JUSTIFICATION
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/justification", response_class=HTMLResponse)
|
@router.get("/justification", response_class=HTMLResponse)
|
||||||
def justification_page(request: Request):
|
async def justification_page(request: Request):
|
||||||
"""Justification - The Doctrine of Justification."""
|
"""Justification - The Doctrine of Justification."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -2389,7 +2389,7 @@ async def justification_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/justification/{item_slug}", response_class=HTMLResponse)
|
@router.get("/justification/{item_slug}", response_class=HTMLResponse)
|
||||||
def justification_detail(request: Request, item_slug: str):
|
async def justification_detail(request: Request, item_slug: str):
|
||||||
"""Individual Justification topic detail page."""
|
"""Individual Justification topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -2417,7 +2417,7 @@ async def justification_detail_pdf(item_slug: str):
|
|||||||
# SANCTIFICATION - THE DOCTRINE OF SANCTIFICATION
|
# SANCTIFICATION - THE DOCTRINE OF SANCTIFICATION
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/sanctification", response_class=HTMLResponse)
|
@router.get("/sanctification", response_class=HTMLResponse)
|
||||||
def sanctification_page(request: Request):
|
async def sanctification_page(request: Request):
|
||||||
"""Sanctification - The Doctrine of Sanctification."""
|
"""Sanctification - The Doctrine of Sanctification."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -2450,7 +2450,7 @@ async def sanctification_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/sanctification/{item_slug}", response_class=HTMLResponse)
|
@router.get("/sanctification/{item_slug}", response_class=HTMLResponse)
|
||||||
def sanctification_detail(request: Request, item_slug: str):
|
async def sanctification_detail(request: Request, item_slug: str):
|
||||||
"""Individual Sanctification topic detail page."""
|
"""Individual Sanctification topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -2478,7 +2478,7 @@ async def sanctification_detail_pdf(item_slug: str):
|
|||||||
# LAW AND GOSPEL
|
# LAW AND GOSPEL
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/law-and-gospel", response_class=HTMLResponse)
|
@router.get("/law-and-gospel", response_class=HTMLResponse)
|
||||||
def law_and_gospel_page(request: Request):
|
async def law_and_gospel_page(request: Request):
|
||||||
"""Law and Gospel - The Doctrine of Law and Gospel."""
|
"""Law and Gospel - The Doctrine of Law and Gospel."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -2511,7 +2511,7 @@ async def law_and_gospel_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/law-and-gospel/{item_slug}", response_class=HTMLResponse)
|
@router.get("/law-and-gospel/{item_slug}", response_class=HTMLResponse)
|
||||||
def law_and_gospel_detail(request: Request, item_slug: str):
|
async def law_and_gospel_detail(request: Request, item_slug: str):
|
||||||
"""Individual Law and Gospel topic detail page."""
|
"""Individual Law and Gospel topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
@@ -2539,7 +2539,7 @@ async def law_and_gospel_detail_pdf(item_slug: str):
|
|||||||
# WORSHIP - THE DOCTRINE OF WORSHIP
|
# WORSHIP - THE DOCTRINE OF WORSHIP
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@router.get("/worship", response_class=HTMLResponse)
|
@router.get("/worship", response_class=HTMLResponse)
|
||||||
def worship_page(request: Request):
|
async def worship_page(request: Request):
|
||||||
"""Worship - The Doctrine of Worship."""
|
"""Worship - The Doctrine of Worship."""
|
||||||
return templates.TemplateResponse(
|
return templates.TemplateResponse(
|
||||||
request,
|
request,
|
||||||
@@ -2572,7 +2572,7 @@ async def worship_page_pdf():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/worship/{item_slug}", response_class=HTMLResponse)
|
@router.get("/worship/{item_slug}", response_class=HTMLResponse)
|
||||||
def worship_detail(request: Request, item_slug: str):
|
async def worship_detail(request: Request, item_slug: str):
|
||||||
"""Individual Worship topic detail page."""
|
"""Individual Worship topic detail page."""
|
||||||
return _resource_detail_response(
|
return _resource_detail_response(
|
||||||
request,
|
request,
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ def get_books():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/stories", response_class=HTMLResponse)
|
@router.get("/stories", response_class=HTMLResponse)
|
||||||
def stories_index(request: Request):
|
async def stories_index(request: Request):
|
||||||
"""Bible stories index page - shows all categories and stories."""
|
"""Bible stories index page - shows all categories and stories."""
|
||||||
books = get_books()
|
books = get_books()
|
||||||
categories = get_categories()
|
categories = get_categories()
|
||||||
@@ -55,7 +55,7 @@ def stories_index(request: Request):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/stories/kids", response_class=HTMLResponse)
|
@router.get("/stories/kids", response_class=HTMLResponse)
|
||||||
def stories_kids_index(request: Request):
|
async def stories_kids_index(request: Request):
|
||||||
"""Bible stories index page for kids - shows all categories and kid-friendly stories."""
|
"""Bible stories index page for kids - shows all categories and kid-friendly stories."""
|
||||||
books = get_books()
|
books = get_books()
|
||||||
categories = get_categories()
|
categories = get_categories()
|
||||||
@@ -141,7 +141,7 @@ async def story_kids_pdf(request: Request, slug: str):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/stories/{slug}", response_class=HTMLResponse)
|
@router.get("/stories/{slug}", response_class=HTMLResponse)
|
||||||
def story_detail(request: Request, slug: str):
|
async def story_detail(request: Request, slug: str):
|
||||||
"""Individual story page (adult version)."""
|
"""Individual story page (adult version)."""
|
||||||
books = get_books()
|
books = get_books()
|
||||||
story = get_story_by_slug(slug)
|
story = get_story_by_slug(slug)
|
||||||
@@ -181,7 +181,7 @@ def story_detail(request: Request, slug: str):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/stories/{slug}/kids", response_class=HTMLResponse)
|
@router.get("/stories/{slug}/kids", response_class=HTMLResponse)
|
||||||
def story_kids(request: Request, slug: str):
|
async def story_kids(request: Request, slug: str):
|
||||||
"""Individual story page (kids version)."""
|
"""Individual story page (kids version)."""
|
||||||
books = get_books()
|
books = get_books()
|
||||||
story = get_story_by_slug(slug)
|
story = get_story_by_slug(slug)
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ def _attach_verse_texts(guide: dict):
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/study-guides", response_class=HTMLResponse)
|
@router.get("/study-guides", response_class=HTMLResponse)
|
||||||
def study_guides_page(request: Request):
|
async def study_guides_page(request: Request):
|
||||||
"""Study guides main page"""
|
"""Study guides main page"""
|
||||||
books = get_books()
|
books = get_books()
|
||||||
|
|
||||||
@@ -154,7 +154,7 @@ def study_guides_page(request: Request):
|
|||||||
)
|
)
|
||||||
|
|
||||||
@router.get("/study-guides/{slug}", response_class=HTMLResponse)
|
@router.get("/study-guides/{slug}", response_class=HTMLResponse)
|
||||||
def study_guide_detail(request: Request, slug: str):
|
async def study_guide_detail(request: Request, slug: str):
|
||||||
"""Individual study guide page"""
|
"""Individual study guide page"""
|
||||||
books = get_books()
|
books = get_books()
|
||||||
|
|
||||||
|
|||||||
@@ -38,13 +38,13 @@ STUDY_GUIDE_SLUGS = _slugs["study_guides"]
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/health")
|
@router.get("/health")
|
||||||
def health_check():
|
async def health_check():
|
||||||
"""Health check endpoint for monitoring"""
|
"""Health check endpoint for monitoring"""
|
||||||
return {"status": "healthy", "service": "kjv-study"}
|
return {"status": "healthy", "service": "kjv-study"}
|
||||||
|
|
||||||
|
|
||||||
@router.get("/robots.txt", response_class=Response)
|
@router.get("/robots.txt", response_class=Response)
|
||||||
def robots_txt():
|
async def robots_txt():
|
||||||
"""Generate robots.txt for search engine crawlers"""
|
"""Generate robots.txt for search engine crawlers"""
|
||||||
robots_content = """User-agent: *
|
robots_content = """User-agent: *
|
||||||
Allow: /
|
Allow: /
|
||||||
@@ -60,7 +60,7 @@ Crawl-delay: 1
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/sitemap.xml", response_class=Response)
|
@router.get("/sitemap.xml", response_class=Response)
|
||||||
def sitemap_index():
|
async def sitemap_index():
|
||||||
"""Sitemap index - references main sitemap and static verse sitemap"""
|
"""Sitemap index - references main sitemap and static verse sitemap"""
|
||||||
base_url = "https://kjvstudy.org"
|
base_url = "https://kjvstudy.org"
|
||||||
current_date = datetime.now().strftime("%Y-%m-%d")
|
current_date = datetime.now().strftime("%Y-%m-%d")
|
||||||
@@ -81,7 +81,7 @@ def sitemap_index():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/sitemap-verses.xml")
|
@router.get("/sitemap-verses.xml")
|
||||||
def sitemap_verses():
|
async def sitemap_verses():
|
||||||
"""Serve static verse sitemap (31,102 verses, generated once)"""
|
"""Serve static verse sitemap (31,102 verses, generated once)"""
|
||||||
# Check if file exists
|
# Check if file exists
|
||||||
if not _VERSE_SITEMAP_PATH.exists():
|
if not _VERSE_SITEMAP_PATH.exists():
|
||||||
@@ -102,7 +102,7 @@ def sitemap_verses():
|
|||||||
|
|
||||||
|
|
||||||
@router.get("/sitemap-main.xml", response_class=Response)
|
@router.get("/sitemap-main.xml", response_class=Response)
|
||||||
def sitemap_main():
|
async def sitemap_main():
|
||||||
"""Generate main sitemap with all dynamic URLs (cached daily)"""
|
"""Generate main sitemap with all dynamic URLs (cached daily)"""
|
||||||
global _sitemap_cache, _sitemap_cache_date
|
global _sitemap_cache, _sitemap_cache_date
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user