import datetime from collections.abc import Iterator import argparse import datetime import urllib.parse import icalendar from personal_data.util import load_csv_file from ..data import HIDDEN_LABEL_PREFIX, HIDDEN_LABEL_TOTAL, RealizedWorkSample ZERO_DURATION = datetime.timedelta(seconds=0) HOUR = datetime.timedelta(hours=1) MINUTE = datetime.timedelta(minutes=1) def generate_calendar( samples: list[RealizedWorkSample], ) -> icalendar.Calendar: max_title_parts = 2 cal = icalendar.Calendar() cal.add('prodid', '-//personal_data_calendar//example.org//') cal.add('version', '2.0') for sample in samples: title = ' '.join(sample.labels) description = '' # Create event event = icalendar.Event() event.add('summary', title) event.add('description', description) event.add('dtstart', sample.start_at) event.add('dtend', sample.end_at) cal.add_component(event) del event return cal def generate_icalendar_file( samples: list[RealizedWorkSample], file: str, ) -> None: calendar = generate_calendar(samples) with open(file, 'wb') as f: f.write(calendar.to_ical())