From 06dea573daa2175b244a430bb89b49bb5c8e8c5b Mon Sep 17 00:00:00 2001 From: Masood Malekghassemi Date: Wed, 11 May 2016 12:01:40 -0700 Subject: [PATCH] Enable running Python formatting --- .gitignore | 1 + setup.cfg | 4 ++ tools/distrib/pyformat_code.sh | 60 ++++++++++++++++++++++++ tools/run_tests/sanity/sanity_tests.yaml | 1 + 4 files changed, 66 insertions(+) create mode 100755 tools/distrib/pyformat_code.sh diff --git a/.gitignore b/.gitignore index 31124451768..618c9ba5ae1 100644 --- a/.gitignore +++ b/.gitignore @@ -8,6 +8,7 @@ objs # Python items cython_debug/ python_build/ +python_format_venv/ .coverage* .eggs htmlcov/ diff --git a/setup.cfg b/setup.cfg index dd9161ca8b9..218792e674c 100644 --- a/setup.cfg +++ b/setup.cfg @@ -11,3 +11,7 @@ inplace=1 [build_package_protos] exclude=.*protoc_plugin/protoc_plugin_test\.proto$ + +# Style settings +[yapf] +based_on_style = google diff --git a/tools/distrib/pyformat_code.sh b/tools/distrib/pyformat_code.sh new file mode 100755 index 00000000000..e3ebf1c4908 --- /dev/null +++ b/tools/distrib/pyformat_code.sh @@ -0,0 +1,60 @@ +#!/bin/bash +# Copyright 2015, Google Inc. +# All rights reserved. +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +set -ex + +# change to root directory +cd $(dirname $0)/../.. + +DIRS=src/python +EXCLUSIONS='src/python/grpcio/grpc_*.py src/python/grpcio_health_checking/grpc_*.py src/python/grpcio_reflection/grpc_*.py src/python/grpcio_tests/grpc_*.py' + +VIRTUALENV=python_format_venv + +virtualenv $VIRTUALENV +PYTHON=`realpath $VIRTUALENV/bin/python` +$PYTHON -m pip install --upgrade futures yapf + +exclusion_args="" +for exclusion in $EXCLUSIONS; do + exclusion_args="$exclusion_args --exclude $exclusion" +done + +script_result=0 +for dir in $DIRS; do + tempdir=`mktemp -d` + cp -RT $dir $tempdir + $PYTHON -m yapf -i -r -p $exclusion_args $dir + if ! diff -rq $dir $tempdir; then + script_result=1 + fi + rm -rf $tempdir +done +exit $script_result diff --git a/tools/run_tests/sanity/sanity_tests.yaml b/tools/run_tests/sanity/sanity_tests.yaml index 37819166e33..f29b700572b 100644 --- a/tools/run_tests/sanity/sanity_tests.yaml +++ b/tools/run_tests/sanity/sanity_tests.yaml @@ -12,5 +12,6 @@ - script: tools/distrib/check_trailing_newlines.sh - script: tools/distrib/check_nanopb_output.sh - script: tools/distrib/check_include_guards.py +- script: tools/distrib/pyformat_code.sh - script: tools/distrib/python/check_grpcio_tools.py