11import yaml
22import sys
33import os
4- from datetime import datetime
4+ from datetime import datetime , tzinfo
55
66import ics
77import dateutil
88import dateutil .rrule
9+ from dateutil .tz import gettz
910
1011
1112interval_type = {
1920}
2021
2122
22- def event_from_yaml (event_yaml : dict ) -> ics .Event :
23+ def event_from_yaml (event_yaml : dict , tz : tzinfo = None ) -> ics .Event :
2324 d = event_yaml
2425 repeat = d .pop ('repeat' , None )
2526
@@ -73,6 +74,8 @@ def event_from_yaml(event_yaml: dict) -> ics.Event:
7374 ))
7475
7576 event .dtstamp = datetime .utcnow ().replace (tzinfo = dateutil .tz .UTC )
77+ if tz and event .floating :
78+ event .replace_timezone (tz )
7679 return event
7780
7881
@@ -85,13 +88,18 @@ def events_to_calendar(events: list) -> str:
8588def files_to_calendar (files : list ) -> ics .Calendar :
8689 """'main' function: list of files to our result"""
8790 all_events = [ ]
91+ name = None
8892 for f in files :
8993 if hasattr (f , 'read' ):
9094 calendar_yaml = yaml .load (f .read (), Loader = yaml .FullLoader )
9195 else :
9296 calendar_yaml = yaml .load (open (f , 'r' ), Loader = yaml .FullLoader )
97+ tz = None
98+ if 'meta' in calendar_yaml :
99+ if 'tz' in calendar_yaml ['meta' ]:
100+ tz = gettz (calendar_yaml ['meta' ]['tz' ])
93101 for event in calendar_yaml ['events' ]:
94- all_events .append (event_from_yaml (event ))
102+ all_events .append (event_from_yaml (event , tz = tz ))
95103 calendar = events_to_calendar (all_events )
96104 return calendar
97105
0 commit comments