Coverage for /pythoncovmergedfiles/medio/medio/usr/local/lib/python3.11/site-packages/icalendar/prop/broken.py: 92%

Shortcuts on this page

r m x   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

24 statements  

1"""Parsing error value preservation.""" 

2 

3 

4from typing import Any, ClassVar 

5 

6from icalendar.compatibility import Self 

7from icalendar.parser import Parameters 

8from icalendar.parser_tools import DEFAULT_ENCODING 

9from icalendar.prop.text import vText 

10 

11 

12class vBrokenProperty(vText): 

13 """Property that failed to parse, preserving raw value as text. 

14 

15 Represents property values that failed to parse with their expected 

16 type. The raw iCalendar string is preserved for round-trip serialization. 

17 """ 

18 

19 default_value: ClassVar[str] = "TEXT" 

20 __slots__ = ("expected_type", "parse_error", "property_name") 

21 

22 def __new__( 

23 cls, 

24 value: str | bytes, 

25 encoding: str = DEFAULT_ENCODING, 

26 /, 

27 params: dict[str, Any] | None = None, 

28 expected_type: str | None = None, 

29 property_name: str | None = None, 

30 parse_error: str | None = None, 

31 ) -> Self: 

32 self = super().__new__(cls, value, encoding, params=params) 

33 object.__setattr__(self, "expected_type", expected_type) 

34 object.__setattr__(self, "property_name", property_name) 

35 object.__setattr__(self, "parse_error", parse_error) 

36 return self 

37 

38 def __repr__(self) -> str: 

39 return ( 

40 f"vBrokenProperty({str(self)!r}, " 

41 f"expected_type={self.expected_type!r}, " 

42 f"property_name={self.property_name!r})" 

43 ) 

44 

45 @classmethod 

46 def from_parse_error( 

47 cls, 

48 raw_value: str, 

49 params: Parameters, 

50 property_name: str, 

51 expected_type: str, 

52 error: Exception, 

53 ) -> Self: 

54 """Create vBrokenProperty from parse failure.""" 

55 return cls( 

56 raw_value, 

57 params=params, 

58 expected_type=expected_type, 

59 property_name=property_name, 

60 parse_error=str(error), 

61 ) 

62 

63 @classmethod 

64 def examples(cls) -> list[Self]: 

65 """Examples of vBrokenProperty.""" 

66 return [ 

67 cls( 

68 "INVALID-DATE", 

69 expected_type="date-time", 

70 property_name="DTSTART", 

71 parse_error="Invalid date format", 

72 ) 

73 ] 

74 

75__all__ = ["vBrokenProperty"]