Skip to content

Commit 5339273

Browse files
committed
Fixing Daily
1 parent d9eca62 commit 5339273

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

featuremanagement/_defaultfilters.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ def evaluate(self, context: Mapping[Any, Any], **kwargs: Any) -> bool:
7272
current_time = datetime.now(timezone.utc)
7373

7474
if recurrence_data:
75-
recurrence = Recurrence(**cast(Dict[str, Any], recurrence_data))
75+
recurrence = Recurrence(recurrence_data)
7676

7777
if not start and not end:
7878
logger.warning(
@@ -106,7 +106,6 @@ def evaluate(self, context: Mapping[Any, Any], **kwargs: Any) -> bool:
106106

107107
return (start_time is None or start_time <= current_time) and (end_time is None or current_time < end_time)
108108

109-
110109
@FeatureFilter.alias("Microsoft.Targeting")
111110
class TargetingFilter(FeatureFilter):
112111
"""

featuremanagement/_time_window_filter/_models.py

Lines changed: 30 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
# -------------------------------------------------------------------------
66
from enum import Enum
77
from datetime import datetime
8-
from typing import List
8+
from typing import Self
99
from dataclasses import dataclass
10+
from email.utils import parsedate_to_datetime
1011

1112

1213
class 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

2129
class 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
3247
class 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
4458
class 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
5569
class 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

Comments
 (0)