Compare commits
2 commits
8b35bb7044
...
83db799b96
| Author | SHA1 | Date | |
|---|---|---|---|
| 83db799b96 | |||
| 85327ce0b3 |
5 changed files with 97 additions and 65 deletions
|
|
@ -7,13 +7,14 @@ This file: Main API router definition.
|
||||||
from fastapi import APIRouter
|
from fastapi import APIRouter
|
||||||
|
|
||||||
from ..settings import SETTINGS
|
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 = APIRouter(prefix=f"/{SETTINGS.api_v1_prefix}")
|
||||||
main_router.include_router(text.router)
|
main_router.include_router(text.router)
|
||||||
|
main_router.include_router(ticker.router)
|
||||||
main_router.include_router(image.router)
|
main_router.include_router(image.router)
|
||||||
main_router.include_router(calendar.router)
|
main_router.include_router(calendar.router)
|
||||||
main_router.include_router(cal_aggregate.router)
|
main_router.include_router(aggregate.router)
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
"main_router",
|
"main_router",
|
||||||
|
|
|
||||||
|
|
@ -88,9 +88,9 @@ class CalendarNameLister:
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
@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]:
|
async def __call__(self) -> Iterator[str]:
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
"""
|
"""
|
||||||
Router "cal_aggregate" provides:
|
Router "aggregate" provides:
|
||||||
|
|
||||||
- listing aggregate calendars
|
- listing aggregate calendars
|
||||||
- finding aggregate calendars by name prefix
|
- finding aggregate calendars by name prefix
|
||||||
|
|
@ -13,16 +13,16 @@ from fastapi import APIRouter, Depends
|
||||||
from ovdashboard_api.config import Config
|
from ovdashboard_api.config import Config
|
||||||
|
|
||||||
from ..dav_calendar import CalEvent, DavCalendar
|
from ..dav_calendar import CalEvent, DavCalendar
|
||||||
from ._common import CalAggregateLister, PrefixFinder, PrefixUnique
|
from ._common import AggregateNameLister, PrefixFinder, PrefixUnique
|
||||||
from .calendar import calendar_unique
|
from .calendar import calendar_unique
|
||||||
|
|
||||||
_logger = getLogger(__name__)
|
_logger = getLogger(__name__)
|
||||||
|
|
||||||
router = APIRouter(prefix="/aggregate", tags=["calendar"])
|
router = APIRouter(prefix="/aggregate", tags=["calendar"])
|
||||||
|
|
||||||
cal_aggregate_lister = CalAggregateLister()
|
aggregate_lister = AggregateNameLister()
|
||||||
cal_aggregate_finder = PrefixFinder(cal_aggregate_lister)
|
aggregate_finder = PrefixFinder(aggregate_lister)
|
||||||
cal_aggregate_unique = PrefixUnique(cal_aggregate_finder)
|
aggregate_unique = PrefixUnique(aggregate_finder)
|
||||||
|
|
||||||
|
|
||||||
@router.on_event("startup")
|
@router.on_event("startup")
|
||||||
|
|
@ -32,21 +32,21 @@ async def start_router() -> None:
|
||||||
|
|
||||||
@router.get("/list", response_model=list[str])
|
@router.get("/list", response_model=list[str])
|
||||||
async def list_aggregate_calendars(
|
async def list_aggregate_calendars(
|
||||||
names: Iterator[str] = Depends(cal_aggregate_lister),
|
names: Iterator[str] = Depends(aggregate_lister),
|
||||||
) -> list[str]:
|
) -> list[str]:
|
||||||
return list(names)
|
return list(names)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/find/{prefix}", response_model=list[str])
|
@router.get("/find/{prefix}", response_model=list[str])
|
||||||
async def find_aggregate_calendars(
|
async def find_aggregate_calendars(
|
||||||
names: Iterator[str] = Depends(cal_aggregate_finder),
|
names: Iterator[str] = Depends(aggregate_finder),
|
||||||
) -> list[str]:
|
) -> list[str]:
|
||||||
return list(names)
|
return list(names)
|
||||||
|
|
||||||
|
|
||||||
@router.get("/get/{prefix}", response_model=list[CalEvent])
|
@router.get("/get/{prefix}", response_model=list[CalEvent])
|
||||||
async def get_aggregate_calendar(
|
async def get_aggregate_calendar(
|
||||||
name: str = Depends(cal_aggregate_unique),
|
name: str = Depends(aggregate_unique),
|
||||||
) -> list[CalEvent]:
|
) -> list[CalEvent]:
|
||||||
cfg = await Config.get()
|
cfg = await Config.get()
|
||||||
aggregate = cfg.calendar.aggregate[name]
|
aggregate = cfg.calendar.aggregate[name]
|
||||||
|
|
@ -16,7 +16,6 @@ from typing import Iterator
|
||||||
from fastapi import APIRouter, Depends
|
from fastapi import APIRouter, Depends
|
||||||
from markdown import markdown
|
from markdown import markdown
|
||||||
|
|
||||||
from ..config import Config
|
|
||||||
from ..dav_common import webdav_ensure_path
|
from ..dav_common import webdav_ensure_path
|
||||||
from ..dav_file import DavFile
|
from ..dav_file import DavFile
|
||||||
from ._common import FileNameLister, PrefixFinder, PrefixUnique
|
from ._common import FileNameLister, PrefixFinder, PrefixUnique
|
||||||
|
|
@ -44,58 +43,6 @@ async def start_router() -> None:
|
||||||
webdav_ensure_path(await text_lister.remote_path)
|
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(
|
@router.get(
|
||||||
"/list",
|
"/list",
|
||||||
response_model=list[str],
|
response_model=list[str],
|
||||||
|
|
|
||||||
84
api/ovdashboard_api/routers/ticker.py
Normal file
84
api/ovdashboard_api/routers/ticker.py
Normal 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
|
||||||
Loading…
Reference in a new issue