Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion khal/controllers.py
Original file line number Diff line number Diff line change
Expand Up @@ -765,7 +765,7 @@ def print_ics(conf, name, ics, format):
events = [item for item in cal.walk() if item.name == "VEVENT"]
events_grouped = defaultdict(list)
for event in events:
events_grouped[event["UID"]].append(event)
events_grouped[event.get("UID", f"khal-vevent-without-uid-{id(event)}")].append(event)

vevents = []
for uid in events_grouped:
Expand Down
5 changes: 4 additions & 1 deletion khal/khalendar/event.py
Original file line number Diff line number Diff line change
Expand Up @@ -347,7 +347,10 @@ def duration(self) -> dt.timedelta:

@property
def uid(self) -> str:
return self._vevents[self.ref]["UID"]
try:
return self._vevents[self.ref]["UID"]
except KeyError:
return f"khal-vevent-without-uid-{id(self.ref)}"

@property
def organizer(self) -> str:
Expand Down
5 changes: 5 additions & 0 deletions tests/event_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -736,6 +736,11 @@ def test_sort_event_summary():
assert event1 < event2


def test_uid_missing():
event_uid = _get_text("event_uid_missing")
assert event_uid.uid.startswith("khal-vevent-without-uid-")


def test_create_timezone_in_future():
"""Events too far into the future (after the next DST transition) used
to be created with invalid timezones"""
Expand Down
8 changes: 8 additions & 0 deletions tests/ics/event_uid_missing.ics
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
BEGIN:VCALENDAR
VERSION:2.0
BEGIN:VEVENT
SUMMARY:Missing uid
DTSTART;TZID=Europe/Berlin:20140707T090000
DTEND;TZID=Europe/Berlin:20140707T140000
END:VEVENT
END:VCALENDAR
Loading