Formatting code¶
The PTB automatically formats code and ensures via a step in the checks.yml GitHub
workflow that committed code adheres to these standards. The goals of this are to
improve the readability and maintainability of the code and to provide a uniform
experience across projects.
Nox sessions¶
Note
- To prevent Python files from being formatted, you can do one of the following:
For a single file, use a comment in the files as described in this table.
If it is a directory (i.e.
.workspace), then you can exclude it by adding it to theadd_to_excluded_python_pathsin the project’sConfigdefined in thenoxconfig.py.
For autoformatting, the following tools are used:
black - formats Python code to maintain consistent styling standards.
isort - organizes and formats Python import statements alphabetically and by type (from __future__, standard library packages, third party packages, and local application imports).
pyupgrade - upgrades syntax for newer versions of the Python language.
ruff - includes a plethora of tools to check and automatically format code. In the PTB, only the following checks are active:
unused-import (F401) - removes unused imports
In the PTB, these tools are bundled into nox sessions to ensure that they are run in a deterministic manner.
Nox session |
CI Usage |
Action |
|---|---|---|
|
No |
Applies code formatting changes |
|
|
Checks that current code does not need to be re-formatted |
Configuration¶
black¶
Your black configuration should look similar to this:
[tool.black]
line-length = 88
verbose = false
include = "\\.pyi?$"
For further configuration options, see black configuration.
isort¶
Ensure isort is configured with compatibility for black:
[tool.isort]
profile = "black"
force_grid_wrap = 2
For further configuration options, see isort options.
pyupgrade¶
No initial configuration of pyupgrade is required. By default, this is
configured to be derived from the minimum Python version that your project supports
and is defined in the exasol.toolbox.config.BaseConfig.pyupgrade_argument().
For further configuration options, see the pyupgrade documentation.
ruff¶
Ensure ruff is configured like so:
[tool.ruff.lint]
extend-ignore = [
"E", # Syntax errors
"F", # Pyflakes rules (excluding F401)
"UP", # pyupgrade rules
"D", # Docstring rules
]
extend-select = ["F401"]
unfixable = []
For further configuration options, see ruff options.