Merge branch 'master' into fix-322

pull/566/head
Nicco Kunzmann 2023-10-08 12:54:45 +01:00 zatwierdzone przez GitHub
commit 25be2d76f7
Nie znaleziono w bazie danych klucza dla tego podpisu
ID klucza GPG: 4AEE18F83AFDEB23
9 zmienionych plików z 81 dodań i 14 usunięć

Wyświetl plik

@ -20,9 +20,14 @@ New features:
Bug fixes:
- CATEGORIES field now accepts strings properly
- CATEGORIES field now accepts a string as argument
Ref: #322
[jacadzaca]
- Multivalue FREEBUSY property is now parsed properly
Ref: #27
[jacadzaca]
- Use non legacy timezone name.
Ref: #567
5.0.10 (unreleased)
-------------------

Wyświetl plik

@ -17,6 +17,7 @@ icalendar contributors
- Jannis Leidel <jannis@leidel.info>
- Jeroen F.J. Laros <jlaros@fixedpoint.nl>
- Jeroen van Meeuwen (Kolab Systems) <vanmeeuwen@kolabsys.com>
- Jochen Sprickerhof <icalendar@jochen.sprickerhof.de>
- Jordan Kiang <jordan@cozi.com>
- Klaus Klein <kleink+github@kleink.org>
- Laurent Lasudry <lasudry@gmail.com>

Wyświetl plik

@ -375,19 +375,26 @@ class Component(CaselessDict):
if not component:
raise ValueError(f'Property "{name}" does not have a parent component.')
datetime_names = ('DTSTART', 'DTEND', 'RECURRENCE-ID', 'DUE',
'FREEBUSY', 'RDATE', 'EXDATE')
'RDATE', 'EXDATE')
try:
if name in datetime_names and 'TZID' in params:
vals = factory(factory.from_ical(vals, params['TZID']))
if name == 'FREEBUSY':
vals = vals.split(',')
if 'TZID' in params:
parsed_components = [factory(factory.from_ical(val, params['TZID'])) for val in vals]
else:
parsed_components = [factory(factory.from_ical(val)) for val in vals]
elif name in datetime_names and 'TZID' in params:
parsed_components = [factory(factory.from_ical(vals, params['TZID']))]
else:
vals = factory(factory.from_ical(vals))
parsed_components = [factory(factory.from_ical(vals))]
except ValueError as e:
if not component.ignore_exceptions:
raise
component.errors.append((uname, str(e)))
else:
vals.params = params
component.add(name, vals, encode=0)
for parsed_component in parsed_components:
parsed_component.params = params
component.add(name, parsed_component, encode=0)
if multiple:
return comps

Wyświetl plik

@ -533,6 +533,11 @@ class vPeriod:
f'Cannot compare vPeriod with {other!r}')
return cmp((self.start, self.end), (other.start, other.end))
def __eq__(self, other):
if not isinstance(other, vPeriod):
return False
return (self.start, self.end) == (other.start, other.end)
def overlaps(self, other):
if self.start > other.start:
return other.overlaps(self)

Wyświetl plik

@ -0,0 +1,21 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//davmail.sf.net/NONSGML DavMail Calendar V1.1//EN
METHOD:REPLY
BEGIN:VFREEBUSY
DTSTAMP:20120131T123000Z
ORGANIZER:MAILTO:organizer@domain.tld
DTSTART:20120101T000000Z
DTEND:20120201T000000Z
UID:null
ATTENDEE:MAILTO:attendee@domain.tld
FREEBUSY;FBTYPE=BUSY:20120103T091500Z/20120103T101500Z
FREEBUSY;FBTYPE=BUSY:20120113T130000Z/20120113T150000Z
FREEBUSY;FBTYPE=BUSY:20120116T130000Z/20120116T150000Z
FREEBUSY;FBTYPE=BUSY:20120117T091500Z/20120117T101500Z
FREEBUSY;FBTYPE=BUSY:20120118T160000Z/20120118T163000Z
FREEBUSY;FBTYPE=BUSY:20120124T083000Z/20120124T093000Z
FREEBUSY;FBTYPE=BUSY:20120124T123000Z/20120124T143000Z
FREEBUSY;FBTYPE=BUSY:20120131T091500Z/20120131T101500Z
END:VFREEBUSY
END:VCALENDAR

Wyświetl plik

@ -0,0 +1,14 @@
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//davmail.sf.net/NONSGML DavMail Calendar V1.1//EN
METHOD:REPLY
BEGIN:VFREEBUSY
DTSTAMP:20120131T123000Z
ORGANIZER:MAILTO:organizer@domain.tld
DTSTART:20120101T000000Z
DTEND:20120201T000000Z
UID:null
ATTENDEE:MAILTO:attendee@domain.tld
FREEBUSY;FBTYPE=BUSY:20120103T091500Z/20120103T101500Z,20120113T130000Z/20120113T150000Z,20120116T130000Z/20120116T150000Z,20120117T091500Z/20120117T101500Z,20120118T160000Z/20120118T163000Z,20120124T083000Z/20120124T093000Z,20120124T123000Z/20120124T143000Z,20120131T091500Z/20120131T101500Z
END:VFREEBUSY
END:VCALENDAR

