diff --git a/README b/README index 43e4611..5a5efe4 100644 --- a/README +++ b/README @@ -4,12 +4,27 @@ for discovery based APIs. Installation ============ -None. +To install, simply say + + $ 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. -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. Running ======= @@ -26,6 +41,9 @@ recent entry in Buzz and post a test message. $ 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 @@ Third Party Libraries 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. + +"""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.""" -# 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(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')