blob: 0f422d6baed6ce0dd77ba3b148d6ae3887028f9d [file] [log] [blame]
#!/usr/bin/env bash
#
# 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.
#
# Wrapper for genearing PyCharm-compatible virtualenv.
set -e
HERE=$(cd `dirname "${BASH_SOURCE[0]}"` && pwd)
BUILDROOT=$HERE/../..
VENV_DIR=build-support/python/pycharm.venv
PROJECT_NAME=${PWD##*/}
pushd "$BUILDROOT"
./pants dependencies --external-only src/test/python:: | sort -u > requirements.txt
./pants setup-py api/src/main/thrift/org/apache/aurora/gen
./pants setup-py api/src/main/thrift/org/apache/thermos
# Here we grab the version of pytest libs used by pants in a fairly awkward way.
# TODO(John Sirois): Either get this info from the current pants install itself instead of
# using a parallel ephemeral install like we do here (slow), or else invert things and
# allow user-control of the pytest lib versions within reason.
rm -rf "$VENV_DIR"
./build-support/virtualenv "$VENV_DIR"
source $VENV_DIR/bin/activate
python -m pip install pantsbuild.pants==$(./pants --version)
pytest_requirement=$(python -m pip freeze | grep pytest==)
pytest_cov_requirement=$(python -m pip freeze | grep pytest-cov==)
deactivate
rm -rf "$VENV_DIR"
./build-support/virtualenv "$VENV_DIR"
source $VENV_DIR/bin/activate
# NOTE: PyCharm navigation (ctrl-click) doesn't work without --egg - it gets confused by
# the namespace packages in twitter.common.
python -m pip install --egg -r requirements.txt
python -m pip install --egg -f dist \
apache.aurora.thrift==$(< .auroraversion) \
apache.thermos.thrift==$(<.auroraversion)
# Use same py.test version embedded into pants
python -m pip install $pytest_requirement $pytest_cov_requirement
deactivate
popd
if [ ! -d .idea ]; then
echo "Creating PyCharm project at .idea/$PROJECT_NAME.iml"
mkdir .idea
cat <<"EOF" > .idea/$PROJECT_NAME.iml
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/python" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/.pants.d" />
<excludeFolder url="file://$MODULE_DIR$/dist" />
<excludeFolder url="file://$MODULE_DIR$/out" />
</content>
<orderEntry type="sourceFolder" forTests="false" />
</component>
<component name="TestRunnerService">
<option name="projectConfiguration" value="py.test" />
<option name="PROJECT_TEST_RUNNER" value="py.test" />
</component>
</module>
EOF
fi
echo "Your PyCharm environment is now set up. You can open the project root
directory with PyCharm.
Once the project is loaded:
- open project settings
- click 'Project Interpreter'
- click the cog in the upper-right corner
- click 'Add Local'
- select '$VENV_DIR/bin/python'
- click 'OK'
Once this is done, all imports should be recognized, and you can run unit tests in the IDE!"