from __future__ import annotations
from typing import Generic, TypeVar
from library.interfaces.searchable import Searchable
T = TypeVar("T", bound=Searchable)
class Catalog(Generic[T]):
class Stats:
def __init__(self, total_items: int, name: str) -> None:
self.total_items = total_items
self.name = name
def __init__(self, name: str) -> None:
self._items: list[T] = []
self._name = name
def add(self, item: T) -> None:
self._items.append(item)
def search(self, query: str) -> list[T]:
return [item for item in self._items if query in item.search_text()]
def stats(self) -> Stats:
return self.Stats(total_items=len(self._items), name=self._name)
def create_default_catalog() -> Catalog:
return Catalog(name="Main Library")