1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
"""Selection of all components with the correct adapters."""
from __future__ import annotations
from typing import TYPE_CHECKING, Sequence
from recurring_ical_events.occurrence import Occurrence
from recurring_ical_events.selection.base import SelectComponents
from recurring_ical_events.selection.name import ComponentsWithName
from recurring_ical_events.series import Series
if TYPE_CHECKING:
from icalendar.cal import Component
from recurring_ical_events.adapters.component import ComponentAdapter
class AllKnownComponents(SelectComponents):
"""Group all known components into series."""
@property
def _component_adapters(self) -> Sequence[ComponentAdapter]:
"""Return all known component adapters."""
return ComponentsWithName.component_adapters
@property
def names(self) -> list[str]:
"""Return the names of the components to collect."""
result = [adapter.component_name() for adapter in self._component_adapters]
result.sort()
return result
def __init__(
self,
series: type[Series] = Series,
occurrence: type[Occurrence] = Occurrence,
collector: type[ComponentsWithName] = ComponentsWithName,
) -> None:
"""Collect all known components and overide the series and occurrence.
series - the Series class to override that is queried for Occurrences
occurrence - the occurrence class that creates the resulting components
collector - if you want to override the SelectComponentsByName class
"""
self._series = series
self._occurrence = occurrence
self._collector = collector
def collect_series_from(
self, source: Component, suppress_errors: tuple[Exception]
) -> Sequence[Series]:
"""Collect the components from the source groups into a series."""
result = []
for name in self.names:
collector = self._collector(
name, series=self._series, occurrence=self._occurrence
)
result.extend(collector.collect_series_from(source, suppress_errors))
return result
__all__ = ["AllKnownComponents"]
|