in messages/message.py [0:0]
def next_occurrence(self):
# if not messages have been queued yet, then the next occurrence
# is the start time
next_occur = None
if (not self.last_occurrence_in_utc):
next_occur = self.start_datetime_in_utc.datetime
next_expire = arrow.get(next_occur).replace(minutes=+10)
if self.end_datetime_in_utc < next_expire:
next_expire = self.end_datetime_in_utc
return next_occur, next_expire
else:
start = self.start_datetime_in_utc.datetime
cal = Calendar.from_ical(self.ical)
if cal.get('RRULE'):
rrule = cal.get('RRULE').to_ical()
rule = rrulestr(rrule, dtstart=start)
next_after_now = rule.after(self.compare_datetime_in_utc or
arrow.utcnow().datetime)
else:
next_after_now = None
if not next_after_now:
logging.info('No next_after_now, so next_occur=N/A')
return 'N/A', self.compare_datetime_in_utc or arrow.utcnow()
next_before_now = rule.before(next_after_now)
if next_before_now and \
(self.last_occurrence_in_utc > next_before_now):
next_occur = next_after_now
else:
next_occur = next_before_now
rule = rrulestr(rrule, dtstart=next_occur)
expires = rule.after(next_occur)
if not expires:
return 'N/A', arrow.utcnow().replace(minutes=+10)
if (expires > self.end_datetime_in_utc):
expires = self.end_datetime_in_utc
return arrow.get(next_occur), arrow.get(expires)