Cleaned up oauth code based on feedback. Created FlowThreeLegged and OAuthCredentials classes.
diff --git a/samples/cmdline/buzz.py b/samples/cmdline/buzz.py
index e6b2ff4..b71f400 100644
--- a/samples/cmdline/buzz.py
+++ b/samples/cmdline/buzz.py
@@ -3,9 +3,10 @@
#
# Copyright 2010 Google Inc. All Rights Reserved.
-"""One-line documentation for discovery module.
+"""Simple command-line example for Buzz.
-A detailed description of discovery.
+Command-line application that retrieves the users
+latest content and then adds a new entry.
"""
__author__ = 'jcgregorio@google.com (Joe Gregorio)'
@@ -14,72 +15,17 @@
from apiclient.discovery import build
import httplib2
-import oauth2 as oauth
-import re
-import simplejson
-
-
-def oauth_wrap(consumer, token, http):
- """
- Args:
- http - An instance of httplib2.Http
- or something that acts like it.
-
- Returns:
- A modified instance of http that was passed in.
-
- Example:
-
- h = httplib2.Http()
- h = oauth_wrap(h)
-
- Grumble. You can't create a new OAuth
- subclass of httplib2.Authenication because
- it never gets passed the absolute URI, which is
- needed for signing. So instead we have to overload
- 'request' with a closure that adds in the
- Authorization header and then calls the original version
- of 'request()'.
- """
- request_orig = http.request
- signer = oauth.SignatureMethod_HMAC_SHA1()
-
- def new_request(uri, method="GET", body=None, headers=None,
- redirections=httplib2.DEFAULT_MAX_REDIRECTS, connection_type=None):
- """Modify the request headers to add the appropriate
- Authorization header."""
- req = oauth.Request.from_consumer_and_token(
- consumer, token, http_method=method, http_url=uri)
- req.sign_request(signer, consumer, token)
- if headers == None:
- headers = {}
- headers.update(req.to_header())
- headers['user-agent'] = 'jcgregorio-test-client'
- return request_orig(uri, method, body, headers,
- redirections, connection_type)
-
- http.request = new_request
- return http
-
-
-def get_wrapped_http():
- f = open("oauth_token.dat", "r")
- oauth_params = simplejson.loads(f.read())
-
- consumer = oauth.Consumer(
- oauth_params['consumer_key'], oauth_params['consumer_secret'])
- token = oauth.Token(
- oauth_params['oauth_token'], oauth_params['oauth_token_secret'])
-
- # Create a simple monkeypatch for httplib2.Http.request
- # just adds in the oauth authorization header and then calls
- # the original request().
- http = httplib2.Http()
- return oauth_wrap(consumer, token, http)
+import pickle
def main():
- http = get_wrapped_http()
+ f = open("oauth_token.dat", "r")
+ credentials = pickle.loads(f.read())
+ f.close()
+
+ http = httplib2.Http()
+ http = credentials.authorize(http)
+
p = build("buzz", "v1", http=http)
activities = p.activities()
activitylist = activities.list(scope='@self', userId='@me')
diff --git a/samples/cmdline/three_legged_dance.py b/samples/cmdline/three_legged_dance.py
index 31a22df..f0a4a20 100644
--- a/samples/cmdline/three_legged_dance.py
+++ b/samples/cmdline/three_legged_dance.py
@@ -1,17 +1,45 @@
-from apiclient.oauth import buzz_discovery, Flow3LO
+# Copyright (C) 2010 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.
-import simplejson
+"""Do the OAuth 1.0a three legged dance.
+
+Do the OAuth 1.0a three legged dance for
+a Buzz command line application. Store the generated
+credentials in a common file that is used by
+other example apps in the same directory.
+"""
+
+__author__ = 'jcgregorio@google.com (Joe Gregorio)'
+
+from apiclient.oauth import buzz_discovery
+from apiclient.oauth import FlowThreeLegged
+
+import pickle
user_agent = 'google-api-client-python-buzz-cmdline/1.0',
consumer_key = 'anonymous'
consumer_secret = 'anonymous'
-flow = Flow3LO(buzz_discovery, consumer_key, consumer_secret, user_agent,
- domain='anonymous',
- scope='https://www.googleapis.com/auth/buzz',
- xoauth_displayname='Google API Client for Python Example App')
+flow = FlowThreeLegged(buzz_discovery,
+ consumer_key='anonymous',
+ consumer_secret='anonymous',
+ user_agent='google-api-client-python-buzz-cmdline/1.0',
+ domain='anonymous',
+ scope='https://www.googleapis.com/auth/buzz',
+ xoauth_displayname='Google API Client Example App')
-authorize_url = flow.step1()
+authorize_url = flow.step1_get_authorize_url()
print 'Go to the following link in your browser:'
print authorize_url
@@ -20,17 +48,10 @@
accepted = 'n'
while accepted.lower() == 'n':
accepted = raw_input('Have you authorized me? (y/n) ')
-pin = raw_input('What is the PIN? ').strip()
+verification = raw_input('What is the verification code? ').strip()
-access_token = flow.step2_pin(pin)
-
-d = dict(
- consumer_key='anonymous',
- consumer_secret='anonymous'
- )
-
-d.update(access_token)
+credentials = flow.step2_exchange(verification)
f = open('oauth_token.dat', 'w')
-f.write(simplejson.dumps(d))
+f.write(pickle.dumps(credentials))
f.close()