ungana

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | README

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:
Mungana/ical/ical_helper.py | 38+++++++++++++++++++++++++++++++++++++-
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