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.

84 lines
2.6 KiB

  1. from api import api
  2. import datetime
  3. import argparse
  4. import tzlocal
  5. flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args()
  6. APPLICATION_NAME = 'Google Calendar API Python'
  7. def dateTime(datetime):
  8. if not datetime.tzinfo:
  9. datetime = datetime.astimezone()
  10. zone = tzlocal.get_localzone().zone
  11. datetime = datetime.isoformat(timespec='seconds')
  12. return {
  13. "timeZone":zone,
  14. "dateTime":datetime,
  15. }
  16. class calendar_api(api):
  17. def __init__(
  18. self,
  19. app_name,
  20. client_secret_file,
  21. credentials_dir,
  22. scopes = 'https://www.googleapis.com/auth/calendar'
  23. version = '3',
  24. ):
  25. super().__init__('calendar',scopes,app_name,client_secret_file,credentials_dir,version)
  26. self.calendars=self.get_calendars()
  27. self.ids = dict((calendar['summary'].lower(),calendar['id']) for calendar in self.calendars)
  28. elif
  29. def create_event(self, calendar_id, body):
  30. try:
  31. calendar_id = self.ids[calendar_id]
  32. except KeyError:
  33. pass
  34. service = self.service
  35. event = service.events().insert(calendarId=calendar_id, body=body).execute()
  36. return event['id']
  37. def update_event(self,calendar_id, event_id, body):
  38. try:
  39. calendar_id = self.ids[calendar_id]
  40. except KeyError:
  41. pass
  42. service = self.service
  43. try:
  44. event = service.events().get(calendarId=calendar_id, eventId=event_id).execute()
  45. except HttpError as e:
  46. if e.resp.status==404:
  47. return self.create_event(calendar_id, body)
  48. updated_event = service.events().update(calendarId=calendar_id, eventId=event['id'], body=body).execute()
  49. return updated_event["id"]
  50. def get_calendars(self):
  51. page_token = None
  52. cl = []
  53. while True:
  54. calendar_list = self.service.calendarList().list(pageToken=page_token).execute()
  55. cl += list(calendar_list_entry for calendar_list_entry in calendar_list['items'])
  56. page_token = calendar_list.get('nextPageToken')
  57. if not page_token:
  58. break
  59. return cl
  60. def get_events(self,id):
  61. service = self.service
  62. try:
  63. id = self.ids[id]
  64. except KeyError:
  65. pass
  66. page_token = None
  67. ret = []
  68. while True:
  69. events = service.events().list(calendarId=id, pageToken=page_token).execute()
  70. ret += events['items']
  71. page_token = events.get('nextPageToken')
  72. if not page_token:
  73. break
  74. return ret