Modified README and setup.py to install apiclient and included third party libraries.
Added setup_utils.py to test for installed modules.
diff --git a/README b/README
index 43e4611..5a5efe4 100644
--- a/README
+++ b/README
@@ -4,12 +4,27 @@
Installation
============
-None.
+To install, simply say
-For the time being the required libraries
-are checked into this directory to make
-developement easier, so you can just run
-this directly after checking out.
+ $ python setup.py install --record=files.txt
+
+to install the files and record what files are installed in files.txt.
+
+If you want to do a "mock install" and simply extend your PYTHONPATH
+for the current shell to include this folder and the packages in it, do
+
+ $ source setpath.sh
+
+from the root of the project directory.
+
+
+Uninstall
+=========
+
+ $ cat files.txt | xargs rm -rf
+
+You may need root privileges to do this.
+
Running
=======
@@ -26,6 +41,9 @@
$ python samples/cmdline/buzz.py
+After following the install directions (using setup.py or setpath.sh) you
+should be able to cd to samples/cmdline and run the code from there.
+
Third Party Libraries
====================
@@ -33,4 +51,3 @@
http://code.google.com/p/httplib2
http://code.google.com/p/uri-templates
http://github.com/simplegeo/python-oauth2
-
diff --git a/setup.py b/setup.py
index e13b99b..2234acf 100644
--- a/setup.py
+++ b/setup.py
@@ -1,16 +1,62 @@
-#!/usr/bin/env python
-from distutils.core import setup
+# Copyright (C) 2010 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.
-# First pass at a setup.py, in the long run we will
-# need two, one for a version of the library that just
-# includes apiclient, and another that also includes
-# all of the dependencies.
+"""Setup script for Google API Python client.
+
+Also installs included versions of third party libraries, if those libraries
+are not already installed.
+"""
+
+import setup_utils
+
+packages = ['apiclient', 'uritemplate']
+
+# Don't clobber installed versions of third party libraries
+# with what we include.
+packages.extend(setup_utils.get_missing_requirements())
+print 'Installing the following packages: '
+print str(packages)[1:-1]
+
+try:
+ # Some people prefer setuptools, and may have that installed
+ from setuptools import setup
+except ImportError:
+ from distutils.core import setup
+ print 'Loaded distutils.core'
+else:
+ print 'Loaded setuptools'
+
+long_desc = """The Google API Client for Python is a client library for
+accessing the Buzz, Moderator, and Latitude APIs."""
+
setup(name="google-api-python-client",
version="0.1",
description="Google API Client Library for Python",
+ long_description=long_desc,
author="Joe Gregorio",
author_email="jcgregorio@google.com",
url="http://code.google.com/p/google-api-python-client/",
- py_modules = ['apiclient', 'oauth2', 'simplejson', 'uritemplate'],
- license = "Apache 2.0",
- keywords="google api client")
+ packages=packages,
+ package_data={'apiclient':['contrib/buzz/future.json',
+ 'contrib/latitude/future.json',
+ 'contrib/moderator/future.json']},
+ license="Apache 2.0",
+ keywords="google api client",
+ classifiers=['Development Status :: 3 - Alpha',
+ 'Intended Audience :: Developers',
+ 'License :: OSI Approved :: Apache Software License',
+ 'Operating System :: POSIX',
+ 'Topic :: Internet :: WWW/HTTP'])
+
+print 'Setup complete!'
diff --git a/setup_utils.py b/setup_utils.py
new file mode 100644
index 0000000..05443b6
--- /dev/null
+++ b/setup_utils.py
@@ -0,0 +1,86 @@
+# Copyright (C) 2010 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.
+
+"""Utility functions for setup.py file(s)."""
+
+
+__author__ = 'tom.h.miller@gmail.com (Tom Miller)'
+
+
+def get_missing_requirements():
+ """Return a list of missing third party packages."""
+ import sys
+
+ sys_path_original = sys.path[:]
+ # Remove the current directory from the list of paths to check when
+ # importing modules.
+ try:
+ # Sometimes it's represented by an empty string?
+ sys.path.remove('')
+ except ValueError:
+ import os.path
+ sys.path.remove(os.path.abspath(os.path.curdir))
+ missing_pkgs = []
+ third_party_reqs = ['oauth2', 'httplib2']
+ for pkg in third_party_reqs:
+ try:
+ __import__(pkg)
+ except ImportError:
+ missing_pkgs.append(pkg)
+ # JSON support gets its own special logic
+ try:
+ import_json(sys.path)
+ except ImportError:
+ missing_pkgs.append('simplejson')
+
+ sys.path = sys_path_original
+ return missing_pkgs
+
+
+def import_json(import_path=None):
+ """Return a package that will provide JSON support.
+
+ Args:
+ import_path: list Value to assing to sys.path before checking for packages.
+ Default None for default sys.path.
+ Return:
+ A package, one of 'json' (if running python 2.6),
+ 'django.utils.simplejson' (if django is installed)
+ 'simplejson' (if third party library simplejson is found)
+ Raises:
+ ImportError if none of those packages are found.
+ """
+ import sys
+ sys_path_orig = sys.path[:]
+ if import_path is not None:
+ sys.path = import_path
+
+ try:
+ # Should work for Python 2.6.
+ pkg = __import__('json')
+ except ImportError:
+ try:
+ pkg = __import__('django.utils').simplejson
+ except ImportError:
+ try:
+ pkg = __import__('simplejson')
+ except ImportError:
+ pkg = None
+
+ if import_path is not None:
+ sys.path = sys_path_orig
+ if pkg:
+ return pkg
+ else:
+ raise ImportError('Cannot find json support')