commit ca7016b8b0f351fb1e6b8c1bf89c524fcff013e7
parent ec67ff9a3b45b867fca835ad0f4894437eeed58c
Author: Carlosokumu <carlosokumu254@gmail.com>
Date: Thu, 25 Sep 2025 22:22:14 +0300
add methods to extract and parse datetime and duration for event
Diffstat:
1 file changed, 37 insertions(+), 1 deletion(-)
diff --git a/ungana/ical/ical_helper.py b/ungana/ical/ical_helper.py
@@ -1,4 +1,4 @@
-from datetime import datetime
+from datetime import datetime, timedelta
from typing import Any, Dict, Optional
from zoneinfo import ZoneInfo
from icalendar import Calendar, Event, vUri
@@ -154,6 +154,42 @@ class ICalHelper:
return attachments
+ @staticmethod
+ def extract_datetime(ev, field: str, fmt: str = "%Y-%m-%d %H:%M"):
+ val = ev.get(field)
+ if val is None:
+ return None
+
+ if isinstance(val, list):
+ for item in val:
+ if hasattr(item, "dt"):
+ dt = item.dt
+ if isinstance(dt, datetime):
+ return dt.strftime(fmt)
+ return str(dt)
+ return None
+
+ if hasattr(val, "dt"):
+ dt = val.dt
+ if isinstance(dt, datetime):
+ return dt.strftime(fmt)
+ return str(dt)
+
+ return str(val)
+
+
+
+ @staticmethod
+ def extract_duration(ev, field: str = "DURATION"):
+ val = ev.get(field)
+ if val is None:
+ return None
+ dur = val.dt
+ if isinstance(dur, timedelta):
+ hours, remainder = divmod(dur.total_seconds(), 3600)
+ minutes, _ = divmod(remainder, 60)
+ return f"{int(hours)}h {int(minutes)}m"
+ return str(dur)
@staticmethod