diff --git a/samples/maps_engine/README b/samples/maps_engine/README new file mode 100644 index 0000000..4d6f150 --- /dev/null +++ b/samples/maps_engine/README @@ -0,0 +1,8 @@ +This sample code demonstrates use of Google Maps Engine. These samples do not +make use of the Discovery Service, but do use the the httplib2 library to make +authenticated requests. For more information on Google Maps Engine, see +developers.google.com/maps-engine/documentation/ + +api: mapsengine +keywords: maps engine mapsengine +author: Josh Livni diff --git a/samples/maps_engine/maps_engine.py b/samples/maps_engine/maps_engine.py new file mode 100644 index 0000000..4eecb82 Binary files /dev/null and b/samples/maps_engine/maps_engine.py differ diff --git a/samples/maps_engine/polygons.prj b/samples/maps_engine/polygons.prj new file mode 100644 index 0000000..152e8d3 Binary files /dev/null and b/samples/maps_engine/polygons.prj differ diff --git a/samples/maps_engine/sample_tools.py b/samples/maps_engine/sample_tools.py new file mode 100644 index 0000000..a08bd71 --- /dev/null +++ b/samples/maps_engine/sample_tools.py @@ -0,0 +1,96 @@ +# Copyright 2013 Google Inc. All Rights Reserved. +# +# 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. + +"""Utilities for making samples. + +Consolidates a lot of code commonly repeated in sample applications. + +This modified version returns http instead of a built service. Originally +https://google-api-python-client.googlecode.com/hg/apiclient/sample_tools.py +""" + +__author__ = 'jcgregorio@google.com (Joe Gregorio)' +__all__ = ['init'] + + +import argparse +import os + +import httplib2 +from oauth2client import client +from oauth2client import file as oauth2client_file +from oauth2client import tools + + +def init(argv, name, version, doc, filename, scope=None, parents=[]): + """A common initialization routine for samples. + + Many of the sample applications do the same initialization, which has now + been consolidated into this function. This function uses common idioms found + in almost all the samples, i.e. for an API with name 'apiname', the + credentials are stored in a file named apiname.dat, and the + client_secrets.json file is stored in the same directory as the application + main file. + + Args: + argv: list of string, the command-line parameters of the application. + name: string, name of the API. + version: string, version of the API. + doc: string, description of the application. Usually set to __doc__. + filename: string, filename of the application. Usually set to __file__. + scope: string, The OAuth scope used. + parents: list of argparse.ArgumentParser, additional command-line flags. + + Returns: + A tuple of (http, flags), where http is the authenticated http object and + flags is the parsed command-line flags. + """ + if scope is None: + scope = 'https://www.googleapis.com/auth/' + name + + # Parser command-line arguments. + parent_parsers = [tools.argparser] + parent_parsers.extend(parents) + parser = argparse.ArgumentParser( + description=doc, + formatter_class=argparse.RawDescriptionHelpFormatter, + parents=parent_parsers) + flags = parser.parse_args(argv[1:]) + + # 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 = os.path.join(os.path.dirname(filename), + 'client_secrets.json') + + # Set up a Flow object to be used if we need to authenticate. + flow = client.flow_from_clientsecrets( + client_secrets, + scope=scope, + message=tools.message_if_missing(client_secrets)) + + # Prepare credentials, and authorize HTTP object with them. + # 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 = oauth2client_file.Storage(name + '.dat') + credentials = storage.get() + if credentials is None or credentials.invalid: + credentials = tools.run_flow(flow, storage, flags) + http = credentials.authorize(http=httplib2.Http()) + + # GME does not publish a discovery document, so we return the auth'd http + # instead of building a service using the discovery module. + return (http, flags)