refactor: change generate_ics params
This commit is contained in:
parent
dbaab483e5
commit
6f59460e60
|
|
@ -1,4 +1,5 @@
|
||||||
import datetime
|
import datetime
|
||||||
|
from typing import Iterator, Sequence, Text, Tuple
|
||||||
from icalendar import Event, Calendar, Timezone, TimezoneStandard
|
from icalendar import Event, Calendar, Timezone, TimezoneStandard
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -31,18 +32,17 @@ def _create_event(event_name, start, end):
|
||||||
return event
|
return event
|
||||||
|
|
||||||
|
|
||||||
def _iter_date_ranges(lst):
|
def _iter_date_ranges(days: Sequence[dict]) -> Iterator[Tuple[dict, dict]]:
|
||||||
if len(lst) == 0:
|
if len(days) == 0:
|
||||||
return []
|
return
|
||||||
|
|
||||||
if len(lst) == 1:
|
if len(days) == 1:
|
||||||
return [(lst[0], lst[0])]
|
yield days[0], days[0]
|
||||||
|
return
|
||||||
|
|
||||||
fr, to = lst[0], lst[0]
|
fr, to = days[0], days[0]
|
||||||
for cur in lst[1:]:
|
for cur in days[1:]:
|
||||||
if (cur.get("date") - to.get("date")).days == 1 and cur.get(
|
if (cur["date"] - to["date"]).days == 1 and cur["isOffDay"] == to["isOffDay"]:
|
||||||
"isOffDay"
|
|
||||||
) == to.get("isOffDay"):
|
|
||||||
to = cur
|
to = cur
|
||||||
else:
|
else:
|
||||||
yield fr, to
|
yield fr, to
|
||||||
|
|
@ -50,14 +50,8 @@ def _iter_date_ranges(lst):
|
||||||
yield fr, to
|
yield fr, to
|
||||||
|
|
||||||
|
|
||||||
def generate_ics(data, filename):
|
def generate_ics(days: Sequence[dict], filename: Text) -> None:
|
||||||
"""
|
"""Generate ics from days."""
|
||||||
将爬取的节假日JSON数据转换为ICS
|
|
||||||
|
|
||||||
Args:
|
|
||||||
filename: str
|
|
||||||
data: from `fetch_holiday`
|
|
||||||
"""
|
|
||||||
cal = Calendar()
|
cal = Calendar()
|
||||||
cal.add("VERSION", "2.0")
|
cal.add("VERSION", "2.0")
|
||||||
cal.add("METHOD", "PUBLISH")
|
cal.add("METHOD", "PUBLISH")
|
||||||
|
|
@ -65,17 +59,18 @@ def generate_ics(data, filename):
|
||||||
|
|
||||||
cal.add_component(_create_timezone())
|
cal.add_component(_create_timezone())
|
||||||
|
|
||||||
days = data.get("days", [])
|
days = sorted(days, key=lambda x: x["date"])
|
||||||
|
|
||||||
for day in days:
|
for day in days:
|
||||||
if isinstance(day.get("date"), str):
|
if isinstance(day.get("date"), str):
|
||||||
day["date"] = datetime.date(*map(int, day["date"].split("-")))
|
day["date"] = datetime.date(*map(int, day["date"].split("-")))
|
||||||
|
|
||||||
for fr, to in _iter_date_ranges(days):
|
for fr, to in _iter_date_ranges(days):
|
||||||
start = fr.get("date")
|
start = fr["date"]
|
||||||
end = to.get("date") + datetime.timedelta(days=1)
|
end = to["date"] + datetime.timedelta(days=1)
|
||||||
|
|
||||||
name = fr.get("name") + "假期"
|
name = fr["name"] + "假期"
|
||||||
if not fr.get("isOffDay"):
|
if not fr["isOffDay"]:
|
||||||
name = "上班(补" + name + ")"
|
name = "上班(补" + name + ")"
|
||||||
cal.add_component(_create_event(name, start, end))
|
cal.add_component(_create_event(name, start, end))
|
||||||
|
|
||||||
|
|
|
||||||
12
update.py
12
update.py
|
|
@ -71,22 +71,22 @@ def update_data(year: int) -> str:
|
||||||
cls=CustomJSONEncoder,
|
cls=CustomJSONEncoder,
|
||||||
)
|
)
|
||||||
|
|
||||||
generate_ics(data, filename=f"{year}.ics")
|
generate_ics(data['days'], filename=f"{year}.ics")
|
||||||
return filename
|
return filename
|
||||||
|
|
||||||
|
|
||||||
def update_holiday_ics(fr_year, to_year):
|
def update_main_ics(fr_year, to_year):
|
||||||
big_days = []
|
all_days = []
|
||||||
for year in range(fr_year, to_year + 1):
|
for year in range(fr_year, to_year + 1):
|
||||||
filename = _file_path(f"{year}.json")
|
filename = _file_path(f"{year}.json")
|
||||||
if not os.path.isfile(filename):
|
if not os.path.isfile(filename):
|
||||||
continue
|
continue
|
||||||
with open(filename, "r", encoding="utf8") as inf:
|
with open(filename, "r", encoding="utf8") as inf:
|
||||||
data = json.loads(inf.read())
|
data = json.loads(inf.read())
|
||||||
big_days.extend(data.get("days"))
|
all_days.extend(data.get("days"))
|
||||||
|
|
||||||
generate_ics(
|
generate_ics(
|
||||||
{"days": sorted(big_days, key=lambda x: x["date"])},
|
all_days,
|
||||||
filename="holiday-cn.ics",
|
filename="holiday-cn.ics",
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
@ -116,7 +116,7 @@ def main():
|
||||||
filenames.append(filename)
|
filenames.append(filename)
|
||||||
print("")
|
print("")
|
||||||
|
|
||||||
update_holiday_ics(now.year - 4, now.year + 1)
|
update_main_ics(now.year - 4, now.year + 1)
|
||||||
|
|
||||||
subprocess.run(["hub", "add", *filenames], check=True)
|
subprocess.run(["hub", "add", *filenames], check=True)
|
||||||
diff = subprocess.run(
|
diff = subprocess.run(
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user