You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
spiel/spiel/deck.py

41 lines
999 B
Python

from __future__ import annotations
from dataclasses import dataclass, field
from typing import Callable, Iterator, Mapping
from spiel.slide import Content, Slide
@dataclass
class Deck:
name: str
slides: list[Slide] = field(default_factory=list)
def __len__(self) -> int:
return len(self.slides)
def __getitem__(self, item: int) -> Slide:
return self.slides[item]
def __iter__(self) -> Iterator[Slide]:
yield from self.slides
def slide(
self,
title: str = "",
bindings: Mapping[str, Callable[..., None]] | None = None,
) -> Callable[[Content], Slide]:
def slideify(content: Content) -> Slide:
slide = Slide(
title=title,
content=content,
bindings=bindings or {},
)
self.add_slides(slide)
return slide
return slideify
def add_slides(self, *slides: Slide) -> None:
self.slides.extend(slides)