diff --git a/samples/audit/audit.py b/samples/audit/audit.py index e934093..c34de84 100644 --- a/samples/audit/audit.py +++ b/samples/audit/audit.py @@ -39,54 +39,59 @@ __author__ = 'rahulpaul@google.com (Rahul Paul)' import gflags import httplib2 import logging -import re -import simplejson +import os +import pprint import sys from apiclient.discovery import build from oauth2client.client import AccessTokenRefreshError -from oauth2client.client import OAuth2WebServerFlow +from oauth2client.client import flow_from_clientsecrets from oauth2client.file import Storage from oauth2client.tools import run + FLAGS = gflags.FLAGS -# Set up a Flow object to be used if we need to authenticate. This -# sample uses OAuth 2.0, and we set up the OAuth2WebServerFlow with -# the information it needs to authenticate. Note that it is called -# the Web Server Flow, but it can also handle the flow for native -# applications -# When creating credentials for this application be sure to choose an -# Application type of 'Installed application'. -FLOW = OAuth2WebServerFlow( - client_id='880851855448.apps.googleusercontent.com', - client_secret='d8nBjlNBpOMH_LITqz31IMdI', - scope='https://www.googleapis.com/auth/apps/reporting/audit.readonly', - user_agent='audit-cmdline-sample/1.0') +# CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this +# application, including client_id and client_secret, which are found +# on the API Access tab on the Google APIs +# Console +CLIENT_SECRETS = 'client_secrets.json' -# The flags module makes defining command-line options easy for +# Helpful message to display in the browser if the CLIENT_SECRETS file +# is missing. +MISSING_CLIENT_SECRETS_MESSAGE = """ +WARNING: Please configure OAuth 2.0 + +To make this sample run you will need to populate the client_secrets.json file +found at: + + %s + +with information from the APIs Console . + +""" % os.path.join(os.path.dirname(__file__), CLIENT_SECRETS) + +# Set up a Flow object to be used if we need to authenticate. +FLOW = flow_from_clientsecrets(CLIENT_SECRETS, + scope='https://www.googleapis.com/auth/apps/reporting/audit.readonly', + message=MISSING_CLIENT_SECRETS_MESSAGE) + + +# The gflags module makes defining command-line options easy for # applications. Run this program with the '--help' argument to see # all the flags that it understands. gflags.DEFINE_enum('logging_level', 'ERROR', - ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], - 'Set the level of logging detail.') - - -def print_activities(activity_list): - events = activity_list['items'] - print '\nRetrieved %d activities.' % len(events) - for i in range(len(events)): - print '\nEvent %d : %s' % (i, simplejson.JSONEncoder().encode(events[i])) - print '\nNext URL : %s' % (activity_list['next']) - print '======================================================================' + ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], + 'Set the level of logging detail.') def main(argv): - # Let the flags module process the command-line arguments + # Let the gflags module process the command-line arguments try: argv = FLAGS(argv) except gflags.FlagsError, e: - print '%s\nUsage: %s ARGS\n%s' % (e, argv[0], FLAGS) + print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS) sys.exit(1) # Set the logging according to the command-line flag @@ -95,9 +100,10 @@ def main(argv): # If the Credentials don't exist or are invalid run through the native client # flow. The Storage object will ensure that if successful the good # Credentials will get written back to a file. - storage = Storage('audit.dat') + storage = Storage('plus.dat') credentials = storage.get() - if not credentials or credentials.invalid: + + if credentials is None or credentials.invalid: credentials = run(FLOW, storage) # Create an httplib2.Http object to handle our HTTP requests and authorize it @@ -131,7 +137,8 @@ def main(argv): except AccessTokenRefreshError: print ('The credentials have been revoked or expired, please re-run' - 'the application to re-authorize') + 'the application to re-authorize') if __name__ == '__main__': main(sys.argv) + diff --git a/samples/audit/client_secrets.json b/samples/audit/client_secrets.json new file mode 100644 index 0000000..a232f37 --- /dev/null +++ b/samples/audit/client_secrets.json @@ -0,0 +1,9 @@ +{ + "web": { + "client_id": "[[INSERT CLIENT ID HERE]]", + "client_secret": "[[INSERT CLIENT SECRET HERE]]", + "redirect_uris": [], + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://accounts.google.com/o/oauth2/token" + } +} diff --git a/samples/moderator/client_secrets.json b/samples/moderator/client_secrets.json new file mode 100644 index 0000000..a232f37 --- /dev/null +++ b/samples/moderator/client_secrets.json @@ -0,0 +1,9 @@ +{ + "web": { + "client_id": "[[INSERT CLIENT ID HERE]]", + "client_secret": "[[INSERT CLIENT SECRET HERE]]", + "redirect_uris": [], + "auth_uri": "https://accounts.google.com/o/oauth2/auth", + "token_uri": "https://accounts.google.com/o/oauth2/token" + } +} diff --git a/samples/moderator/moderator.py b/samples/moderator/moderator.py index e92ef1b..79e99c0 100644 --- a/samples/moderator/moderator.py +++ b/samples/moderator/moderator.py @@ -37,31 +37,44 @@ __author__ = 'jcgregorio@google.com (Joe Gregorio)' import gflags import httplib2 import logging +import os import pprint import sys from apiclient.discovery import build -from oauth2client.file import Storage from oauth2client.client import AccessTokenRefreshError -from oauth2client.client import OAuth2WebServerFlow +from oauth2client.client import flow_from_clientsecrets +from oauth2client.file import Storage from oauth2client.tools import run + FLAGS = gflags.FLAGS -# Set up a Flow object to be used if we need to authenticate. This -# sample uses OAuth 2.0, and we set up the OAuth2WebServerFlow with -# the information it needs to authenticate. Note that it is called -# the Web Server Flow, but it can also handle the flow for native -# applications -# The client_id client_secret are copied from the API Access tab on -# the Google APIs Console . When -# creating credentials for this application be sure to choose an Application -# type of "Installed application". -FLOW = OAuth2WebServerFlow( - client_id='433807057907.apps.googleusercontent.com', - client_secret='jigtZpMApkRxncxikFpR+SFg', +# CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this +# application, including client_id and client_secret, which are found +# on the API Access tab on the Google APIs +# Console +CLIENT_SECRETS = 'client_secrets.json' + +# Helpful message to display in the browser if the CLIENT_SECRETS file +# is missing. +MISSING_CLIENT_SECRETS_MESSAGE = """ +WARNING: Please configure OAuth 2.0 + +To make this sample run you will need to populate the client_secrets.json file +found at: + + %s + +with information from the APIs Console . + +""" % os.path.join(os.path.dirname(__file__), CLIENT_SECRETS) + +# Set up a Flow object to be used if we need to authenticate. +FLOW = flow_from_clientsecrets(CLIENT_SECRETS, scope='https://www.googleapis.com/auth/moderator', - user_agent='moderator-cmdline-sample/1.0') + message=MISSING_CLIENT_SECRETS_MESSAGE) + # The gflags module makes defining command-line options easy for # applications. Run this program with the '--help' argument to see @@ -85,8 +98,9 @@ def main(argv): # If the Credentials don't exist or are invalid run through the native client # flow. The Storage object will ensure that if successful the good # Credentials will get written back to a file. - storage = Storage('moderator.dat') + storage = Storage('plus.dat') credentials = storage.get() + if credentials is None or credentials.invalid: credentials = run(FLOW, storage) @@ -95,54 +109,55 @@ def main(argv): http = httplib2.Http() http = credentials.authorize(http) - service = build("moderator", "v1", http=http) + service = build('moderator', 'v1', http=http) try: # Create a new Moderator series. series_body = { - "description": "Share and rank tips for eating healthy and cheap!", - "name": "Eating Healthy & Cheap", - "videoSubmissionAllowed": False + 'description': 'Share and rank tips for eating healthy and cheap!', + 'name': 'Eating Healthy & Cheap', + 'videoSubmissionAllowed': False } series = service.series().insert(body=series_body).execute() - print "Created a new series" + print 'Created a new series' # Create a new Moderator topic in that series. topic_body = { - "description": "Share your ideas on eating healthy!", - "name": "Ideas", - "presenter": "liz" + 'description': 'Share your ideas on eating healthy!', + 'name': 'Ideas', + 'presenter': 'liz' } topic = service.topics().insert(seriesId=series['id']['seriesId'], body=topic_body).execute() - print "Created a new topic" + print 'Created a new topic' # Create a new Submission in that topic. submission_body = { - "attachmentUrl": "http://www.youtube.com/watch?v=1a1wyc5Xxpg", - "attribution": { - "displayName": "Bashan", - "location": "Bainbridge Island, WA" + 'attachmentUrl': 'http://www.youtube.com/watch?v=1a1wyc5Xxpg', + 'attribution': { + 'displayName': 'Bashan', + 'location': 'Bainbridge Island, WA' }, - "text": "Charlie Ayers @ Google" + 'text': 'Charlie Ayers @ Google' } submission = service.submissions().insert(seriesId=topic['id']['seriesId'], topicId=topic['id']['topicId'], body=submission_body).execute() - print "Inserted a new submisson on the topic" + print 'Inserted a new submisson on the topic' # Vote on that newly added Submission. vote_body = { - "vote": "PLUS" + 'vote': 'PLUS' } service.votes().insert(seriesId=topic['id']['seriesId'], submissionId=submission['id']['submissionId'], body=vote_body) - print "Voted on the submission" + print 'Voted on the submission' except AccessTokenRefreshError: - print ("The credentials have been revoked or expired, please re-run" - "the application to re-authorize") + print ('The credentials have been revoked or expired, please re-run' + 'the application to re-authorize') if __name__ == '__main__': main(sys.argv) + diff --git a/samples/storage_serviceaccount_appengine/main.py b/samples/storage_serviceaccount_appengine/main.py index 738a109..1734e4f 100644 --- a/samples/storage_serviceaccount_appengine/main.py +++ b/samples/storage_serviceaccount_appengine/main.py @@ -17,17 +17,17 @@ """This application produces formatted listings for Google Cloud Storage buckets. -It takes a bucket name in the URL path and does an HTTP GET on the -corresponding Google Cloud Storage URL to obtain a listing of the -bucket contents. For example, if this app is invoked with the URI -http://bucket-list.appspot.com/foo, it would remove the bucket name -'foo', append it to the Google Cloud Storage service URI and send -a GET request to the resulting URI. The bucket listing is returned -in an XML document, which is prepended with a reference to an XSLT -style sheet for human readable presentation. +It takes a bucket name in the URL path and does an HTTP GET on the +corresponding Google Cloud Storage URL to obtain a listing of the bucket +contents. For example, if this app is invoked with the URI +http://bucket-list.appspot.com/foo, it would remove the bucket name 'foo', +append it to the Google Cloud Storage service URI and send a GET request to +the resulting URI. The bucket listing is returned in an XML document, which is +prepended with a reference to an XSLT style sheet for human readable +presentation. -More information about using Google App Engine apps and service accounts -to call Google APIs can be found here: +More information about using Google App Engine apps and service accounts to +call Google APIs can be found here: @@ -73,7 +73,7 @@ class MainHandler(webapp.RequestHandler): err = 'Error: ' + str(resp.status) + ', bucket: ' + bucket + \ ', response: ' + str(content) raise Exception(err) - # Edit returned bucket listing XML to insert a reference to our style + # Edit returned bucket listing XML to insert a reference to our style # sheet for nice formatting and send results to client. content = re.sub('( -# The client_id client_secret are copied from the API Access tab on -# the Google APIs Console . When -# creating credentials for this application be sure to choose an Application -# type of "Installed application". -FLOW = OAuth2WebServerFlow( - client_id='[[CLIENT ID GOES HERE]]', - client_secret='[[CLIENT SECRET GOES HERE]]', +# CLIENT_SECRETS, name of a file containing the OAuth 2.0 information for this +# application, including client_id and client_secret, which are found +# on the API Access tab on the Google APIs +# Console +CLIENT_SECRETS = 'client_secrets.json' + +# Helpful message to display in the browser if the CLIENT_SECRETS file +# is missing. +MISSING_CLIENT_SECRETS_MESSAGE = """ +WARNING: Please configure OAuth 2.0 + +To make this sample run you will need to populate the client_secrets.json file +found at: + + %s + +with information from the APIs Console . + +""" % os.path.join(os.path.dirname(__file__), CLIENT_SECRETS) + +# Set up a Flow object to be used if we need to authenticate. +FLOW = flow_from_clientsecrets(CLIENT_SECRETS, scope='https://www.googleapis.com/auth/urlshortener', - user_agent='urlshortener-cmdline-sample/1.0') + message=MISSING_CLIENT_SECRETS_MESSAGE) + # The gflags module makes defining command-line options easy for # applications. Run this program with the '--help' argument to see @@ -86,8 +99,9 @@ def main(argv): # If the Credentials don't exist or are invalid run through the native client # flow. The Storage object will ensure that if successful the good # Credentials will get written back to a file. - storage = Storage('urlshortener.dat') + storage = Storage('plus.dat') credentials = storage.get() + if credentials is None or credentials.invalid: credentials = run(FLOW, storage) @@ -96,14 +110,14 @@ def main(argv): http = httplib2.Http() http = credentials.authorize(http) - service = build("urlshortener", "v1", http=http) + service = build('urlshortener', 'v1', http=http) try: url = service.url() # Create a shortened URL by inserting the URL into the url collection. - body = {"longUrl": "http://code.google.com/apis/urlshortener/" } + body = {'longUrl': 'http://code.google.com/apis/urlshortener/' } resp = url.insert(body=body).execute() pprint.pprint(resp) @@ -113,10 +127,9 @@ def main(argv): resp = url.get(shortUrl=short_url).execute() pprint.pprint(resp) - except AccessTokenRefreshError: - print ("The credentials have been revoked or expired, please re-run" - "the application to re-authorize") + print ('The credentials have been revoked or expired, please re-run' + 'the application to re-authorize') if __name__ == '__main__': main(sys.argv)