|
|
|
@ -1,11 +1,11 @@ |
|
|
|
import datetime |
|
|
|
from googleapiclient.discovery import build |
|
|
|
from googleapiclient.errors import HttpError |
|
|
|
from googleapiclient.errors import * |
|
|
|
|
|
|
|
from oauth2client import client |
|
|
|
from oauth2client import tools |
|
|
|
from oauth2client.file import Storage |
|
|
|
from oauth2client.service_account import ServiceAccountCredentials |
|
|
|
# from oauth2client.service_account import ServiceAccountCredentials |
|
|
|
|
|
|
|
import httplib2 |
|
|
|
import os |
|
|
|
@ -14,16 +14,19 @@ import argparse |
|
|
|
|
|
|
|
flags = argparse.ArgumentParser(parents=[tools.argparser]).parse_args() |
|
|
|
|
|
|
|
HOUR = datetime.timedelta(seconds=60**2) |
|
|
|
|
|
|
|
|
|
|
|
class API: |
|
|
|
def __init__( |
|
|
|
self, |
|
|
|
service, |
|
|
|
scopes, |
|
|
|
app_name, |
|
|
|
client_secret_file, |
|
|
|
credentials_dir, |
|
|
|
version = 'v3', |
|
|
|
): |
|
|
|
self, |
|
|
|
service, |
|
|
|
scopes, |
|
|
|
app_name, |
|
|
|
client_secret_file, |
|
|
|
credentials_dir, |
|
|
|
version='v3', |
|
|
|
): |
|
|
|
self.service_name = service |
|
|
|
self.app_name = app_name |
|
|
|
self.client_secret_file = client_secret_file |
|
|
|
@ -32,6 +35,7 @@ class API: |
|
|
|
self._service = None |
|
|
|
self._service_settime = None |
|
|
|
self.version = version |
|
|
|
|
|
|
|
def get_credentials(self): |
|
|
|
|
|
|
|
credential_path = os.path.join(self.credentials_dir, |
|
|
|
@ -40,7 +44,8 @@ class API: |
|
|
|
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 = client.flow_from_clientsecrets( |
|
|
|
self.client_secret_file, self.scopes) |
|
|
|
flow.user_agent = self.app_name |
|
|
|
if flags: |
|
|
|
credentials = tools.run_flow(flow, store, flags) |
|
|
|
@ -54,13 +59,14 @@ class API: |
|
|
|
|
|
|
|
http = credentials.authorize(httplib2.Http()) |
|
|
|
|
|
|
|
service = build(self.service_name, self.version, http=http, cache_discovery=False) |
|
|
|
service = build(self.service_name, self.version, |
|
|
|
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) |
|
|
|
return (now - self._service_settime) > HOUR |
|
|
|
else: |
|
|
|
return True |
|
|
|
|
|
|
|
|