awx/awxkit/awxkit/rrule.py
Ryan Petrello 9616cc6f78
import awxkit
Co-authored-by: Christopher Wang <cwang@ansible.com>
Co-authored-by: Jake McDermott <jmcdermott@ansible.com>
Co-authored-by: Jim Ladd <jladd@redhat.com>
Co-authored-by: Elijah DeLee <kdelee@redhat.com>
Co-authored-by: Alan Rominger <arominge@redhat.com>
Co-authored-by: Yanis Guenane <yanis@guenane.org>
2019-08-08 22:12:31 -04:00

55 lines
2.0 KiB
Python

from datetime import datetime
from dateutil import rrule
from awxkit.utils import to_ical
class RRule(rrule.rrule):
@property
def next_run(self):
after = self.after(datetime.utcnow())
if after is None:
return after
return after.isoformat() + 'Z'
def next_runs(self, count=1):
return [a.isoformat() + 'Z' for a in self.xafter(datetime.utcnow(),
count=count)]
def __str__(self):
dstart = 'DTSTART:{}'.format(to_ical(self._dtstart))
rules = []
if self._freq not in range(len(rrule.FREQNAMES)):
raise Exception('Invalid freq "{}"'.format(self._freq))
rules.append('FREQ=' + rrule.FREQNAMES[self._freq])
for name, value in [('INTERVAL', self._interval),
('WKST', self._wkst),
('COUNT', self._count)]:
if value is not None:
if name == 'WKST':
value = ['MO', 'TU', 'WE', 'TH', 'FR', 'SA', 'SU'][value]
rules.append('{}={}'.format(name, value))
if self._until:
rules.append('UNTIL={}'.format(to_ical(self._until)))
for name, value in [('BYSETPOS', self._bysetpos),
('BYMONTH', self._bymonth),
('BYMONTHDAY', self._bymonthday),
('BYYEARDAY', self._byyearday),
('BYWEEKNO', self._byweekno),
('BYWEEKDAY', self._byweekday),
('BYHOUR', self._byhour),
('BYMINUTE', self._byminute),
('BYSECOND', self._bysecond), ]:
if name == "BYWEEKDAY" and value:
value = (rrule.weekdays[num] for num in value)
if value:
rules.append(name + '=' + ','.join(str(v) for v in value))
return '{0} RRULE:{1}'.format(dstart, ';'.join(rules))
__repr__ = __str__