3 changed files with 4 additions and 137 deletions
@ -0,0 +1,3 @@ |
|||
[submodule "google_api_wrapper"] |
|||
path = google_api_wrapper |
|||
url = https://rlbrhost.ddns.net/git/rlbr/google_api_wrapper.git |
|||
@ -1,137 +0,0 @@ |
|||
# from __future__ import print_function |
|||
from apiclient import discovery |
|||
import datetime |
|||
from googleapiclient.discovery import build |
|||
from googleapiclient.errors import HttpError |
|||
|
|||
from oauth2client import client |
|||
from oauth2client import tools |
|||
from oauth2client.file import Storage |
|||
from oauth2client.service_account import ServiceAccountCredentials |
|||
|
|||
import httplib2 |
|||
import os |
|||
import pytz |
|||
import sys |
|||
import argparse |
|||
import tzlocal |
|||
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() |
|||
dt_fmt = '%Y-%m-%dT%H:%M:%S' |
|||
APPLICATION_NAME = 'Google Calendar API Python' |
|||
def dateTime(datetime): |
|||
if not datetime.tzinfo: |
|||
datetime = datetime.astimezone() |
|||
zone = tzlocal.get_localzone().zone |
|||
datetime = datetime.isoformat(timespec='seconds') |
|||
return { |
|||
"timeZone":zone, |
|||
"dateTime":datetime, |
|||
} |
|||
|
|||
class api: |
|||
def __init__(self,client_secret_file,credentials_dir,scopes = 'https://www.googleapis.com/auth/calendar'): |
|||
self.client_secret_file = client_secret_file |
|||
self.credentials_dir = credentials_dir |
|||
self.scopes = scopes |
|||
self._service = None |
|||
self._service_settime = None |
|||
self.calendars=self.get_calendars() |
|||
self.ids = dict((calendar['summary'].lower(),calendar['id']) for calendar in self.calendars) |
|||
|
|||
def get_credentials(self): |
|||
|
|||
credential_path = os.path.join(self.credentials_dir, |
|||
'token.json') |
|||
|
|||
store = Storage(credential_path) |
|||
credentials = store.get() |
|||
if not credentials or credentials.invalid: |
|||
flow = client.flow_from_clientsecrets(self.client_secret_file, self.scopes) |
|||
flow.user_agent = APPLICATION_NAME |
|||
if flags: |
|||
credentials = tools.run_flow(flow, store, flags) |
|||
else: # Needed only for compatibility with Python 2.6 |
|||
credentials = tools.run(flow, store) |
|||
print('Storing credentials to ' + credential_path) |
|||
return credentials |
|||
|
|||
def build_service(self): |
|||
credentials = self.get_credentials() |
|||
|
|||
http = credentials.authorize(httplib2.Http()) |
|||
|
|||
service = build('calendar', 'v3', http=http, cache_discovery=False) |
|||
return service |
|||
|
|||
def _needs_renewal(self): |
|||
now = datetime.datetime.today() |
|||
if self._service_settime: |
|||
return (now - self._service_settime) > datetime.timedelta(seconds = 60**2) |
|||
else: |
|||
return True |
|||
# elif |
|||
@property |
|||
def service(self): |
|||
if self._needs_renewal(): |
|||
service = self.build_service() |
|||
self._service = service |
|||
self._service_settime = datetime.datetime.today() |
|||
return service |
|||
else: |
|||
return self._service |
|||
|
|||
|
|||
def create_event(self, calendar_id, body): |
|||
|
|||
try: |
|||
calendar_id = self.ids[calendar_id] |
|||
except KeyError: |
|||
pass |
|||
service = self.service |
|||
event = service.events().insert(calendarId=calendar_id, body=body).execute() |
|||
return event['id'] |
|||
|
|||
def update_event(self,calendar_id, event_id, body): |
|||
try: |
|||
calendar_id = self.ids[calendar_id] |
|||
except KeyError: |
|||
pass |
|||
|
|||
service = self.service |
|||
try: |
|||
event = service.events().get(calendarId=calendar_id, eventId=event_id).execute() |
|||
except HttpError as e: |
|||
if e.resp.status==404: |
|||
return self.create_event(calendar_id, body) |
|||
|
|||
updated_event = service.events().update(calendarId=calendar_id, eventId=event['id'], body=body).execute() |
|||
return updated_event["id"] |
|||
|
|||
def get_calendars(self): |
|||
page_token = None |
|||
cl = [] |
|||
while True: |
|||
calendar_list = self.service.calendarList().list(pageToken=page_token).execute() |
|||
cl += list(calendar_list_entry for calendar_list_entry in calendar_list['items']) |
|||
page_token = calendar_list.get('nextPageToken') |
|||
if not page_token: |
|||
break |
|||
return cl |
|||
|
|||
def get_events(self,id): |
|||
service = self.service |
|||
try: |
|||
id = self.ids[id] |
|||
except KeyError: |
|||
pass |
|||
page_token = None |
|||
ret = [] |
|||
while True: |
|||
events = service.events().list(calendarId=id, pageToken=page_token).execute() |
|||
ret += events['items'] |
|||
page_token = events.get('nextPageToken') |
|||
if not page_token: |
|||
break |
|||
return ret |
|||
# if __name__ == "__main__": |
|||
# test = api(r"X:\Users\Ralphie\Downloads\client_secret.json",r"X:\Users\Ralphie\Downloads") |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue