Skip to content

Instantly share code, notes, and snippets.

@enkeboll
Created January 31, 2020 19:09
Show Gist options
  • Save enkeboll/4106f48a40b7bc3848fd5383d3c5d432 to your computer and use it in GitHub Desktop.
Save enkeboll/4106f48a40b7bc3848fd5383d3c5d432 to your computer and use it in GitHub Desktop.
Create flatiron school calendar
import datetime
from operator import attrgetter
from ics import Calendar, Event
BREAK_BEGIN = datetime.date(2020, 12, 28)
def runs_over_break(start_date):
if (BREAK_BEGIN > start_date and
BREAK_BEGIN < start_date + datetime.timedelta(weeks=15, days=5)):
return True
return False
def create_cal(filename, start_date):
with open(filename, 'r') as f:
c = Calendar(f.read())
sorted_events = sorted(filter(lambda e: e.all_day, c.events),
key=attrgetter('_begin'))
day_diff = (start_date - sorted_events[0].begin.date()).days
needs_offset = runs_over_break(start_date)
for e in sorted_events:
e.end = e.end.shift(days=day_diff - 1)
e.begin = e.begin.shift(days=day_diff)
if needs_offset:
if e.begin.date() >= BREAK_BEGIN:
e.end = e.end.shift(weeks=1)
e.begin = e.begin.shift(weeks=1)
e.make_all_day()
e.alarms = []
c.events = set(sorted_events)
return c
if __name__ == '__main__':
filename = './DC-DS-082619_flatironschool.com_7f8u2ulitiktbjns0nnja9d8hg@group.calendar.google.com.ics'
start_date = datetime.date(2020, 1, 6)
new_cal = create_cal(filename, start_date)
with open('./{start_date.isoformat()}.ics', 'w') as f:
f.write(str(new_cal))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment