You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

50 lines
1.5 KiB

  1. import datetime
  2. from dateutil import rrule
  3. from gapi.apis.calendar_api import get_calendars_from_api, calendar_api
  4. from gapi.apis.calendar_api.models import Event
  5. from scraper import get_classes, Class
  6. LOCATION = "5500 St Louis Ave, Chicago, IL 60625"
  7. def rrule_former(class_obj):
  8. days = class_obj.days
  9. start = datetime.datetime.combine(
  10. class_obj.date_range[0], class_obj.time_range[0]
  11. ).astimezone()
  12. end = datetime.datetime.combine(
  13. class_obj.date_range[1], class_obj.time_range[1]
  14. ).astimezone()
  15. days = [(day - 1) % 7 for day in days]
  16. ret = rrule.rrule(
  17. freq=rrule.WEEKLY, dtstart=start, wkst=rrule.SU, until=end, byweekday=days
  18. )
  19. return ret
  20. if __name__ == "__main__":
  21. with open("schedule.html", "rb") as file:
  22. data = file.read()
  23. _class: Class
  24. my_api = calendar_api(
  25. "Class upload", scopes=["https://www.googleapis.com/auth/calendar"]
  26. )
  27. calendars = get_calendars_from_api(my_api)
  28. classes = []
  29. for _class in get_classes(data):
  30. if _class.time_range is not None:
  31. e = Event(
  32. datetime.datetime.combine(_class.date_range[0], _class.time_range[0]),
  33. datetime.datetime.combine(_class.date_range[0], _class.time_range[1]),
  34. _class.title,
  35. "location: {}".format(_class.location),
  36. [rrule_former(_class)],
  37. location=LOCATION,
  38. )
  39. classes.append(e)
  40. for _class in classes:
  41. school_calendar.update_or_add_event(_class)