automate/020_python-prospector.sh

103 lines
5.1 KiB
Bash

#!/bin/bash
DEST=${1:-/etc/skel}
USER=PyCQA
PROJECT=prospector
BUILD_DIR=/var/tmp/build-${PROJECT}
RELEASE=$(curl "https://api.github.com/repos/${USER}/${PROJECT}/releases/latest" | jq -r '.tag_name')
RSS_FEED="https://github.com/${USER}/${PROJECT}/releases.atom"
# xdg-open ${RSS_FEED}
echo ${RSS_FEED}
spt-cache udo apt-get install python3-requests python3-click python3-pbr \
python3-arrow python3-tabulate python3-yaml
echo "mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}" || exit "
mkdir -p "${BUILD_DIR}" && cd "${BUILD_DIR}" || exit
#echo "git clone -b ${RELEASE} https://github.com/${USER}/${PROJECT} ${BUILD_DIR}/${PROJECT}-${RELEASE}"
#git clone -b ${RELEASE} https://github.com/${USER}/${PROJECT} ${BUILD_DIR}/${PROJECT}-${RELEASE}
mkdir ${BUILD_DIR}/${PROJECT}-${RELEASE}
echo "cd ${BUILD_DIR}/${PROJECT}-${RELEASE}"
cd ${BUILD_DIR}/${PROJECT}-${RELEASE}
echo "Prospector is a tool to analyse Python code and output information about errors, potential problems, convention violations and complexity." >description-pak
mkdir -p doc-pak
cat <<-EOF | sudo tee doc-pak/README >/dev/null
Prospector provides some default profiles, to provide a starting point and adapts the output depending on the libraries your project uses.
Prospector currently supports 12 tools, of which 7 are defaults and 5 are optional extras.
Defaults
Pylint
Pylint is the most comprehensive static analysis tool for Python. It is extremely thorough and is the source of most messages that prospector outputs.
pycodestyle
pycodestyle is a simple tool to warn about violations of the PEP8 style guide. It produces messages for any divergence from the style guide.
Prospector's concept of strictness turns off various warnings depending on the strictness level. By default, several PEP8 errors will be suppressed. To adjust this without adjusting the strictness of other tools, you have some options:
# turn off pep8 checking completely:
prospector --no-style-warnings
# turn on complete pep8 checking:
prospector --full-pep8
# change the maximum line length allowed
# (the default varies by strictness):
prospector --max-line-length 120
Pyflakes
Pyflakes analyzes programs and detects various errors. It is simpler and faster than pylint, but also not as thorough.
Mccabe
McCabe or cyclomatic complexity is a measurement of how many paths there are in a given function or method. It measures how complicated your functions are, and warns if they reach a certain threshold. Methods that are too complex are prone to logic errors, and should be refactored to a series of smaller methods.
Dodgy
Dodgy is a very simple tool designed to find 'dodgy' things which should not be in a public project, such as secret keys, passwords, AWS tokens or source control diffs.
Pydocstyle
Pydocstyle is a simple tool to warn about violations of the PEP257 Docstring Conventions. It produces messages for any divergence from the style guide.
This tool is currently considered experimental due to some bugs in its ability to parse code. For example, modules that contain an __all__ could end up producing bogus error messages if the __all__ isn't formatted exactly as pydocstyle expects it.
It will not run by default, and must be enabled explicitly (via --with-tool pep257 or in a profile) or implicitly (using the --doc-warnings flag).
Profile-validator
This is a simple tool built in to prospector which validates prospector profiles.
Optional Extras
These extras are integrated into prospector but are not activated by default. This is because their output is not necessarily useful for all projects.
They are also not installed by default. The instructions for installing each tool is in the tool section below. For more detailed information on installing, see install section.
Pyroma
Pyroma is a tool to check your setup.py to ensure it is following best practices of the Python packaging ecosystem. It will warn you if you are missing any package metadata which would improve the quality of your package. This is recommended if you intend to publish your code on PyPI.
Vulture
Vulture finds unused classes, functions and variables in your code. This could be useful if your project is an application rather than a library, however, if you do a lot of dynamic access or metaprogramming, Vulture will likely warn about unused code that is in fact used.
Frosted
Frosted is a fork of pyflakes which was created with the intention of taking over from and extending pyflakes as development had slowed. Since Prospector was originally created, pyflakes development has started up again and frosted has stagnated, so it has been demoted to be an optional extra.
Mypy
Mypy is an experimental optional static type checker for Python that aims to combine the benefits of dynamic (or “duck”) typing and static typing. Mypy combines the expressive power and convenience of Python with a powerful type system and compile-time type checking.
Bandit
Bandit finds common security issues in Python code.
See: https://prospector.readthedocs.io/#usage
EOF
#sudo checkinstall -y --fstrans=no pip3 install --user .
sudo checkinstall -y --fstrans=no sudo pip3 install prospector\[with_everything\]==${RELEASE}