Allow seconds in vUTCOffset properties. Fixes #55.

pull/98/merge
Johannes Raggam 2013-03-20 13:04:47 +01:00
rodzic 616fa68655
commit 3aef43f035
4 zmienionych plików z 47 dodań i 13 usunięć

Wyświetl plik

@ -5,6 +5,9 @@ Changelog
3.4dev (unreleased)
-------------------
- Allow seconds in vUTCOffset properties. Fixes #55.
[thet]
- Let ``Component.decode`` correctly decode vRecur properties. Fixes #70.
[thet]

Wyświetl plik

@ -790,20 +790,24 @@ class vUTCOffset(object):
self.params = Parameters()
def to_ical(self):
td = self.td
day_in_minutes = (td.days * 24 * 60)
seconds_in_minutes = td.seconds // 60
total_minutes = day_in_minutes + seconds_in_minutes
if total_minutes == 0:
if self.td<timedelta(0):
sign = '-%s'
td = timedelta(0)-self.td # get timedelta relative to 0
else:
# Google Calendar rejects '0000' but accepts '+0000'
sign = '+%s'
elif total_minutes < 0:
sign = '-%s'
td = self.td
days, seconds = td.days, td.seconds
hours = abs(days * 24 + seconds // 3600)
minutes = abs((seconds % 3600) // 60)
seconds = abs(seconds % 60)
if seconds:
duration = '%02i%02i%02i' % (hours, minutes, seconds)
else:
sign = '+%s'
hours = abs(total_minutes) // 60
minutes = total_minutes % 60
duration = '%02i%02i' % (hours, minutes)
duration = '%02i%02i' % (hours, minutes)
return sign % duration
@staticmethod

Wyświetl plik

@ -28,6 +28,29 @@ class TestIssues(unittest.TestCase):
self.assertEqual(tz['tzid'].to_ical(), "America/New_York")
def test_issue_55(self):
"""Issue #55 - Parse error on utc-offset with seconds value
https://github.com/collective/icalendar/issues/55
"""
ical_str = """BEGIN:VTIMEZONE
TZID:America/Los Angeles
BEGIN:STANDARD
DTSTART:18831118T120702
RDATE:18831118T120702
TZNAME:PST
TZOFFSETFROM:-075258
TZOFFSETTO:-0800
END:STANDARD
END:VTIMEZONE"""
tz = icalendar.Timezone.from_ical(ical_str)
self.assertEqual(tz.to_ical(),
'BEGIN:VTIMEZONE\r\nTZID:America/Los Angeles\r\nBEGIN:STANDARD\r\n'
'DTSTART:18831118T120702\r\nRDATE:18831118T120702\r\nTZNAME:PST'
'\r\nTZOFFSETFROM:-075258\r\nTZOFFSETTO:-0800\r\nEND:STANDARD\r\n'
'END:VTIMEZONE\r\n')
def test_issue_58(self):
"""Issue #58 - TZID on UTC DATE-TIMEs
https://github.com/collective/icalendar/issues/58
@ -82,8 +105,7 @@ SUMMARY:Esb mellon phone conf
DTSTART:20070220T170000
DTSTAMP:20070221T095412Z
SEQUENCE:0
END:VEVENT
"""
END:VEVENT"""
cal = icalendar.Calendar.from_ical(ical_str)
recur = cal.decoded("RRULE")

Wyświetl plik

@ -401,6 +401,11 @@ class TestProp(unittest.TestCase):
self.assertEqual(vUTCOffset(timedelta(hours=1, minutes=30)).to_ical(),
'+0130')
# Support seconds
self.assertEqual(vUTCOffset(timedelta(hours=1,
minutes=30,
seconds=7)).to_ical(), '+013007')
# Parsing
self.assertEqual(vUTCOffset.from_ical('0000'), timedelta(0))