From 7446b0326945e899940d477a864ac01e74944eff Mon Sep 17 00:00:00 2001 From: AndCycle Date: Mon, 8 Jun 2020 21:22:11 +0800 Subject: [PATCH 1/3] Add status event attribute --- icalevents/icalparser.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/icalevents/icalparser.py b/icalevents/icalparser.py index 950528d..3d383d0 100644 --- a/icalevents/icalparser.py +++ b/icalevents/icalparser.py @@ -50,6 +50,7 @@ def __init__(self): self.attendee = None self.organizer = None self.categories = None + self.status = None def time_left(self, time=None): """ @@ -227,6 +228,9 @@ def create_event(component, tz=UTC): encoded_categories.append(encode(category)) event.categories = encoded_categories + if component.get("status"): + event.status = component.get("status") + return event From d92a2eb735cc4dfa7a32b6c1b10701d65afb99c0 Mon Sep 17 00:00:00 2001 From: AndCycle Date: Wed, 10 Jun 2020 22:25:56 +0800 Subject: [PATCH 2/3] Add url event attribute --- icalevents/icalparser.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/icalevents/icalparser.py b/icalevents/icalparser.py index 3d383d0..096021a 100644 --- a/icalevents/icalparser.py +++ b/icalevents/icalparser.py @@ -51,6 +51,7 @@ def __init__(self): self.organizer = None self.categories = None self.status = None + self.url = None def time_left(self, time=None): """ @@ -142,6 +143,7 @@ def copy_to(self, new_start=None, uid=None): ne.created = self.created ne.last_modified = self.last_modified ne.categories = self.categories + ne.url = self.url return ne @@ -231,6 +233,9 @@ def create_event(component, tz=UTC): if component.get("status"): event.status = component.get("status") + if component.get("url"): + event.url = component.get("url") + return event From 0edd8b9d1903f63f145c612bf3cdf548b588105b Mon Sep 17 00:00:00 2001 From: Brian Hartvigsen Date: Sat, 30 Oct 2021 17:24:26 -0600 Subject: [PATCH 3/3] Add tests for status and url --- icalevents/icalparser.py | 5 ++-- test/test_data/status_and_url.ics | 41 +++++++++++++++++++++++++++++++ test/test_icalevents.py | 14 +++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 test/test_data/status_and_url.ics diff --git a/icalevents/icalparser.py b/icalevents/icalparser.py index 096021a..fcdf79c 100644 --- a/icalevents/icalparser.py +++ b/icalevents/icalparser.py @@ -143,6 +143,7 @@ def copy_to(self, new_start=None, uid=None): ne.created = self.created ne.last_modified = self.last_modified ne.categories = self.categories + ne.status = self.status ne.url = self.url return ne @@ -231,10 +232,10 @@ def create_event(component, tz=UTC): event.categories = encoded_categories if component.get("status"): - event.status = component.get("status") + event.status = encode(component.get("status")) if component.get("url"): - event.url = component.get("url") + event.url = encode(component.get("url")) return event diff --git a/test/test_data/status_and_url.ics b/test/test_data/status_and_url.ics new file mode 100644 index 0000000..be26ade --- /dev/null +++ b/test/test_data/status_and_url.ics @@ -0,0 +1,41 @@ +BEGIN:VCALENDAR +BEGIN:VTIMEZONE +TZID:Europe/Berlin +END:VTIMEZONE +BEGIN:VEVENT +DESCRIPTION:Event with Status and URL +SUMMARY:Tentative Event w/ Recurrance to test copy +STATUS:TENTATIVE +DTSTART;VALUE=DATE:20181030 +DTEND;VALUE=DATE:20181031 +RRULE:FREQ=WEEKLY;BYDAY=TU +END:VEVENT +BEGIN:VEVENT +DESCRIPTION:Event with Status and URL +SUMMARY:Confirmed Event +STATUS:CONFIRMED +URL:https://example.com/ +DTSTART;VALUE=DATE:20181030 +DTEND;VALUE=DATE:20181031 +END:VEVENT +BEGIN:VEVENT +DESCRIPTION:Event with Status +SUMMARY:Cancelled Event +STATUS:CANCELLED +DTSTART;VALUE=DATE:20181030 +DTEND;VALUE=DATE:20181031 +END:VEVENT +BEGIN:VEVENT +DESCRIPTION:Event with Status +SUMMARY:XPARAM Event +STATUS;X-SOMETHING=IGNOREME:CANCELLED +DTSTART;VALUE=DATE:20181030 +DTEND;VALUE=DATE:20181031 +END:VEVENT +BEGIN:VEVENT +DESCRIPTION:Event without Status +SUMMARY:Event +DTSTART;VALUE=DATE:20181030 +DTEND;VALUE=DATE:20181031 +END:VEVENT +END:VCALENDAR diff --git a/test/test_icalevents.py b/test/test_icalevents.py index f40d723..165d600 100644 --- a/test/test_icalevents.py +++ b/test/test_icalevents.py @@ -421,3 +421,17 @@ def test_transparent(self): self.assertEqual(e1.transparent, True, "respect transparency") self.assertEqual(e2.transparent, False, "respect opaqueness") + + def test_status_and_url(self): + ical = "test/test_data/status_and_url.ics" + start = date(2018, 10, 30) + end = date(2018, 10, 31) + + [ev1, ev2, ev3, ev4, ev5] = icalevents.events(file=ical, start=start, end=end) + self.assertEqual(ev1.status, "TENTATIVE") + self.assertEqual(ev1.url, None) + self.assertEqual(ev2.status, "CONFIRMED") + self.assertEqual(ev2.url, "https://example.com/") + self.assertEqual(ev3.status, "CANCELLED") + self.assertEqual(ev4.status, "CANCELLED") + self.assertEqual(ev5.status, None)