Modified README and setup.py to install apiclient and included third party libraries.

Added setup_utils.py to test for installed modules.
This commit is contained in:
Tom Miller
2010-10-11 11:50:52 -07:00
parent 6a05e7d3dc
commit 7c95d81183
3 changed files with 164 additions and 15 deletions

29
README
View File

@@ -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

View File

@@ -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!'

86
setup_utils.py Normal file
View File

@@ -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')