Added enable-app-engine-project
diff --git a/MANIFEST.in b/MANIFEST.in
index 58ab961..9154e7b 100644
--- a/MANIFEST.in
+++ b/MANIFEST.in
@@ -12,3 +12,4 @@
 include setup_utils.py
 include gflags.py
 include gflags_validators.py
+include bin/enable-app-engine-project
diff --git a/bin/enable-app-engine-project b/bin/enable-app-engine-project
new file mode 100644
index 0000000..07dfb7b
--- /dev/null
+++ b/bin/enable-app-engine-project
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+#
+# Copyright 2007 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.
+
+"""Copy the sources for google-api-python-client into an App Engine project.
+
+Copies, or symbolically links the sources of the google-api-python-client
+library into a Google App Engine project. This is necessary so that the
+source can be uploaded when the application is deployed.
+"""
+
+__author__ = 'jcgregorio@google.com (Joe Gregorio)'
+
+import gflags
+import logging
+import sys
+import os
+
+from distutils.dir_util import copy_tree
+from distutils.file_util import copy_file
+from distutils.errors import DistutilsFileError
+
+FLAGS = gflags.FLAGS
+SOURCES = [
+    'gflags',
+    'gflags_validators',
+    'httplib2',
+    'oauth2client',
+    'oauth2',
+    'apiclient',
+    'uritemplate',
+    ]
+
+gflags.DEFINE_enum('logging_level', 'ERROR',
+    ['DEBUG', 'INFO', 'WARNING', 'ERROR', 'CRITICAL'],
+    'Set the level of logging detail.')
+
+gflags.DEFINE_boolean('force', 'False',
+    'Forcibly copy over client library files.')
+
+gflags.DEFINE_boolean('dry_run', 'False', 'Don\'t actually do anything.')
+
+def find_source(module):
+  isdir = False
+  location = ''
+  m = __import__(module)
+  logging.debug('Absolute path for module %s: %s' % (module, m.__file__))
+  basename = os.path.basename(m.__file__)
+  if basename.startswith('__init__.'):
+    isdir = True
+    location = os.path.dirname(m.__file__)
+  else:
+    location = m.__file__.rsplit('.', 1)[0] + '.py'
+
+  return (isdir, location)
+
+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))
+
+  logging.info('Setting up the directories: %s' % argv[1:])
+  for dir in argv[1:]:
+    # Check if the supplied directory is an App Engine project by looking
+    # for an app.yaml
+    if not os.path.isfile(os.path.join(dir, 'app.yaml')):
+      sys.exit('The given directory is not a Google App Engine project: %s', dir)
+
+
+    # Build up the set of file or directory copying actions we need to do
+    action = [] # (src, dst, isdir)
+    for source in SOURCES:
+      isdir, source_location = find_source(source)
+      if isdir:
+        target = source
+      else:
+        target = source + ".py"
+      full_target = os.path.join(dir, target)
+      if not FLAGS.force and os.path.exists(full_target):
+        noun = isdir and 'Directory' or 'File'
+        sys.exit("%s already exists in project: %s" % (noun, target))
+      action.append((source_location, full_target, isdir))
+
+    # Now perform all the copying actions we collected
+    try:
+      for src, dst, isdir in action:
+        if isdir:
+          results = copy_tree(src, dst, FLAGS.dry_run)
+          for filename in results:
+            logging.info('Copied to: %s' % filename)
+        else:
+          filename, copied = copy_file(src, dst, FLAGS.dry_run)
+          logging.info('Copied to: %s Successfully: %s' % (filename, copied))
+    except DistutilsFileError, e:
+      sys.exit(str(e))
+
+if __name__ == '__main__':
+  main(sys.argv)
diff --git a/setup.py b/setup.py
index ae4d21e..ef75d98 100644
--- a/setup.py
+++ b/setup.py
@@ -64,7 +64,7 @@
 accessing the Buzz, Moderator, and Latitude APIs."""
 
 setup(name="google-api-python-client",
-      version="1.0alpha11",
+      version="1.0beta1",
       description="Google API Client Library for Python",
       long_description=long_desc,
       author="Joe Gregorio",
@@ -76,6 +76,7 @@
       package_data={
         'apiclient': ['contrib/*/*.json']
         },
+      scripts=['bin/enable-app-engine-project'],
       license="Apache 2.0",
       keywords="google api client",
       classifiers=['Development Status :: 3 - Alpha',