def next_occurrence()

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)