Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(74)

Side by Side Diff: third_party/google_api_python_client/googleapiclient/sample_tools.py

Issue 963953003: OAuth2 support in depot_tools (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/tools/depot_tools
Patch Set: restore git_cl Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright 2014 Google Inc. All Rights Reserved.
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 """Utilities for making samples.
16
17 Consolidates a lot of code commonly repeated in sample applications.
18 """
19
20 __author__ = 'jcgregorio@google.com (Joe Gregorio)'
21 __all__ = ['init']
22
23
24 import argparse
25 import httplib2
26 import os
27
28 from googleapiclient import discovery
29 from ...oauth2client import client
30 from ...oauth2client import file
31 from ...oauth2client import tools
32
33
34 def init(argv, name, version, doc, filename, scope=None, parents=[], discovery_f ilename=None):
35 """A common initialization routine for samples.
36
37 Many of the sample applications do the same initialization, which has now
38 been consolidated into this function. This function uses common idioms found
39 in almost all the samples, i.e. for an API with name 'apiname', the
40 credentials are stored in a file named apiname.dat, and the
41 client_secrets.json file is stored in the same directory as the application
42 main file.
43
44 Args:
45 argv: list of string, the command-line parameters of the application.
46 name: string, name of the API.
47 version: string, version of the API.
48 doc: string, description of the application. Usually set to __doc__.
49 file: string, filename of the application. Usually set to __file__.
50 parents: list of argparse.ArgumentParser, additional command-line flags.
51 scope: string, The OAuth scope used.
52 discovery_filename: string, name of local discovery file (JSON). Use when di scovery doc not available via URL.
53
54 Returns:
55 A tuple of (service, flags), where service is the service object and flags
56 is the parsed command-line flags.
57 """
58 if scope is None:
59 scope = 'https://www.googleapis.com/auth/' + name
60
61 # Parser command-line arguments.
62 parent_parsers = [tools.argparser]
63 parent_parsers.extend(parents)
64 parser = argparse.ArgumentParser(
65 description=doc,
66 formatter_class=argparse.RawDescriptionHelpFormatter,
67 parents=parent_parsers)
68 flags = parser.parse_args(argv[1:])
69
70 # Name of a file containing the OAuth 2.0 information for this
71 # application, including client_id and client_secret, which are found
72 # on the API Access tab on the Google APIs
73 # Console <http://code.google.com/apis/console>.
74 client_secrets = os.path.join(os.path.dirname(filename),
75 'client_secrets.json')
76
77 # Set up a Flow object to be used if we need to authenticate.
78 flow = client.flow_from_clientsecrets(client_secrets,
79 scope=scope,
80 message=tools.message_if_missing(client_secrets))
81
82 # Prepare credentials, and authorize HTTP object with them.
83 # If the credentials don't exist or are invalid run through the native client
84 # flow. The Storage object will ensure that if successful the good
85 # credentials will get written back to a file.
86 storage = file.Storage(name + '.dat')
87 credentials = storage.get()
88 if credentials is None or credentials.invalid:
89 credentials = tools.run_flow(flow, storage, flags)
90 http = credentials.authorize(http = httplib2.Http())
91
92 if discovery_filename is None:
93 # Construct a service object via the discovery service.
94 service = discovery.build(name, version, http=http)
95 else:
96 # Construct a service object using a local discovery document file.
97 with open(discovery_filename) as discovery_file:
98 service = discovery.build_from_document(
99 discovery_file.read(),
100 base='https://www.googleapis.com/',
101 http=http)
102 return (service, flags)
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698