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 create_title(sample: RealizedWorkSample) -> str: ls = [] for label_and_type in sample.labels: if label_and_type.startswith(HIDDEN_LABEL_PREFIX): continue if label_and_type.startswith('author:'): continue ls.append(label_and_type) return ' '.join(ls) 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 = create_title(sample) 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) for label_and_type in sample.labels: if label_and_type.startswith('author:'): event.add('organizer', 'mailto:'+label_and_type.removeprefix('author:')) 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())