Clean up more docs, move Latitude to OAuth 2.0. Reviewed in http://codereview.appspot.com/6301055/.

This commit is contained in:
Joe Gregorio
2012-06-07 13:36:06 -04:00
parent ce31a97fcf
commit 88f699fb5f
3 changed files with 122 additions and 41 deletions

View File

@@ -1,4 +1,4 @@
# Copyright (C) 2010 Google Inc. # Copyright (C) 2012 Google Inc.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@@ -68,6 +68,13 @@ class MediaUpload(object):
"""Describes a media object to upload. """Describes a media object to upload.
Base class that defines the interface of MediaUpload subclasses. Base class that defines the interface of MediaUpload subclasses.
Note that subclasses of MediaUpload may allow you to control the chunksize
when upload a media object. It is important to keep the size of the chunk as
large as possible to keep the upload efficient. Other factors may influence
the size of the chunk you use, particularly if you are working in an
environment where individual HTTP requests may have a hardcoded time limit,
such as under certain classes of requests under Google App Engine.
""" """
def getbytes(self, begin, end): def getbytes(self, begin, end):

View File

@@ -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"
}
}

View File

@@ -1,58 +1,118 @@
#!/usr/bin/python2.4 #!/usr/bin/python2.4
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
# #
# Copyright 2010 Google Inc. All Rights Reserved. # Copyright (C) 2012 Google Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Simple command-line example for Latitude. """Simple command-line example for Latitude.
Command-line application that sets the users Command-line application that sets the users
current location. current location.
Usage:
$ python latitude.py
You can also get help on all the command-line flags the program understands
by running:
$ python latitude.py --help
To get detailed log output run:
$ python latitude.py --logging_level=DEBUG
""" """
__author__ = 'jcgregorio@google.com (Joe Gregorio)' __author__ = 'jcgregorio@google.com (Joe Gregorio)'
import gflags
from apiclient.discovery import build
import httplib2 import httplib2
import pickle import logging
import os
import pprint
import sys
from apiclient.discovery import build from apiclient.discovery import build
from apiclient.oauth import FlowThreeLegged from oauth2client.file import Storage
from apiclient.ext.authtools import run from oauth2client.client import AccessTokenRefreshError
from apiclient.ext.file import Storage from oauth2client.client import flow_from_clientsecrets
from oauth2client.tools import run
# Uncomment to get detailed logging
# httplib2.debuglevel = 4
def main(): FLAGS = gflags.FLAGS
# 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 <http://code.google.com/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 <https://code.google.com/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/latitude.all.best',
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 main(argv):
# 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)
sys.exit(1)
# Set the logging according to the command-line flag
logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level))
# 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('latitude.dat') storage = Storage('latitude.dat')
credentials = storage.get() credentials = storage.get()
if credentials is None or credentials.invalid == True:
auth_discovery = build("latitude", "v1").auth_discovery()
flow = FlowThreeLegged(auth_discovery,
# You MUST have a consumer key and secret tied to a
# registered domain to use the latitude API.
#
# https://www.google.com/accounts/ManageDomains
consumer_key='REGISTERED DOMAIN NAME',
consumer_secret='KEY GIVEN DURING REGISTRATION',
user_agent='google-api-client-python-latitude/1.0',
domain='REGISTERED DOMAIN NAME',
scope='https://www.googleapis.com/auth/latitude',
xoauth_displayname='Google API Latitude Example',
location='current',
granularity='city'
)
credentials = run(flow, storage) if credentials is None or credentials.invalid:
credentials = run(FLOW, storage)
# Create an httplib2.Http object to handle our HTTP requests and authorize it
# with our good Credentials.
http = httplib2.Http() http = httplib2.Http()
http = credentials.authorize(http) http = credentials.authorize(http)
service = build("latitude", "v1", http=http) service = build("latitude", "v1", http=http)
try:
body = { body = {
"data": { "data": {
"kind": "latitude#location", "kind": "latitude#location",
@@ -62,7 +122,12 @@ def main():
"altitude": 35 "altitude": 35
} }
} }
print service.currentLocation().insert(body=body).execute() print service.currentLocation().insert(body=body).execute()
except AccessTokenRefreshError:
print ("The credentials have been revoked or expired, please re-run"
"the application to re-authorize")
if __name__ == '__main__': if __name__ == '__main__':
main() main(sys.argv)