1
0
mirror of https://github.com/ansible/awx.git synced 2024-11-01 16:51:11 +03:00

fix a nuanced parsing bug in naive UNTIL= parsing

This commit is contained in:
Ryan Petrello 2018-05-16 09:35:04 -04:00
parent 1d9fb53879
commit 39cb1cb60c

View File

@ -153,12 +153,12 @@ class Schedule(CommonModel, LaunchTimeConfig):
if 'until=' in rrule.lower(): if 'until=' in rrule.lower():
# if DTSTART;TZID= is used, coerce "naive" UNTIL values # if DTSTART;TZID= is used, coerce "naive" UNTIL values
# to the proper UTC date # to the proper UTC date
match_until = re.match(".*?UNTIL\=(?P<until>[0-9]+T[0-9]+)(?P<utcflag>Z?)", rrule) match_until = re.match(".*?(?P<until>UNTIL\=[0-9]+T[0-9]+)(?P<utcflag>Z?)", rrule)
if not len(match_until.group('utcflag')): if not len(match_until.group('utcflag')):
# rrule = DTSTART;TZID=America/New_York:20200601T120000 RRULE:...;UNTIL=20200601T170000 # rrule = DTSTART;TZID=America/New_York:20200601T120000 RRULE:...;UNTIL=20200601T170000
# Find the UNTIL=N part of the string # Find the UNTIL=N part of the string
# naive_until = 20200601T170000 # naive_until = UNTIL=20200601T170000
naive_until = match_until.group('until') naive_until = match_until.group('until')
# What is the DTSTART timezone for: # What is the DTSTART timezone for:
@ -172,13 +172,13 @@ class Schedule(CommonModel, LaunchTimeConfig):
# Make a datetime object with tzinfo=<the DTSTART timezone> # Make a datetime object with tzinfo=<the DTSTART timezone>
# localized_until = datetime.datetime(2020, 6, 1, 17, 0, tzinfo=tzfile('/usr/share/zoneinfo/America/New_York')) # localized_until = datetime.datetime(2020, 6, 1, 17, 0, tzinfo=tzfile('/usr/share/zoneinfo/America/New_York'))
localized_until = make_aware( localized_until = make_aware(
datetime.datetime.strptime(naive_until, "%Y%m%dT%H%M%S"), datetime.datetime.strptime(re.sub('^UNTIL=', '', naive_until), "%Y%m%dT%H%M%S"),
local_tz local_tz
) )
# Coerce the datetime to UTC and format it as a string w/ Zulu format # Coerce the datetime to UTC and format it as a string w/ Zulu format
# utc_until = 20200601T220000Z # utc_until = UNTIL=20200601T220000Z
utc_until = localized_until.astimezone(pytz.utc).strftime('%Y%m%dT%H%M%SZ') utc_until = 'UNTIL=' + localized_until.astimezone(pytz.utc).strftime('%Y%m%dT%H%M%SZ')
# rrule was: DTSTART;TZID=America/New_York:20200601T120000 RRULE:...;UNTIL=20200601T170000 # rrule was: DTSTART;TZID=America/New_York:20200601T120000 RRULE:...;UNTIL=20200601T170000
# rrule is now: DTSTART;TZID=America/New_York:20200601T120000 RRULE:...;UNTIL=20200601T220000Z # rrule is now: DTSTART;TZID=America/New_York:20200601T120000 RRULE:...;UNTIL=20200601T220000Z