furmeet_events_htmltable2ics/backend_code/timetable_parser/__init__.py
Adler Neves a4fe881f85
All checks were successful
continuous-integration/drone/push Build is passing
fix: interface present
2022-04-24 15:24:34 -03:00

76 lines
2.3 KiB
Python

#!/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()))