Skip to content
Permalink

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: evansd/whitenoise
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 6.5.0
Choose a base ref
...
head repository: evansd/whitenoise
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 6.6.0
Choose a head ref

Commits on Jun 17, 2023

  1. Copy the full SHA
    4961c40 View commit details

Commits on Jun 21, 2023

  1. [pre-commit.ci] pre-commit autoupdate (#507)

    updates:
    - [github.com/tox-dev/pyproject-fmt: 0.11.2 → 0.12.0](tox-dev/pyproject-fmt@0.11.2...0.12.0)
    - [github.com/tox-dev/tox-ini-fmt: 1.3.0 → 1.3.1](tox-dev/tox-ini-fmt@1.3.0...1.3.1)
    - [github.com/asottile/pyupgrade: v3.6.0 → v3.7.0](asottile/pyupgrade@v3.6.0...v3.7.0)
    - [github.com/adamchainz/django-upgrade: 1.13.0 → 1.14.0](adamchainz/django-upgrade@1.13.0...1.14.0)
    - [github.com/adamchainz/blacken-docs: 1.13.0 → 1.14.0](adamchainz/blacken-docs@1.13.0...1.14.0)
    - [github.com/asottile/reorder-python-imports: v3.9.0 → v3.10.0](asottile/reorder-python-imports@v3.9.0...v3.10.0)
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Jun 21, 2023
    Copy the full SHA
    32cef94 View commit details

Commits on Jun 27, 2023

  1. [pre-commit.ci] pre-commit autoupdate (#508)

    updates:
    - [github.com/tox-dev/pyproject-fmt: 0.12.0 → 0.12.1](tox-dev/pyproject-fmt@0.12.0...0.12.1)
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Jun 27, 2023
    Copy the full SHA
    100cbee View commit details

Commits on Jul 8, 2023

  1. [pre-commit.ci] pre-commit autoupdate (#509)

    * [pre-commit.ci] pre-commit autoupdate
    
    updates:
    - [github.com/asottile/setup-cfg-fmt: v2.3.0 → v2.4.0](asottile/setup-cfg-fmt@v2.3.0...v2.4.0)
    - [github.com/asottile/pyupgrade: v3.7.0 → v3.8.0](asottile/pyupgrade@v3.7.0...v3.8.0)
    
    * [pre-commit.ci] auto fixes from pre-commit.com hooks
    
    for more information, see https://pre-commit.ci
    
    ---------
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Jul 8, 2023
    Copy the full SHA
    1db43e5 View commit details

Commits on Jul 10, 2023

  1. Copy the full SHA
    cafb014 View commit details

Commits on Jul 11, 2023

  1. [pre-commit.ci] pre-commit autoupdate (#511)

    updates:
    - [github.com/tox-dev/pyproject-fmt: 0.12.1 → 0.13.0](tox-dev/pyproject-fmt@0.12.1...0.13.0)
    - [github.com/asottile/pyupgrade: v3.8.0 → v3.9.0](asottile/pyupgrade@v3.8.0...v3.9.0)
    - [github.com/adamchainz/blacken-docs: 1.14.0 → 1.15.0](adamchainz/blacken-docs@1.14.0...1.15.0)
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Jul 11, 2023
    Copy the full SHA
    21fa4b4 View commit details

Commits on Jul 16, 2023

  1. Copy the full SHA
    463aa54 View commit details

Commits on Jul 23, 2023

  1. Copy the full SHA
    5c9ec94 View commit details
  2. [pre-commit.ci] pre-commit autoupdate (#513)

    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Jul 23, 2023
    Copy the full SHA
    514627c View commit details

Commits on Aug 3, 2023

  1. Copy the full SHA
    ada462f View commit details

Commits on Aug 7, 2023

  1. [pre-commit.ci] pre-commit autoupdate (#515)

    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    Co-authored-by: Adam Johnson <me@adamj.eu>
    pre-commit-ci[bot] and adamchainz authored Aug 7, 2023
    Copy the full SHA
    f08f9fc View commit details

Commits on Aug 13, 2023

  1. Copy the full SHA
    f582e62 View commit details

Commits on Aug 15, 2023

  1. [pre-commit.ci] pre-commit autoupdate (#517)

    updates:
    - [github.com/tox-dev/pyproject-fmt: 0.13.0 → 0.13.1](tox-dev/pyproject-fmt@0.13.0...0.13.1)
    - [github.com/sphinx-contrib/sphinx-lint: v0.6.8 → v0.6.7](sphinx-contrib/sphinx-lint@v0.6.8...v0.6.7)
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Aug 15, 2023
    Copy the full SHA
    b7b1ddc View commit details

Commits on Aug 26, 2023

  1. [pre-commit.ci] pre-commit autoupdate (#519)

    updates:
    - [github.com/sphinx-contrib/sphinx-lint: v0.6.7 → v0.6.8](sphinx-contrib/sphinx-lint@v0.6.7...v0.6.8)
    - [github.com/adamchainz/django-upgrade: 1.14.0 → 1.14.1](adamchainz/django-upgrade@1.14.0...1.14.1)
    - [github.com/adamchainz/blacken-docs: 1.15.0 → 1.16.0](adamchainz/blacken-docs@1.15.0...1.16.0)
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Aug 26, 2023
    Copy the full SHA
    7695001 View commit details
  2. Disallow broken Furo version 2023.8.19

    Awaiting this fix: pradyunsg/furo#710
    adamchainz committed Aug 26, 2023
    Copy the full SHA
    cac5fb1 View commit details

Commits on Aug 27, 2023

  1. Copy the full SHA
    70cdb75 View commit details

Commits on Aug 29, 2023

  1. [pre-commit.ci] pre-commit autoupdate (#521)

    updates:
    - [github.com/tox-dev/pyproject-fmt: 0.13.1 → 1.1.0](tox-dev/pyproject-fmt@0.13.1...1.1.0)
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Aug 29, 2023
    Copy the full SHA
    84f2b7c View commit details

Commits on Sep 9, 2023

  1. Copy the full SHA
    b7ad142 View commit details

Commits on Sep 11, 2023

  1. Bump actions/checkout from 3 to 4 (#523)

    Bumps [actions/checkout](https://github.com/actions/checkout) from 3 to 4.
    - [Release notes](https://github.com/actions/checkout/releases)
    - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
    - [Commits](actions/checkout@v3...v4)
    
    ---
    updated-dependencies:
    - dependency-name: actions/checkout
      dependency-type: direct:production
      update-type: version-update:semver-major
    ...
    
    Signed-off-by: dependabot[bot] <support@github.com>
    Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
    dependabot[bot] authored Sep 11, 2023
    Copy the full SHA
    6620088 View commit details
  2. [pre-commit.ci] pre-commit autoupdate (#524)

    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Sep 11, 2023
    Copy the full SHA
    7bd74b1 View commit details

Commits on Sep 19, 2023

  1. [pre-commit.ci] pre-commit autoupdate (#525)

    updates:
    - [github.com/asottile/pyupgrade: v3.10.1 → v3.11.0](asottile/pyupgrade@v3.10.1...v3.11.0)
    - [github.com/asottile/reorder-python-imports: v3.10.0 → v3.11.0](asottile/reorder-python-imports@v3.10.0...v3.11.0)
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Sep 19, 2023
    Copy the full SHA
    bcbf50f View commit details
  2. Support Django 5.0 (#526)

    adamchainz authored Sep 19, 2023
    Copy the full SHA
    803d3df View commit details

Commits on Sep 22, 2023

  1. Copy the full SHA
    1929d89 View commit details

Commits on Sep 24, 2023

  1. Copy the full SHA
    776fbc8 View commit details
  2. Copy the full SHA
    6034700 View commit details

Commits on Sep 26, 2023

  1. [pre-commit.ci] pre-commit autoupdate (#530)

    updates:
    - [github.com/asottile/pyupgrade: v3.11.0 → v3.13.0](asottile/pyupgrade@v3.11.0...v3.13.0)
    - [github.com/adamchainz/django-upgrade: 1.14.1 → 1.15.0](adamchainz/django-upgrade@1.14.1...1.15.0)
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Sep 26, 2023
    Copy the full SHA
    8b8770d View commit details

Commits on Oct 9, 2023

  1. [pre-commit.ci] pre-commit autoupdate (#532)

    updates:
    - [github.com/tox-dev/pyproject-fmt: 1.1.0 → 1.2.0](tox-dev/pyproject-fmt@1.1.0...1.2.0)
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Oct 9, 2023
    Copy the full SHA
    59348ba View commit details
  2. [pre-commit.ci] pre-commit autoupdate (#534)

    updates:
    - [github.com/pre-commit/pre-commit-hooks: v4.4.0 → v4.5.0](pre-commit/pre-commit-hooks@v4.4.0...v4.5.0)
    - [github.com/asottile/setup-cfg-fmt: v2.4.0 → v2.5.0](asottile/setup-cfg-fmt@v2.4.0...v2.5.0)
    - [github.com/asottile/pyupgrade: v3.13.0 → v3.15.0](asottile/pyupgrade@v3.13.0...v3.15.0)
    - [github.com/asottile/reorder-python-imports: v3.11.0 → v3.12.0](asottile/reorder-python-imports@v3.11.0...v3.12.0)
    
    Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
    pre-commit-ci[bot] authored Oct 9, 2023
    Copy the full SHA
    bcd0b78 View commit details

Commits on Oct 11, 2023

  1. Copy the full SHA
    7119a17 View commit details
  2. Version 6.6.0

    adamchainz committed Oct 11, 2023
    Copy the full SHA
    dbfd5f2 View commit details
5 changes: 2 additions & 3 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -21,15 +21,14 @@ jobs:
- ubuntu-22.04
- windows-2022
python-version:
- '3.7'
- '3.8'
- '3.9'
- '3.10'
- '3.11'
- '3.12'

steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- uses: actions/setup-python@v4
with:
@@ -58,7 +57,7 @@ jobs:
runs-on: ubuntu-22.04
needs: tests
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v4

- uses: actions/setup-python@v4
with:
30 changes: 17 additions & 13 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -3,7 +3,7 @@ default_language_version:

repos:
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v4.4.0
rev: v4.5.0
hooks:
- id: check-added-large-files
- id: check-case-conflict
@@ -14,60 +14,64 @@ repos:
- id: end-of-file-fixer
- id: trailing-whitespace
- repo: https://github.com/tox-dev/pyproject-fmt
rev: 0.11.2
rev: 1.2.0
hooks:
- id: pyproject-fmt
- repo: https://github.com/asottile/setup-cfg-fmt
rev: v2.3.0
rev: v2.5.0
hooks:
- id: setup-cfg-fmt
args:
- --include-version-classifiers
- --max-py-version
- '3.12'
- repo: https://github.com/tox-dev/tox-ini-fmt
rev: 1.3.0
rev: 1.3.1
hooks:
- id: tox-ini-fmt
- repo: https://github.com/rstcheck/rstcheck
rev: v6.1.2
rev: v6.2.0
hooks:
- id: rstcheck
additional_dependencies:
- sphinx==6.1.3
- tomli==2.0.1
- repo: https://github.com/sphinx-contrib/sphinx-lint
rev: v0.6.8
hooks:
- id: sphinx-lint
- repo: https://github.com/asottile/pyupgrade
rev: v3.6.0
rev: v3.15.0
hooks:
- id: pyupgrade
args: [--py37-plus]
args: [--py38-plus]
- repo: https://github.com/adamchainz/django-upgrade
rev: 1.13.0
rev: 1.15.0
hooks:
- id: django-upgrade
args: [--target-version, '3.2']
- repo: https://github.com/psf/black
rev: 23.3.0
rev: 23.9.1
hooks:
- id: black
- repo: https://github.com/adamchainz/blacken-docs
rev: 1.13.0
rev: 1.16.0
hooks:
- id: blacken-docs
additional_dependencies:
- black==23.1.0
- repo: https://github.com/asottile/reorder-python-imports
rev: v3.9.0
rev: v3.12.0
hooks:
- id: reorder-python-imports
args:
- --py37-plus
- --py38-plus
- --application-directories
- .:example:src
- --add-import
- 'from __future__ import annotations'
- repo: https://github.com/PyCQA/flake8
rev: 6.0.0
rev: 6.1.0
hooks:
- id: flake8
additional_dependencies:
7 changes: 7 additions & 0 deletions docs/changelog.rst
Original file line number Diff line number Diff line change
@@ -2,6 +2,13 @@
Changelog
=========

6.6.0 (2023-10-11)
------------------

* Support Django 5.0.

* Drop Python 3.7 support.

6.5.0 (2023-06-16)
------------------

19 changes: 9 additions & 10 deletions docs/index.rst
Original file line number Diff line number Diff line change
@@ -24,6 +24,15 @@ Worried that serving static files with Python is horribly inefficient?
Still think you should be using Amazon S3? Have a look at the `Infrequently
Asked Questions`_ below.

Requirements
------------

WhiteNoise works with any WSGI-compatible application.

Python 3.8 to 3.12 supported.

Django 3.2 to 5.0 supported.

Installation
------------

@@ -90,16 +99,6 @@ WhiteNoise was not specifically written with Flask in mind, but as Flask uses
the standard WSGI protocol it is easy to integrate with WhiteNoise (see the
:doc:`Using WhiteNoise with Flask <flask>` guide).


Compatibility
-------------

WhiteNoise works with any WSGI-compatible application and is tested on Python
**3.7** – **3.12**, on both Linux and Windows.

Django WhiteNoiseMiddleware is tested with Django versions **3.2** --- **4.1**


Endorsements
------------

2 changes: 1 addition & 1 deletion docs/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
furo
furo!=2023.8.19
sphinx
2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
@@ -5,7 +5,7 @@ requires = [
]

[tool.black]
target-version = ['py37']
target-version = ['py38']

[tool.pytest.ini_options]
addopts = """\
48 changes: 36 additions & 12 deletions requirements/compile.py
Original file line number Diff line number Diff line change
@@ -17,18 +17,6 @@
# "--generate-hashes",
"--allow-unsafe",
] + sys.argv[1:]
subprocess.run(
[
"python3.7",
*common_args,
"-P",
"Django>=3.2a1,<3.3",
"-o",
"py37-django32.txt",
],
check=True,
capture_output=True,
)
subprocess.run(
[
"python3.8",
@@ -173,6 +161,18 @@
check=True,
capture_output=True,
)
subprocess.run(
[
"python3.10",
*common_args,
"-P",
"Django>=5.0a1,<5.1",
"-o",
"py310-django50.txt",
],
check=True,
capture_output=True,
)
subprocess.run(
[
"python3.11",
@@ -197,6 +197,18 @@
check=True,
capture_output=True,
)
subprocess.run(
[
"python3.11",
*common_args,
"-P",
"Django>=5.0a1,<5.1",
"-o",
"py311-django50.txt",
],
check=True,
capture_output=True,
)
subprocess.run(
[
"python3.12",
@@ -209,3 +221,15 @@
check=True,
capture_output=True,
)
subprocess.run(
[
"python3.12",
*common_args,
"-P",
"Django>=5.0a1,<5.1",
"-o",
"py312-django50.txt",
],
check=True,
capture_output=True,
)
24 changes: 12 additions & 12 deletions requirements/py310-django32.txt
Original file line number Diff line number Diff line change
@@ -6,41 +6,41 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==3.2.19
django==3.2.21
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
pytz==2023.3
pytz==2023.3.post1
# via django
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
20 changes: 10 additions & 10 deletions requirements/py310-django40.txt
Original file line number Diff line number Diff line change
@@ -6,39 +6,39 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.0.10
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
22 changes: 11 additions & 11 deletions requirements/py310-django41.txt
Original file line number Diff line number Diff line change
@@ -6,39 +6,39 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.1.9
django==4.1.11
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
22 changes: 11 additions & 11 deletions requirements/py310-django42.txt
Original file line number Diff line number Diff line change
@@ -6,39 +6,39 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.2.2
django==4.2.5
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
37 changes: 13 additions & 24 deletions requirements/py37-django32.txt → requirements/py310-django50.txt
Original file line number Diff line number Diff line change
@@ -1,55 +1,44 @@
#
# This file is autogenerated by pip-compile with Python 3.7
# This file is autogenerated by pip-compile with Python 3.10
# by the following command:
#
# requirements/compile.py
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==3.2.19
django==5.0a1
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
importlib-metadata==6.6.0
# via
# pluggy
# pytest
# pytest-randomly
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
pytz==2023.3
# via django
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
# via
# asgiref
# importlib-metadata
urllib3==2.0.2
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.5
# via requests
zipp==3.15.0
# via importlib-metadata
18 changes: 9 additions & 9 deletions requirements/py311-django41.txt
Original file line number Diff line number Diff line change
@@ -6,33 +6,33 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.1.9
django==4.1.11
# via -r requirements.in
idna==3.4
# via requests
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
urllib3==2.0.2
urllib3==2.0.5
# via requests
18 changes: 9 additions & 9 deletions requirements/py311-django42.txt
Original file line number Diff line number Diff line change
@@ -6,33 +6,33 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.2.2
django==4.2.5
# via -r requirements.in
idna==3.4
# via requests
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
urllib3==2.0.2
urllib3==2.0.5
# via requests
38 changes: 38 additions & 0 deletions requirements/py311-django50.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#
# This file is autogenerated by pip-compile with Python 3.11
# by the following command:
#
# requirements/compile.py
#
asgiref==3.7.2
# via django
brotli==1.1.0
# via -r requirements.in
certifi==2023.7.22
# via requests
charset-normalizer==3.2.0
# via requests
coverage==7.3.1
# via -r requirements.in
django==5.0a1
# via -r requirements.in
idna==3.4
# via requests
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.3.0
# via pytest
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
urllib3==2.0.5
# via requests
18 changes: 9 additions & 9 deletions requirements/py312-django42.txt
Original file line number Diff line number Diff line change
@@ -6,33 +6,33 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.2.2
django==4.2.5
# via -r requirements.in
idna==3.4
# via requests
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.2
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
urllib3==2.0.3
urllib3==2.0.5
# via requests
38 changes: 38 additions & 0 deletions requirements/py312-django50.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#
# This file is autogenerated by pip-compile with Python 3.12
# by the following command:
#
# requirements/compile.py
#
asgiref==3.7.2
# via django
brotli==1.1.0
# via -r requirements.in
certifi==2023.7.22
# via requests
charset-normalizer==3.2.0
# via requests
coverage==7.3.1
# via -r requirements.in
django==5.0a1
# via -r requirements.in
idna==3.4
# via requests
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.3.0
# via pytest
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
urllib3==2.0.5
# via requests
28 changes: 14 additions & 14 deletions requirements/py38-django32.txt
Original file line number Diff line number Diff line change
@@ -6,45 +6,45 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==3.2.19
django==3.2.21
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
importlib-metadata==6.6.0
importlib-metadata==6.8.0
# via pytest-randomly
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
pytz==2023.3
pytz==2023.3.post1
# via django
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
zipp==3.15.0
zipp==3.17.0
# via importlib-metadata
24 changes: 12 additions & 12 deletions requirements/py38-django40.txt
Original file line number Diff line number Diff line change
@@ -8,43 +8,43 @@ asgiref==3.7.2
# via django
backports-zoneinfo==0.2.1
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.0.10
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
importlib-metadata==6.6.0
importlib-metadata==6.8.0
# via pytest-randomly
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
zipp==3.15.0
zipp==3.17.0
# via importlib-metadata
26 changes: 13 additions & 13 deletions requirements/py38-django41.txt
Original file line number Diff line number Diff line change
@@ -8,43 +8,43 @@ asgiref==3.7.2
# via django
backports-zoneinfo==0.2.1
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.1.9
django==4.1.11
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
importlib-metadata==6.6.0
importlib-metadata==6.8.0
# via pytest-randomly
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
zipp==3.15.0
zipp==3.17.0
# via importlib-metadata
26 changes: 13 additions & 13 deletions requirements/py38-django42.txt
Original file line number Diff line number Diff line change
@@ -8,43 +8,43 @@ asgiref==3.7.2
# via django
backports-zoneinfo==0.2.1
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.2.2
django==4.2.5
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
importlib-metadata==6.6.0
importlib-metadata==6.8.0
# via pytest-randomly
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
zipp==3.15.0
zipp==3.17.0
# via importlib-metadata
28 changes: 14 additions & 14 deletions requirements/py39-django32.txt
Original file line number Diff line number Diff line change
@@ -6,45 +6,45 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==3.2.19
django==3.2.21
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
importlib-metadata==6.6.0
importlib-metadata==6.8.0
# via pytest-randomly
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
pytz==2023.3
pytz==2023.3.post1
# via django
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
zipp==3.15.0
zipp==3.17.0
# via importlib-metadata
24 changes: 12 additions & 12 deletions requirements/py39-django40.txt
Original file line number Diff line number Diff line change
@@ -6,43 +6,43 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.0.10
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
importlib-metadata==6.6.0
importlib-metadata==6.8.0
# via pytest-randomly
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
zipp==3.15.0
zipp==3.17.0
# via importlib-metadata
26 changes: 13 additions & 13 deletions requirements/py39-django41.txt
Original file line number Diff line number Diff line change
@@ -6,43 +6,43 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.1.9
django==4.1.11
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
importlib-metadata==6.6.0
importlib-metadata==6.8.0
# via pytest-randomly
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
zipp==3.15.0
zipp==3.17.0
# via importlib-metadata
26 changes: 13 additions & 13 deletions requirements/py39-django42.txt
Original file line number Diff line number Diff line change
@@ -6,43 +6,43 @@
#
asgiref==3.7.2
# via django
brotli==1.0.9
brotli==1.1.0
# via -r requirements.in
certifi==2023.5.7
certifi==2023.7.22
# via requests
charset-normalizer==3.1.0
charset-normalizer==3.2.0
# via requests
coverage==7.2.7
coverage==7.3.1
# via -r requirements.in
django==4.2.2
django==4.2.5
# via -r requirements.in
exceptiongroup==1.1.1
exceptiongroup==1.1.3
# via pytest
idna==3.4
# via requests
importlib-metadata==6.6.0
importlib-metadata==6.8.0
# via pytest-randomly
iniconfig==2.0.0
# via pytest
packaging==23.1
# via pytest
pluggy==1.0.0
pluggy==1.3.0
# via pytest
pytest==7.3.1
pytest==7.4.2
# via
# -r requirements.in
# pytest-randomly
pytest-randomly==3.12.0
pytest-randomly==3.15.0
# via -r requirements.in
requests==2.31.0
# via -r requirements.in
sqlparse==0.4.4
# via django
tomli==2.0.1
# via pytest
typing-extensions==4.6.3
typing-extensions==4.8.0
# via asgiref
urllib3==2.0.2
urllib3==2.0.5
# via requests
zipp==3.15.0
zipp==3.17.0
# via importlib-metadata
6 changes: 3 additions & 3 deletions setup.cfg
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[metadata]
name = whitenoise
version = 6.5.0
version = 6.6.0
description = Radically simplified static file serving for WSGI applications
long_description = file: README.rst
long_description_content_type = text/x-rst
@@ -15,12 +15,12 @@ classifiers =
Framework :: Django :: 4.0
Framework :: Django :: 4.1
Framework :: Django :: 4.2
Framework :: Django :: 5.0
Intended Audience :: Developers
License :: OSI Approved :: MIT License
Operating System :: OS Independent
Programming Language :: Python :: 3
Programming Language :: Python :: 3 :: Only
Programming Language :: Python :: 3.7
Programming Language :: Python :: 3.8
Programming Language :: Python :: 3.9
Programming Language :: Python :: 3.10
@@ -36,7 +36,7 @@ project_urls =

[options]
packages = find:
python_requires = >=3.7
python_requires = >=3.8
include_package_data = True
package_dir =
=src
2 changes: 1 addition & 1 deletion src/whitenoise/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
from __future__ import annotations

from .base import WhiteNoise
from whitenoise.base import WhiteNoise

__all__ = ["WhiteNoise"]
14 changes: 7 additions & 7 deletions src/whitenoise/base.py
Original file line number Diff line number Diff line change
@@ -8,13 +8,13 @@
from wsgiref.headers import Headers
from wsgiref.util import FileWrapper

from .media_types import MediaTypes
from .responders import IsDirectoryError
from .responders import MissingFileError
from .responders import Redirect
from .responders import StaticFile
from .string_utils import decode_path_info
from .string_utils import ensure_leading_trailing_slash
from whitenoise.media_types import MediaTypes
from whitenoise.responders import IsDirectoryError
from whitenoise.responders import MissingFileError
from whitenoise.responders import Redirect
from whitenoise.responders import StaticFile
from whitenoise.string_utils import decode_path_info
from whitenoise.string_utils import ensure_leading_trailing_slash


class WhiteNoise:
4 changes: 2 additions & 2 deletions src/whitenoise/middleware.py
Original file line number Diff line number Diff line change
@@ -10,8 +10,8 @@
from django.http import FileResponse
from django.urls import get_script_prefix

from .base import WhiteNoise
from .string_utils import ensure_leading_trailing_slash
from whitenoise.base import WhiteNoise
from whitenoise.string_utils import ensure_leading_trailing_slash

__all__ = ["WhiteNoiseMiddleware"]

2 changes: 1 addition & 1 deletion src/whitenoise/storage.py
Original file line number Diff line number Diff line change
@@ -13,7 +13,7 @@
from django.contrib.staticfiles.storage import ManifestStaticFilesStorage
from django.contrib.staticfiles.storage import StaticFilesStorage

from .compress import Compressor
from whitenoise.compress import Compressor

_PostProcessT = Iterator[Union[Tuple[str, str, bool], Tuple[str, None, RuntimeError]]]

4 changes: 2 additions & 2 deletions tests/django_settings.py
Original file line number Diff line number Diff line change
@@ -4,8 +4,8 @@

import django

from .utils import AppServer
from .utils import TEST_FILE_PATH
from tests.utils import AppServer
from tests.utils import TEST_FILE_PATH

ALLOWED_HOSTS = ["*"]

4 changes: 2 additions & 2 deletions tests/test_django_whitenoise.py
Original file line number Diff line number Diff line change
@@ -15,8 +15,8 @@
from django.test.utils import override_settings
from django.utils.functional import empty

from .utils import AppServer
from .utils import Files
from tests.utils import AppServer
from tests.utils import Files
from whitenoise.middleware import WhiteNoiseFileResponse
from whitenoise.middleware import WhiteNoiseMiddleware

2 changes: 1 addition & 1 deletion tests/test_storage.py
Original file line number Diff line number Diff line change
@@ -15,7 +15,7 @@
from django.test.utils import override_settings
from django.utils.functional import empty

from .utils import Files
from tests.utils import Files
from whitenoise.storage import CompressedManifestStaticFilesStorage
from whitenoise.storage import MissingFileError

4 changes: 2 additions & 2 deletions tests/test_whitenoise.py
Original file line number Diff line number Diff line change
@@ -14,8 +14,8 @@

import pytest

from .utils import AppServer
from .utils import Files
from tests.utils import AppServer
from tests.utils import Files
from whitenoise import WhiteNoise
from whitenoise.responders import StaticFile

7 changes: 3 additions & 4 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -2,13 +2,12 @@
requires =
tox>=4.2
env_list =
py312-django{42}
py311-django{42, 41}
py312-django{50, 42}
py311-django{50, 42, 41}
py311-codegen
py310-django{42, 41, 40, 32}
py310-django{50, 42, 41, 40, 32}
py39-django{42, 41, 40, 32}
py38-django{42, 41, 40, 32}
py37-django{32}

[testenv]
package = wheel