This is an automated email from the ASF dual-hosted git repository. joemcdonnell pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/impala.git
commit ff62a4df3927ad054d5374e922c8399c2a227182 Author: Joe McDonnell <[email protected]> AuthorDate: Sun Feb 26 13:04:52 2023 -0800 IMPALA-11951: Add tools for checking/fixing python 3 syntax This adds the bin/check-python-syntax.sh script, which runs "python -m compileall" for all python files in Impala with both python2 and python3. This detects syntax errors in the python files. This will be incorporated into precommit once it is clean. This also adds future to the impala-python virtualenv. This provides the futurize script (exposed via impala-futurize), which can be used to automatically fix some py2/py3 issues. Future also provides the builtins library, which can provide python 3 functionality on python 2. Testing: - Ran impala-futurize locally - Ran the script repeatedly while fixing syntax errors Change-Id: Iae2c51bc6ddc9b6a04469ee1b8284227fed3bd45 Reviewed-on: http://gerrit.cloudera.org:8080/19550 Reviewed-by: Michael Smith <[email protected]> Tested-by: Michael Smith <[email protected]> --- bin/check-python-syntax.sh | 71 ++++++++++++++++++++++++++++++++++++++ bin/impala-futurize | 21 +++++++++++ infra/python/deps/requirements.txt | 1 + 3 files changed, 93 insertions(+) diff --git a/bin/check-python-syntax.sh b/bin/check-python-syntax.sh new file mode 100755 index 000000000..36a7ff87e --- /dev/null +++ b/bin/check-python-syntax.sh @@ -0,0 +1,71 @@ +#!/bin/bash +# +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +set -euo pipefail + +pushd ${IMPALA_HOME} > /dev/null 2>&1 + +RETCODE=0 +for file in $(git ls-files '**/*.py'); do + # Skip the shell's ext-py code + if [[ "${file}" =~ "shell/ext-py" ]]; then + continue + fi + # Skip the shell's pkg_resources.py + if [[ "${file}" == "shell/pkg_resources.py" ]]; then + continue + fi + + # Python 2 checks + # -l = no recursion + # -q = only print errors + # -f = force recompile + if ! python2 -m compileall -l -q -f ${file} > /dev/null 2>&1; then + RETCODE=1 + echo "Python 2 compilation failed for ${file}:" + set +e + python2 -m compileall -l -q -f ${file} + set -e + fi + # Clean up the .pyc files generated by compilation + if [[ -f "${file}c" ]]; then + rm "${file}c" + fi + + # Python 3 checks + # -l = no recursion + # -q = only print errors + # -f = force recompile + if ! python3 -m compileall -l -q -f ${file} > /dev/null 2>&1 ; then + RETCODE=1 + echo "Python 3 compilation failed for ${file}:" + set +e + python3 -m compileall -l -q -f ${file} + set -e + fi + # Clean up the __pycache__ directories generated by compilation + py_cache_dir="$(dirname ${file})/__pycache__" + if [[ -d "${py_cache_dir}" ]]; then + rm -rf ${py_cache_dir} + fi +done + +popd > /dev/null 2>&1 + +exit ${RETCODE} diff --git a/bin/impala-futurize b/bin/impala-futurize new file mode 100755 index 000000000..b761b5212 --- /dev/null +++ b/bin/impala-futurize @@ -0,0 +1,21 @@ +#!/bin/bash + +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you 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. + +source "$(dirname "$0")/impala-python-common.sh" +exec "$PY_ENV_DIR/bin/futurize" "$@" diff --git a/infra/python/deps/requirements.txt b/infra/python/deps/requirements.txt index 8f8ada7a7..271ddeadc 100644 --- a/infra/python/deps/requirements.txt +++ b/infra/python/deps/requirements.txt @@ -37,6 +37,7 @@ flake8 == 3.9.2 contextlib2 == 0.6.0 pathlib2 == 2.3.7.post1 zipp == 1.2.0 +future == 0.18.3 gcovr == 4.2 Jinja2 == 2.11.3 MarkupSafe == 1.1.1
