#!/usr/bin/env python3 # -*- encoding: utf-8 -*- import datetime import hashlib import json from typing import Union from ics import Calendar, Event from .cli import (AxisMeaning, ContentMeaning, Format, Source, into_timezone, parseArguments) def main_decomposed_args(origin: Source, path: str, format_: Format, line: AxisMeaning, column: AxisMeaning, content: ContentMeaning, year: int, month: int, day: int, lang: str, timezone_: Union[datetime.tzinfo, str], ) -> Calendar: timezone = (into_timezone(timezone_) if isinstance(timezone_, str) else timezone_) if line == column: raise ValueError('Line and column meanings must be different') should_transpose = column.value == 'time' table = format_[origin[path]].parse(should_transpose) table.interpret_lang( 'EN,ES,PT'.split(','), lang, content.as_index() ) arg_ts = (year, month, day) table.interpret_line_labels_as_time_series(arg_ts) events = table.get_column_sequences() calendar = Calendar() for ((start, end), place, (name, description, language)) in events: ev = json.dumps((int(start.timestamp()), int(end.timestamp()), place, name, description, language)) evh = hashlib.md5(ev.encode('ascii')).hexdigest() start = timezone.localize(start) end = timezone.localize(end) calendar_event = Event(name=name, begin=start, end=end, location=place, uid=f'{evh}@table2ics') if description != '': calendar_event.description = description if language != '': calendar_event.classification = language calendar.events.add(calendar_event) return calendar def main_namespace_args(args) -> Calendar: return main_decomposed_args( args.origin, args.path, args.format, args.line, args.column, args.content, args.year, args.month, args.day, args.lang, args.timezone, ) def main(): print(main_namespace_args(parseArguments()))