summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.editorconfig2
-rw-r--r--.pre-commit-config.yaml4
-rw-r--r--docs/internals/contributing/writing-code/coding-style.txt42
-rw-r--r--docs/internals/contributing/writing-code/submitting-patches.txt6
-rw-r--r--docs/internals/contributing/writing-code/unit-tests.txt12
-rw-r--r--docs/releases/4.0.3.txt5
-rw-r--r--pyproject.toml4
-rw-r--r--setup.cfg14
-rw-r--r--tox.ini10
9 files changed, 54 insertions, 45 deletions
diff --git a/.editorconfig b/.editorconfig
index fa6c23c1fc..e43144c4c8 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -12,7 +12,7 @@ charset = utf-8
# Docstrings and comments use max_line_length = 79
[*.py]
-max_line_length = 119
+max_line_length = 88
# Use 2 spaces for the HTML files
[*.html]
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 0773edbd10..3f6dc9ab4c 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,4 +1,8 @@
repos:
+ - repo: https://github.com/psf/black
+ rev: 22.1.0
+ hooks:
+ - id: black
- repo: https://github.com/PyCQA/isort
rev: 5.9.3
hooks:
diff --git a/docs/internals/contributing/writing-code/coding-style.txt b/docs/internals/contributing/writing-code/coding-style.txt
index 3c82aa20de..47f5309085 100644
--- a/docs/internals/contributing/writing-code/coding-style.txt
+++ b/docs/internals/contributing/writing-code/coding-style.txt
@@ -35,10 +35,13 @@ them.
Python style
============
-* Please conform to the indentation style dictated in the ``.editorconfig``
- file. We recommend using a text editor with `EditorConfig`_ support to avoid
- indentation and whitespace issues. The Python files use 4 spaces for
- indentation and the HTML files use 2 spaces.
+* All files should be formatted using the `black`_ auto-formatter. This will be
+ run by ``pre-commit`` if that is configured.
+
+* The project repository includes an ``.editorconfig`` file. We recommend using
+ a text editor with `EditorConfig`_ support to avoid indentation and
+ whitespace issues. The Python files use 4 spaces for indentation and the HTML
+ files use 2 spaces.
* Unless otherwise specified, follow :pep:`8`.
@@ -51,33 +54,11 @@ Python style
An exception to :pep:`8` is our rules on line lengths. Don't limit lines of
code to 79 characters if it means the code looks significantly uglier or is
- harder to read. We allow up to 119 characters as this is the width of GitHub
- code review; anything longer requires horizontal scrolling which makes review
- more difficult. This check is included when you run ``flake8``. Documentation,
+ harder to read. We allow up to 88 characters as this is the line length used
+ by ``black``. This check is included when you run ``flake8``. Documentation,
comments, and docstrings should be wrapped at 79 characters, even though
:pep:`8` suggests 72.
-* Use four spaces for indentation.
-
-* Use four space hanging indentation rather than vertical alignment::
-
- raise AttributeError(
- 'Here is a multiline error message '
- 'shortened for clarity.'
- )
-
- Instead of::
-
- raise AttributeError('Here is a multiline error message '
- 'shortened for clarity.')
-
- This makes better use of space and avoids having to realign strings if the
- length of the first line changes.
-
-* Use single quotes for strings, or a double quote if the string contains a
- single quote. Don't waste time doing unrelated refactoring of existing code
- to conform to this style.
-
* String variable interpolation may use
:py:ref:`%-formatting <old-string-formatting>`, :py:ref:`f-strings
<f-strings>`, or :py:meth:`str.format` as appropriate, with the goal of
@@ -146,6 +127,10 @@ Python style
"""
...
+.. versionchanged:: 4.0.3
+
+ All Python code in Django was reformatted with `black`_.
+
.. _coding-style-imports:
Imports
@@ -397,5 +382,6 @@ JavaScript style
For details about the JavaScript code style used by Django, see
:doc:`javascript`.
+.. _black: https://black.readthedocs.io/en/stable/
.. _editorconfig: https://editorconfig.org/
.. _flake8: https://pypi.org/project/flake8/
diff --git a/docs/internals/contributing/writing-code/submitting-patches.txt b/docs/internals/contributing/writing-code/submitting-patches.txt
index bf9b1f962b..048261e554 100644
--- a/docs/internals/contributing/writing-code/submitting-patches.txt
+++ b/docs/internals/contributing/writing-code/submitting-patches.txt
@@ -290,9 +290,9 @@ All code changes
* Does the :doc:`coding style
</internals/contributing/writing-code/coding-style>` conform to our
- guidelines? Are there any ``flake8`` errors? You can install the
- :ref:`pre-commit <coding-style-pre-commit>` hooks to automatically catch
- these errors.
+ guidelines? Are there any ``black``, ``flake8``, or ``isort`` errors? You
+ can install the :ref:`pre-commit <coding-style-pre-commit>` hooks to
+ automatically catch these errors.
* If the change is backwards incompatible in any way, is there a note
in the release notes (``docs/releases/A.B.txt``)?
* Is Django's test suite passing?
diff --git a/docs/internals/contributing/writing-code/unit-tests.txt b/docs/internals/contributing/writing-code/unit-tests.txt
index c37efc09eb..db0a732d2f 100644
--- a/docs/internals/contributing/writing-code/unit-tests.txt
+++ b/docs/internals/contributing/writing-code/unit-tests.txt
@@ -69,16 +69,18 @@ command from any place in the Django source tree:
$ tox
By default, ``tox`` runs the test suite with the bundled test settings file for
-SQLite, ``flake8``, ``isort``, and the documentation spelling checker. In
-addition to the system dependencies noted elsewhere in this documentation,
-the command ``python3`` must be on your path and linked to the appropriate
-version of Python. A list of default environments can be seen as follows:
+SQLite, ``black``, ``flake8``, ``isort``, and the documentation spelling
+checker. In addition to the system dependencies noted elsewhere in this
+documentation, the command ``python3`` must be on your path and linked to the
+appropriate version of Python. A list of default environments can be seen as
+follows:
.. console::
$ tox -l
py3
- flake8
+ black
+ flake8>=3.7.0
docs
isort>=5.1.0
diff --git a/docs/releases/4.0.3.txt b/docs/releases/4.0.3.txt
index 24c51c77ee..2ef642fe5e 100644
--- a/docs/releases/4.0.3.txt
+++ b/docs/releases/4.0.3.txt
@@ -4,7 +4,10 @@ Django 4.0.3 release notes
*Expected March 1, 2022*
-Django 4.0.3 fixes several bugs in 4.0.2.
+Django 4.0.3 fixes several bugs in 4.0.2. Also, all Python code in Django is
+reformatted with `black`_.
+
+.. _black: https://pypi.org/project/black/
Bugfixes
========
diff --git a/pyproject.toml b/pyproject.toml
index 94a5dae582..5fa4b365ed 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -1,3 +1,7 @@
[build-system]
requires = ['setuptools>=40.8.0', 'wheel']
build-backend = 'setuptools.build_meta:__legacy__'
+
+[tool.black]
+target-version = ['py38']
+extend-exclude = 'tests/test_runner_apps/tagged/tests_syntax_error.py'
diff --git a/setup.cfg b/setup.cfg
index d20e8dfd1f..d8aaee4ce1 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -57,13 +57,15 @@ install_script = scripts/rpm-install.sh
[flake8]
exclude = build,.git,.tox,./tests/.env
-ignore = W504,W601
-max-line-length = 119
+extend-ignore = E203
+max-line-length = 88
+per-file-ignores =
+ django/core/cache/backends/filebased.py:W601
+ django/core/cache/backends/base.py:W601
+ django/core/cache/backends/redis.py:W601
+ tests/cache/tests.py:W601
[isort]
-combine_as_imports = true
+profile = black
default_section = THIRDPARTY
-include_trailing_comma = true
known_first_party = django
-line_length = 79
-multi_line_output = 5
diff --git a/tox.ini b/tox.ini
index c6887b6ee4..3b9f663385 100644
--- a/tox.ini
+++ b/tox.ini
@@ -8,7 +8,8 @@ minversion = 3.18
skipsdist = true
envlist =
py3
- flake8
+ black
+ flake8 >= 3.7.0
docs
isort >= 5.1.0
@@ -31,6 +32,13 @@ changedir = tests
commands =
{envpython} runtests.py {posargs}
+[testenv:black]
+basepython = python3
+usedevelop = false
+deps = black
+changedir = {toxinidir}
+commands = black --check --diff .
+
[testenv:flake8]
basepython = python3
usedevelop = false