Wyświetl plik

@ -0,0 +1,14 @@
'''Issue #27 - multiple periods
https://github.com/collective/icalendar/issues/27
'''
from icalendar import Calendar
def test_issue_27_multiple_periods(calendars):
free_busy = list(calendars.issue_27_multiple_periods_in_freebusy_multiple_freebusies.walk('VFREEBUSY'))[0]
free_busy_period = free_busy['freebusy']
print(free_busy['freebusy'])
equivalent_way_of_defining_free_busy = list(calendars.issue_27_multiple_periods_in_freebusy_one_freebusy.walk('VFREEBUSY'))[0]
free_busy_period_equivalent = equivalent_way_of_defining_free_busy['freebusy']
assert free_busy_period == free_busy_period_equivalent

Wyświetl plik

@ -513,7 +513,7 @@ class TestProp(unittest.TestCase):
vDDDTypes_list = [
vDDDTypes(pytz.timezone('US/Eastern').localize(datetime(year=2022, month=7, day=22, hour=12, minute=7))),
vDDDTypes(pytz.timezone('EST').localize(datetime(year=2022, month=7, day=22, hour=12, minute=7))),
vDDDTypes(datetime(year=2022, month=7, day=22, hour=12, minute=7)),
vDDDTypes(datetime(year=2022, month=7, day=22, hour=12, minute=7, tzinfo=tz.UTC)),
vDDDTypes(date(year=2022, month=7, day=22)),

Wyświetl plik

@ -17,7 +17,7 @@ WINDOWS_TO_OLSON = {
'Arab Standard Time': 'Asia/Riyadh',
'Arabian Standard Time': 'Asia/Dubai',
'Arabic Standard Time': 'Asia/Baghdad',
'Argentina Standard Time': 'America/Buenos_Aires',
'Argentina Standard Time': 'America/Argentina/Buenos_Aires',
'Atlantic Standard Time': 'America/Halifax',
'Azerbaijan Standard Time': 'Asia/Baku',
'Azores Standard Time': 'Atlantic/Azores',
@ -46,7 +46,7 @@ WINDOWS_TO_OLSON = {
'Eastern Standard Time (Mexico)': 'America/Cancun',
'Egypt Standard Time': 'Africa/Cairo',
'Ekaterinburg Standard Time': 'Asia/Yekaterinburg',
'FLE Standard Time': 'Europe/Kiev',
'FLE Standard Time': 'Europe/Kyiv',
'Fiji Standard Time': 'Pacific/Fiji',
'GMT Standard Time': 'Europe/London',
'GTB Standard Time': 'Europe/Bucharest',
@ -54,7 +54,7 @@ WINDOWS_TO_OLSON = {
'Greenland Standard Time': 'America/Godthab',
'Greenwich Standard Time': 'Atlantic/Reykjavik',
'Hawaiian Standard Time': 'Pacific/Honolulu',
'India Standard Time': 'Asia/Calcutta',
'India Standard Time': 'Asia/Kolkata',
'Iran Standard Time': 'Asia/Tehran',
'Israel Standard Time': 'Asia/Jerusalem',
'Jordan Standard Time': 'Asia/Amman',
@ -69,10 +69,10 @@ WINDOWS_TO_OLSON = {
'Morocco Standard Time': 'Africa/Casablanca',
'Mountain Standard Time': 'America/Denver',
'Mountain Standard Time (Mexico)': 'America/Chihuahua',
'Myanmar Standard Time': 'Asia/Rangoon',
'Myanmar Standard Time': 'Asia/Yangon',
'N. Central Asia Standard Time': 'Asia/Novosibirsk',
'Namibia Standard Time': 'Africa/Windhoek',
'Nepal Standard Time': 'Asia/Katmandu',
'Nepal Standard Time': 'Asia/Kathmandu',
'New Zealand Standard Time': 'Pacific/Auckland',
'Newfoundland Standard Time': 'America/St_Johns',
'North Asia East Standard Time': 'Asia/Irkutsk',
@ -101,7 +101,7 @@ WINDOWS_TO_OLSON = {
'Tokyo Standard Time': 'Asia/Tokyo',
'Tonga Standard Time': 'Pacific/Tongatapu',
'Turkey Standard Time': 'Europe/Istanbul',
'US Eastern Standard Time': 'America/Indianapolis',
'US Eastern Standard Time': 'America/Indiana/Indianapolis',
'US Mountain Standard Time': 'America/Phoenix',
'UTC': 'Etc/GMT',
'UTC+12': 'Etc/GMT-12',