kopia lustrzana https://github.com/collective/icalendar
Allow seconds in vUTCOffset properties. Fixes #55.
rodzic
616fa68655
commit
3aef43f035
|
@ -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]
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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")
|
||||
|
|
|
@ -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))
|
||||
|
|
Ładowanie…
Reference in New Issue