41aed15426
Also lock config.build_key_to_id
50 lines
1.2 KiB
Python
50 lines
1.2 KiB
Python
from typing import Any, Dict
|
|
|
|
from ..utils.projector import (
|
|
AllData,
|
|
ProjectorElementException,
|
|
register_projector_slide,
|
|
)
|
|
|
|
|
|
# Important: All functions have to be prune. This means, that thay can only
|
|
# access the data, that they get as argument and do not have any
|
|
# side effects.
|
|
|
|
|
|
async def topic_slide(
|
|
all_data: AllData, element: Dict[str, Any], projector_id: int
|
|
) -> Dict[str, Any]:
|
|
"""
|
|
Topic slide.
|
|
|
|
The returned dict can contain the following fields:
|
|
* title
|
|
* text
|
|
"""
|
|
topic_id = element.get("id")
|
|
|
|
if topic_id is None:
|
|
raise ProjectorElementException("id is required for topic slide")
|
|
|
|
try:
|
|
topic = all_data["topics/topic"][topic_id]
|
|
except KeyError:
|
|
raise ProjectorElementException(f"topic with id {topic_id} does not exist")
|
|
|
|
item_id = topic["agenda_item_id"]
|
|
try:
|
|
item = all_data["agenda/item"][item_id]
|
|
except KeyError:
|
|
raise ProjectorElementException(f"item with id {item_id} does not exist")
|
|
|
|
return {
|
|
"title": topic["title"],
|
|
"text": topic["text"],
|
|
"item_number": item["item_number"],
|
|
}
|
|
|
|
|
|
def register_projector_slides() -> None:
|
|
register_projector_slide("topics/topic", topic_slide)
|