Skip to content

Commit 6dbc75b

Browse files
authored
Add calendar name field (#13)
Also move timezone to root of yaml file This will eventually be supported through ics-py/ics-py#312, but this is a quick workaround in the interim.
1 parent d44d56d commit 6dbc75b

4 files changed

Lines changed: 45 additions & 17 deletions

File tree

example/another_calendar.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
name: Another Calendar
12
events:
23
- summary: Another Event
34
begin: 2021-09-21 10:00:00 -07:00

example/test_calendar.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
meta:
2-
tz: America/Los_Angeles
1+
name: Test Calendar
2+
timezone: America/Los_Angeles
33

44
events:
55
- summary: Event of the Century

tests/test_calendar.py

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
from yaml2ics import events_to_calendar, files_to_calendar
66

77

8+
def iowrap(s):
9+
return io.StringIO(textwrap.dedent(s))
10+
11+
812
def test_calendar_structure():
913
cal = events_to_calendar([])
1014
cal_str = cal.serialize()
@@ -15,16 +19,14 @@ def test_calendar_structure():
1519
def test_calendar_event():
1620
cal = files_to_calendar(
1721
[
18-
io.StringIO(
19-
textwrap.dedent(
20-
"""
22+
iowrap(
23+
"""
2124
events:
2225
- summary: Earth Day
2326
begin: 2021-04-22
2427
url: https://earthday.org
2528
location: Earth
2629
"""
27-
)
2830
)
2931
]
3032
)
@@ -37,11 +39,9 @@ def test_calendar_event():
3739
def test_calendar_default_timezone():
3840
cal = files_to_calendar(
3941
[
40-
io.StringIO(
41-
textwrap.dedent(
42-
"""
43-
meta:
44-
tz: Europe/Helsinki
42+
iowrap(
43+
"""
44+
timezone: Europe/Helsinki
4545
4646
events:
4747
- summary: New year's day
@@ -55,7 +55,6 @@ def test_calendar_default_timezone():
5555
- summary: Earth day (all day)
5656
begin: 2022-04-22
5757
"""
58-
)
5958
)
6059
]
6160
)
@@ -76,3 +75,23 @@ def test_calendar_default_timezone():
7675
# 1 Feb midnight
7776
assert "DTSTART:20211231T220000Z" # 1 jan
7877
assert "DTSTART:20220131T220000Z" # 1 feb
78+
79+
80+
def test_calendar_name():
81+
cal = files_to_calendar(
82+
[
83+
iowrap(
84+
"""
85+
name: My First Calendar
86+
"""
87+
),
88+
iowrap(
89+
"""
90+
name: My Second Calendar
91+
"""
92+
),
93+
]
94+
)
95+
cal_str = cal.serialize()
96+
assert "NAME:My Second Calendar" in cal_str
97+
assert cal_str.count("NAME:") == 1

yaml2ics.py

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,18 +97,26 @@ def events_to_calendar(events: list) -> str:
9797
def files_to_calendar(files: list) -> ics.Calendar:
9898
"""'main' function: list of files to our result"""
9999
all_events = []
100+
name = None
101+
100102
for f in files:
101103
if hasattr(f, "read"):
102104
calendar_yaml = yaml.load(f.read(), Loader=yaml.FullLoader)
103105
else:
104106
calendar_yaml = yaml.load(open(f, "r"), Loader=yaml.FullLoader)
105-
tz = None
106-
if "meta" in calendar_yaml:
107-
if "tz" in calendar_yaml["meta"]:
108-
tz = gettz(calendar_yaml["meta"]["tz"])
109-
for event in calendar_yaml["events"]:
107+
tz = calendar_yaml.get("timezone", None)
108+
if tz is not None:
109+
tz = gettz(tz)
110+
for event in calendar_yaml.get("events", []):
110111
all_events.append(event_from_yaml(event, tz=tz))
112+
113+
# We can only provide one calendar name, so we'll
114+
# keep the last one we find
115+
name = calendar_yaml.get("name", name)
116+
111117
calendar = events_to_calendar(all_events)
118+
if name is not None:
119+
calendar.extra.append(ics.ContentLine(name="NAME", value=name))
112120
return calendar
113121

114122

0 commit comments

Comments
 (0)