Compare commits

..

2 commits

Author SHA1 Message Date
83db799b96 ticker router 2022-09-08 23:44:03 +00:00
85327ce0b3 rename cal_aggregate -> aggregate 2022-09-08 23:39:42 +00:00
5 changed files with 97 additions and 65 deletions

View file

@ -7,13 +7,14 @@ This file: Main API router definition.
from fastapi import APIRouter
from ..settings import SETTINGS
from . import cal_aggregate, calendar, image, text
from . import aggregate, calendar, image, text, ticker
main_router = APIRouter(prefix=f"/{SETTINGS.api_v1_prefix}")
main_router.include_router(text.router)
main_router.include_router(ticker.router)
main_router.include_router(image.router)
main_router.include_router(calendar.router)
main_router.include_router(cal_aggregate.router)
main_router.include_router(aggregate.router)
__all__ = [
"main_router",

View file

@ -88,9 +88,9 @@ class CalendarNameLister:
@dataclass(frozen=True)
class CalAggregateLister:
class AggregateNameLister:
"""
Can be called to create an iterator containing CalAggregate names.
Can be called to create an iterator containing aggregate calendar names.
"""
async def __call__(self) -> Iterator[str]:

View file

@ -1,5 +1,5 @@
"""
Router "cal_aggregate" provides:
Router "aggregate" provides:
- listing aggregate calendars
- finding aggregate calendars by name prefix
@ -13,16 +13,16 @@ from fastapi import APIRouter, Depends
from ovdashboard_api.config import Config
from ..dav_calendar import CalEvent, DavCalendar
from ._common import CalAggregateLister, PrefixFinder, PrefixUnique
from ._common import AggregateNameLister, PrefixFinder, PrefixUnique
from .calendar import calendar_unique
_logger = getLogger(__name__)
router = APIRouter(prefix="/aggregate", tags=["calendar"])
cal_aggregate_lister = CalAggregateLister()
cal_aggregate_finder = PrefixFinder(cal_aggregate_lister)
cal_aggregate_unique = PrefixUnique(cal_aggregate_finder)
aggregate_lister = AggregateNameLister()
aggregate_finder = PrefixFinder(aggregate_lister)
aggregate_unique = PrefixUnique(aggregate_finder)
@router.on_event("startup")
@ -32,21 +32,21 @@ async def start_router() -> None:
@router.get("/list", response_model=list[str])
async def list_aggregate_calendars(
names: Iterator[str] = Depends(cal_aggregate_lister),
names: Iterator[str] = Depends(aggregate_lister),
) -> list[str]:
return list(names)
@router.get("/find/{prefix}", response_model=list[str])
async def find_aggregate_calendars(
names: Iterator[str] = Depends(cal_aggregate_finder),
names: Iterator[str] = Depends(aggregate_finder),
) -> list[str]:
return list(names)
@router.get("/get/{prefix}", response_model=list[CalEvent])
async def get_aggregate_calendar(
name: str = Depends(cal_aggregate_unique),
name: str = Depends(aggregate_unique),
) -> list[CalEvent]:
cfg = await Config.get()
aggregate = cfg.calendar.aggregate[name]

View file

@ -16,7 +16,6 @@ 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 ._common import FileNameLister, PrefixFinder, PrefixUnique
@ -44,58 +43,6 @@ async def start_router() -> None:
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/ticker")
async def get_ticker(
ticker_content: str = Depends(get_ticker_content),
) -> str:
return markdown(ticker_content)
@ router.get("/get/raw/ticker")
async def get_raw_ticker(
ticker_content: str = Depends(get_ticker_content),
) -> str:
return ticker_content
@router.get(
"/list",
response_model=list[str],

View file

@ -0,0 +1,84 @@
"""
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