in src/pycalendar/icalendar/recurrence.py [0:0]
def isAdvancedRule(self):
# One that has BYMONTH,
# BYMONTHDAY (with no negative value),
# BYDAY (with multiple unnumbered, or numbered with all the same number
# (1..4, -2, -1)
# BYSETPOS with +1, or -1 only
# no others
# First checks the ones we do not handle at all
if (
(self.mBySeconds is not None) and (len(self.mBySeconds) != 0) or
(self.mByMinutes is not None) and (len(self.mByMinutes) != 0) or
(self.mByHours is not None) and (len(self.mByHours) != 0) or
(self.mByYearDay is not None) and (len(self.mByYearDay) != 0) or
(self.mByWeekNo is not None) and (len(self.mByWeekNo) != 0)
):
return False
# Check BYMONTHDAY numbers (we can handle -7...-1, 1..31)
if self.mByMonthDay is not None:
for iter in self.mByMonthDay:
if (iter < -7) or (iter > 31) or (iter == 0):
return False
# Check BYDAY numbers
if self.mByDay is not None:
number = 0
first = True
for iter in self.mByDay:
# Get the first number
if (first):
number = iter[0]
first = False
# Check number range
if (number > 4) or (number < -2):
return False
# If current differs from last, then we have an error
elif number != iter[0]:
return False
# Check BYSETPOS numbers
if self.mBySetPos is not None:
if len(self.mBySetPos) > 1:
return False
if (len(self.mBySetPos) == 1) and (self.mBySetPos[0] != -1) and (self.mBySetPos[0] != 1):
return False
# If we get here it must be OK
return True