#!/bin/bash # # Copyright 2014 Google Inc. All Rights Reserved. # # Generates a zip of the google api python client and dependencies. # # Author: afshar@google.com (Ali Afshar) # Exit on failure. set -e # Where to build the zip. ROOT_PATH=$(pwd)/build/gae BUILD_PATH=${ROOT_PATH}/build LIB_PATH=${ROOT_PATH}/lib ENV_PATH=${ROOT_PATH}/ve LOG_PATH=${ROOT_PATH}/gae_zip_build.log # The api client version APICLIENT_VERSION=$(python -c "import apiclient; print apiclient.__version__") # Where to create the zip. DIST_PATH=$(pwd)/dist/gae ZIP_NAME=google-api-python-client-gae-${APICLIENT_VERSION}.zip ZIP_PATH=${DIST_PATH}/${ZIP_NAME} # Make sure we are all clean. echo "Cleaning build env" rm -rf ${ROOT_PATH} mkdir -p ${ROOT_PATH} # We must not use the system pip, since that exposes a bug uninstalling httplib2 # instead, install the dev version of pip. echo "Creating virtualenv and installing pip==dev" virtualenv --no-site-packages ${ENV_PATH} >> ${LOG_PATH} ${ENV_PATH}/bin/pip install --upgrade pip==dev >> ${LOG_PATH} # Install the library with dependencies. echo "Building google-api-python client" ${ENV_PATH}/bin/pip install -b ${BUILD_PATH} -t ${LIB_PATH} . >> ${LOG_PATH} # Prune the things we don't want. echo "Pruning target library" find ${LIB_PATH} -name "*.pyc" -exec rm {} \; >> ${LOG_PATH} rm -rf ${LIB_PATH}/*.egg-info >> ${LOG_PATH} # Create the zip. echo "Creating zip" mkdir -p ${DIST_PATH} pushd ${LIB_PATH} >> ${LOG_PATH} zip -r ${ZIP_PATH} * >> ${LOG_PATH} popd >> ${LOG_PATH} # We are done. echo "Built zip in ${ZIP_PATH}" # Sanity test the zip. # TODO (afshar): Run the complete test suite. echo "Sanity testing the zip:" export SANITY_MODS="httplib2 apiclient uritemplate oauth2client" export SANITY_ZIP=${ZIP_PATH} export PYTHONPATH=${ZIP_PATH} ${ENV_PATH}/bin/python -c "import sys, os sys.path.pop(0) # remove the pwd for name in os.getenv('SANITY_MODS').split(): mod = __import__(name) assert os.getenv('SANITY_ZIP') in mod.__file__ print ' ', os.path.relpath(mod.__file__)"