New Maps-Engine sample.
Reviewed in https://codereview.appspot.com/36120043/.
Index: samples/maps_engine/README
===================================================================
new file mode 100644
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
--- /dev/null
+++ b/samples/maps_engine/maps_engine.py
Binary files differ
diff --git a/samples/maps_engine/polygons.prj b/samples/maps_engine/polygons.prj
new file mode 100644
index 0000000..152e8d3
--- /dev/null
+++ b/samples/maps_engine/polygons.prj
Binary files 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 <http://code.google.com/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)