diff --git a/samples/keyring/README b/samples/keyring/README deleted file mode 100644 index 26e81d8..0000000 --- a/samples/keyring/README +++ /dev/null @@ -1,4 +0,0 @@ -Demonstrates storing Credentials in the system keyring. - -api: plus -keywords: cmdline pagination oauth2 diff --git a/samples/keyring/client_secrets.json b/samples/keyring/client_secrets.json deleted file mode 100644 index a232f37..0000000 --- a/samples/keyring/client_secrets.json +++ /dev/null @@ -1,9 +0,0 @@ -{ - "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/keyring/plus.py b/samples/keyring/plus.py deleted file mode 100644 index fb19bcf..0000000 --- a/samples/keyring/plus.py +++ /dev/null @@ -1,139 +0,0 @@ -#!/usr/bin/python2.4 -# -*- coding: utf-8 -*- -# -# 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. - -"""Simple command-line sample for the Google+ API. - -Command-line application that retrieves the users latest content and -then adds a new entry. - -Usage: - $ python plus.py - -You can also get help on all the command-line flags the program understands -by running: - - $ python plus.py --help - -To get detailed log output run: - - $ python plus.py --logging_level=DEBUG -""" - -__author__ = 'jcgregorio@google.com (Joe Gregorio)' - -import getpass -import gflags -import httplib2 -import logging -import os -import pprint -import sys - -from apiclient.discovery import build -from oauth2client.keyring_storage import Storage -from oauth2client.client import AccessTokenRefreshError -from oauth2client.client import flow_from_clientsecrets -from oauth2client.tools import run - - -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 -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/plus.me', - 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('Google_Plus_Sample', getpass.getuser()) - credentials = storage.get() - - 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 = credentials.authorize(http) - - service = build("plus", "v1", http=http) - - try: - person = service.people().get(userId='me').execute(http) - - print "Got your ID: %s" % person['displayName'] - print - print "%-040s -> %s" % ("[Activitity ID]", "[Content]") - - # Don't execute the request until we reach the paging loop below - request = service.activities().list( - userId=person['id'], collection='public') - # Loop over every activity and print the ID and a short snippet of content. - while ( request != None ): - activities_doc = request.execute() - for item in activities_doc.get('items', []): - print '%-040s -> %s' % (item['id'], item['object']['content'][:30]) - - request = service.activities().list_next(request, activities_doc) - - except AccessTokenRefreshError: - 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/threadqueue/README b/samples/threadqueue/README deleted file mode 100644 index c7d482d..0000000 --- a/samples/threadqueue/README +++ /dev/null @@ -1,4 +0,0 @@ -Demonstrates using threading and thread queues for handling a high volume of requests. - -api: -keywords: cmdline threading diff --git a/samples/threadqueue/main.py b/samples/threadqueue/main.py deleted file mode 100644 index 5b9764a..0000000 --- a/samples/threadqueue/main.py +++ /dev/null @@ -1,159 +0,0 @@ -# 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. -"""Sample for threading and queues. - -A simple sample that processes many requests by constructing a threadpool and -passing client requests by a thread queue to be processed. -""" -from apiclient.discovery import build -from apiclient.errors import HttpError -from oauth2client.file import Storage -from oauth2client.client import OAuth2WebServerFlow -from oauth2client.tools import run - -import Queue -import gflags -import httplib2 -import logging -import sys -import threading -import time - -# How many threads to start. -NUM_THREADS = 3 - -# A list of URLs to shorten. -BULK = [ - "https://code.google.com/apis/moderator/", - "https://code.google.com/apis/latitude/", - "https://code.google.com/apis/urlshortener/", - "https://code.google.com/apis/customsearch/", - "https://code.google.com/apis/shopping/search/", - "https://code.google.com/apis/predict", - "https://code.google.com/more", - ] - -FLAGS = gflags.FLAGS -FLOW = OAuth2WebServerFlow( - client_id='433807057907.apps.googleusercontent.com', - client_secret='jigtZpMApkRxncxikFpR+SFg', - scope='https://www.googleapis.com/auth/urlshortener', - user_agent='urlshortener-cmdline-sample/1.0') - -gflags.DEFINE_enum('logging_level', 'ERROR', - ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'], - 'Set the level of logging detail.') - -queue = Queue.Queue() - - -class Backoff: - """Exponential Backoff - - Implements an exponential backoff algorithm. - Instantiate and call loop() each time through - the loop, and each time a request fails call - fail() which will delay an appropriate amount - of time. - """ - - def __init__(self, maxretries=8): - self.retry = 0 - self.maxretries = maxretries - self.first = True - - def loop(self): - if self.first: - self.first = False - return True - else: - return self.retry < self.maxretries - - def fail(self): - self.retry += 1 - delay = 2 ** self.retry - time.sleep(delay) - - -def start_threads(credentials): - """Create the thread pool to process the requests.""" - - def process_requests(n): - http = httplib2.Http() - http = credentials.authorize(http) - loop = True - - - while loop: - request = queue.get() - backoff = Backoff() - while backoff.loop(): - try: - response = request.execute(http=http) - print "Processed: %s in thread %d" % (response['id'], n) - break - except HttpError, e: - if e.resp.status in [402, 403, 408, 503, 504]: - print "Increasing backoff, got status code: %d" % e.resp.status - backoff.fail() - except Exception, e: - print "Unexpected error. Exiting." + str(e) - loop = False - break - - print "Completed request" - queue.task_done() - - - for i in range(NUM_THREADS): - t = threading.Thread(target=process_requests, args=[i]) - t.daemon = True - t.start() - - -def main(argv): - try: - argv = FLAGS(argv) - except gflags.FlagsError, e: - print '%s\\nUsage: %s ARGS\\n%s' % (e, argv[0], FLAGS) - sys.exit(1) - - logging.getLogger().setLevel(getattr(logging, FLAGS.logging_level)) - - storage = Storage('threadqueue.dat') - credentials = storage.get() - if credentials is None or credentials.invalid == True: - credentials = run(FLOW, storage) - - start_threads(credentials) - - http = httplib2.Http() - http = credentials.authorize(http) - - service = build("urlshortener", "v1", http=http, - developerKey="AIzaSyDRRpR3GS1F1_jKNNM9HCNd2wJQyPG3oN0") - shortener = service.url() - - for url in BULK: - body = {"longUrl": url } - shorten_request = shortener.insert(body=body) - print "Adding request to queue" - queue.put(shorten_request) - - # Wait for all the requests to finish - queue.join() - - -if __name__ == "__main__": - main(sys.argv)