Source code for icalendar.prop.broken
"""Parsing error value preservation."""
from typing import Any, ClassVar
from icalendar.compatibility import Self
from icalendar.parser import Parameters
from icalendar.parser_tools import DEFAULT_ENCODING
from icalendar.prop.text import vText
[docs]
class vBrokenProperty(vText):
"""Property that failed to parse, preserving raw value as text.
Represents property values that failed to parse with their expected
type. The raw iCalendar string is preserved for round-trip serialization.
"""
default_value: ClassVar[str] = "TEXT"
__slots__ = ("expected_type", "parse_error", "property_name")
def __new__(
cls,
value,
encoding=DEFAULT_ENCODING,
/,
params: dict[str, Any] | None = None,
expected_type: str | None = None,
property_name: str | None = None,
parse_error: str | None = None,
):
self = super().__new__(cls, value, encoding, params=params)
object.__setattr__(self, "expected_type", expected_type)
object.__setattr__(self, "property_name", property_name)
object.__setattr__(self, "parse_error", parse_error)
return self
def __repr__(self) -> str:
return (
f"vBrokenProperty({str(self)!r}, "
f"expected_type={self.expected_type!r}, "
f"property_name={self.property_name!r})"
)
[docs]
@classmethod
def from_parse_error(
cls,
raw_value: str,
params: Parameters,
property_name: str,
expected_type: str,
error: Exception,
):
"""Create vBrokenProperty from parse failure."""
return cls(
raw_value,
params=params,
expected_type=expected_type,
property_name=property_name,
parse_error=str(error),
)
[docs]
@classmethod
def examples(cls) -> list[Self]:
"""Examples of vBrokenProperty."""
return [
cls(
"INVALID-DATE",
expected_type="date-time",
property_name="DTSTART",
parse_error="Invalid date format",
)
]
__all__ = ["vBrokenProperty"]