85 lines
2 KiB
Python
85 lines
2 KiB
Python
|
"""
|
||
|
Router "text" provides:
|
||
|
|
||
|
- listing text files
|
||
|
- finding text files by name prefix
|
||
|
- getting text file raw content by name prefix
|
||
|
- getting text file HTML content by name prefix (using Markdown)
|
||
|
- getting the "ticker" raw content
|
||
|
- getting the "ticker" HTML content (using Markdown)
|
||
|
"""
|
||
|
|
||
|
from logging import getLogger
|
||
|
from typing import Iterator
|
||
|
|
||
|
from fastapi import APIRouter, Depends
|
||
|
from markdown import markdown
|
||
|
|
||
|
from ..config import Config
|
||
|
from ..dav_common import webdav_ensure_path
|
||
|
from ..dav_file import DavFile
|
||
|
from .text import text_lister, text_unique
|
||
|
|
||
|
_logger = getLogger(__name__)
|
||
|
|
||
|
router = APIRouter(prefix="/ticker", tags=["text"])
|
||
|
|
||
|
|
||
|
@router.on_event("startup")
|
||
|
async def start_router() -> None:
|
||
|
_logger.debug(f"{router.prefix} router starting.")
|
||
|
|
||
|
webdav_ensure_path(await text_lister.remote_path)
|
||
|
|
||
|
|
||
|
async def get_ticker_lines() -> Iterator[str]:
|
||
|
cfg = await Config.get()
|
||
|
file_name = await text_unique(cfg.ticker.file_name)
|
||
|
|
||
|
ticker = await DavFile(
|
||
|
f"{await text_lister.remote_path}/{file_name}",
|
||
|
).as_string
|
||
|
|
||
|
return (
|
||
|
line.strip()
|
||
|
for line in ticker.split("\n")
|
||
|
if line.strip()
|
||
|
)
|
||
|
|
||
|
|
||
|
async def get_ticker_content_lines(
|
||
|
ticker_lines: Iterator[str] = Depends(get_ticker_lines),
|
||
|
) -> Iterator[str]:
|
||
|
cfg = await Config.get()
|
||
|
|
||
|
return (
|
||
|
line
|
||
|
for line in ticker_lines
|
||
|
if not line.startswith(cfg.ticker.comment_marker)
|
||
|
)
|
||
|
|
||
|
|
||
|
async def get_ticker_content(
|
||
|
ticker_content_lines: Iterator[str] = Depends(get_ticker_content_lines),
|
||
|
) -> str:
|
||
|
cfg = await Config.get()
|
||
|
ticker_content = cfg.ticker.separator.join(
|
||
|
["", *ticker_content_lines, ""],
|
||
|
)
|
||
|
|
||
|
return ticker_content.strip()
|
||
|
|
||
|
|
||
|
@ router.get("/get/html")
|
||
|
async def get_ticker(
|
||
|
ticker_content: str = Depends(get_ticker_content),
|
||
|
) -> str:
|
||
|
return markdown(ticker_content)
|
||
|
|
||
|
|
||
|
@ router.get("/get/raw")
|
||
|
async def get_raw_ticker(
|
||
|
ticker_content: str = Depends(get_ticker_content),
|
||
|
) -> str:
|
||
|
return ticker_content
|