Source code for icalendar.prop.dt.list

from datetime import date, datetime
from typing import Any, ClassVar

from icalendar.compatibility import Self
from icalendar.error import JCalParsingError
from icalendar.parser import Parameters
from icalendar.parser_tools import from_unicode

from .base import TimeBase
from .types import vDDDTypes


[docs] class vDDDLists: """A list of vDDDTypes values.""" default_value: ClassVar[str] = "DATE-TIME" params: Parameters dts: list[vDDDTypes] def __init__(self, dt_list, params: dict[str, Any] | None = None): if params is None: params = {} if not hasattr(dt_list, "__iter__"): dt_list = [dt_list] vddd = [] tzid = None for dt_l in dt_list: dt = vDDDTypes(dt_l) if not isinstance(dt_l, vDDDTypes) else dt_l vddd.append(dt) if "TZID" in dt.params: tzid = dt.params["TZID"] if tzid: # NOTE: no support for multiple timezones here! params["TZID"] = tzid self.params = Parameters(params) self.dts = vddd
[docs] def to_ical(self): dts_ical = (from_unicode(dt.to_ical()) for dt in self.dts) return b",".join(dts_ical)
[docs] @staticmethod def from_ical(ical, timezone=None): out = [] ical_dates = ical.split(",") for ical_dt in ical_dates: out.append(vDDDTypes.from_ical(ical_dt, timezone=timezone)) return out
def __eq__(self, other): if isinstance(other, vDDDLists): return self.dts == other.dts if isinstance(other, (TimeBase, date)): return self.dts == [other] return False def __repr__(self): """String representation.""" return f"{self.__class__.__name__}({self.dts})"
[docs] @classmethod def examples(cls) -> list[Self]: """Examples of vDDDLists.""" return [vDDDLists([datetime(2025, 11, 10, 16, 50)])]
[docs] def to_jcal(self, name: str) -> list: """The jCal representation of this property according to :rfc:`7265`.""" return [ name, self.params.to_jcal(), self.VALUE.lower(), *[dt.to_jcal(name)[3] for dt in self.dts], ]
def _get_value(self) -> str | None: return None if not self.dts else self.dts[0].VALUE from icalendar.param import VALUE
[docs] @classmethod def from_jcal(cls, jcal_property: list) -> Self: """Parse jCal from :rfc:`7265`. Parameters: jcal_property: The jCal property to parse. Raises: ~error.JCalParsingError: If the jCal provided is invalid. """ JCalParsingError.validate_property(jcal_property, cls) values = jcal_property[3:] prop = jcal_property[:3] dts = [] for value in values: dts.append(vDDDTypes.from_jcal(prop + [value])) return cls( dts, params=Parameters.from_jcal_property(jcal_property), )
__hash__ = None
__all__ = ["vDDDLists"]