1   
  2   
  3   
  4   
  5   
  6   
  7   
  8   
  9   
 10   
 11   
 12   
 13   
 14   
 15  """Utilities for making samples. 
 16   
 17  Consolidates a lot of code commonly repeated in sample applications. 
 18  """ 
 19  from __future__ import absolute_import 
 20   
 21  __author__ = "jcgregorio@google.com (Joe Gregorio)" 
 22  __all__ = ["init"] 
 23   
 24   
 25  import argparse 
 26  import os 
 27   
 28  from googleapiclient import discovery 
 29  from googleapiclient.http import build_http 
 30   
 31   
 32 -def init( 
 33      argv, name, version, doc, filename, scope=None, parents=[], discovery_filename=None 
 34  ): 
  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 discovery 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      try: 
 59          from oauth2client import client 
 60          from oauth2client import file 
 61          from oauth2client import tools 
 62      except ImportError: 
 63          raise ImportError( 
 64              "googleapiclient.sample_tools requires oauth2client. Please install oauth2client and try again." 
 65          ) 
 66   
 67      if scope is None: 
 68          scope = "https://www.googleapis.com/auth/" + name 
 69   
 70       
 71      parent_parsers = [tools.argparser] 
 72      parent_parsers.extend(parents) 
 73      parser = argparse.ArgumentParser( 
 74          description=doc, 
 75          formatter_class=argparse.RawDescriptionHelpFormatter, 
 76          parents=parent_parsers, 
 77      ) 
 78      flags = parser.parse_args(argv[1:]) 
 79   
 80       
 81       
 82       
 83       
 84      client_secrets = os.path.join(os.path.dirname(filename), "client_secrets.json") 
 85   
 86       
 87      flow = client.flow_from_clientsecrets( 
 88          client_secrets, scope=scope, message=tools.message_if_missing(client_secrets) 
 89      ) 
 90   
 91       
 92       
 93       
 94       
 95      storage = file.Storage(name + ".dat") 
 96      credentials = storage.get() 
 97      if credentials is None or credentials.invalid: 
 98          credentials = tools.run_flow(flow, storage, flags) 
 99      http = credentials.authorize(http=build_http()) 
100   
101      if discovery_filename is None: 
102           
103          service = discovery.build(name, version, http=http) 
104      else: 
105           
106          with open(discovery_filename) as discovery_file: 
107              service = discovery.build_from_document( 
108                  discovery_file.read(), base="https://www.googleapis.com/", http=http 
109              ) 
110      return (service, flags) 
 111