55# -------------------------------------------------------------------------
66from enum import Enum
77from datetime import datetime
8- from typing import List
8+ from typing import Self
99from dataclasses import dataclass
10+ from email .utils import parsedate_to_datetime
1011
1112
1213class RecurrencePatternType (str , Enum ):
@@ -17,6 +18,13 @@ class RecurrencePatternType(str, Enum):
1718 DAILY = "Daily"
1819 WEEKLY = "Weekly"
1920
21+ def from_str (value : str ) -> Self :
22+ if value == "Daily" :
23+ return RecurrencePatternType .DAILY
24+ if value == "Weekly" :
25+ return RecurrencePatternType .WEEKLY
26+ raise ValueError (f"Invalid value: { value } " )
27+
2028
2129class RecurrenceRangeType (str , Enum ):
2230 """
@@ -27,38 +35,45 @@ class RecurrenceRangeType(str, Enum):
2735 END_DATE = "EndDate"
2836 NUMBERED = "Numbered"
2937
38+ def from_str (value : str ) -> Self :
39+ if value == "NoEnd" :
40+ return RecurrenceRangeType .NO_END
41+ if value == "EndDate" :
42+ return RecurrenceRangeType .END_DATE
43+ if value == "Numbered" :
44+ return RecurrenceRangeType .NUMBERED
45+ raise ValueError (f"Invalid value: { value } " )
3046
31- @dataclass
3247class RecurrencePattern :
3348 """
3449 The recurrence pattern settings.
3550 """
3651
37- days_of_week : List [int ]
38- interval : int = 1
39- first_day_of_week : int = 7
40- type : RecurrencePatternType = RecurrencePatternType .DAILY
52+ def __init__ (self , pattern_data : dict [str : any ]):
53+ self .type = RecurrencePatternType .from_str (pattern_data .get ("Type" , "Daily" ))
54+ self .interval = pattern_data .get ("Interval" , 1 )
55+ self .days_of_week = pattern_data .get ("DaysOfWeek" , [])
56+ self .first_day_of_week = pattern_data .get ("FirstDayOfWeek" , 7 )
4157
42-
43- @dataclass
4458class RecurrenceRange :
4559 """
4660 The recurrence range settings.
4761 """
4862
49- end_date : datetime
50- num_of_occurrences : int
51- type : RecurrenceRangeType = RecurrenceRangeType .NO_END
52-
63+ def __init__ (self , range_data : dict [str : any ]):
64+ self .type = RecurrenceRangeType .from_str (range_data .get ("Type" , "NoEnd" ))
65+ if range_data .get ("EndDate" ):
66+ self .end_date = parsedate_to_datetime (range_data .get ("EndDate" ))
67+ self .num_of_occurrences = range_data .get ("NumberOfOccurrences" )
5368
54- @dataclass
5569class Recurrence :
5670 """
5771 The recurrence settings.
5872 """
5973
60- pattern : RecurrencePattern
61- range : RecurrenceRange
74+ def __init__ (self , recurrence_data : dict [str : any ]):
75+ self .pattern = RecurrencePattern (recurrence_data .get ("Pattern" ))
76+ self .range = RecurrenceRange (recurrence_data .get ("Range" ))
6277
6378
6479@dataclass
0 commit comments