Skip to content

Commit

Permalink
Require at least Django 4.2
Browse files Browse the repository at this point in the history
  • Loading branch information
matthiask committed Feb 26, 2024
1 parent baee161 commit 6a20dc0
Show file tree
Hide file tree
Showing 5 changed files with 52 additions and 41 deletions.
16 changes: 8 additions & 8 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,30 +14,30 @@ repos:
- id: mixed-line-ending
- id: trailing-whitespace
- repo: https://github.com/adamchainz/django-upgrade
rev: 1.15.0
rev: 1.16.0
hooks:
- id: django-upgrade
args: [--target-version, "3.2"]
args: [--target-version, "4.2"]
- repo: https://github.com/MarcoGorelli/absolufy-imports
rev: v0.3.1
hooks:
- id: absolufy-imports
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.1.11"
rev: "v0.2.2"
hooks:
- id: ruff
- id: ruff-format
- repo: https://github.com/pre-commit/mirrors-prettier
rev: v3.1.0
rev: v4.0.0-alpha.8
hooks:
- id: prettier
args: [--list-different, --no-semi]
exclude: "^conf/|.*\\.html$"
entry: env PRETTIER_LEGACY_CLI=1 prettier
types_or: [javascript, css]
- repo: https://github.com/tox-dev/pyproject-fmt
rev: 1.6.0
rev: 1.7.0
hooks:
- id: pyproject-fmt
- repo: https://github.com/abravalheri/validate-pyproject
rev: v0.15
rev: v0.16
hooks:
- id: validate-pyproject
1 change: 1 addition & 0 deletions CHANGELOG.rst
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ Next version

- Handle the case when a page's site and its parent's site do not match.
- Added Python 3.12, Django 5.0.
- Dropped support for Django before 4.2.
- Changed the ``DefaultLanguageListFilter`` to use the model admin's default
empty value display, and allowed filtering for sites where a default value
isn't set.
Expand Down
16 changes: 9 additions & 7 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ dynamic = [
"version",
]
dependencies = [
"Django>=3.2",
"Django>=4.2",
"feincms3>=4.5",
]
[project.optional-dependencies]
Expand All @@ -48,6 +48,11 @@ Homepage = "https://github.com/matthiask/feincms3-sites/"
path = "feincms3_sites/__init__.py"

[tool.ruff]
fix = true
show-fixes = true
target-version = "py39"

[tool.ruff.lint]
extend-select = [
# pyflakes, pycodestyle
"F", "E", "W",
Expand Down Expand Up @@ -90,18 +95,15 @@ extend-ignore = [
# No line length errors
"E501",
]
fix = true
show-fixes = true
target-version = "py39"

[tool.ruff.isort]
[tool.ruff.lint.isort]
combine-as-imports = true
lines-after-imports = 2

[tool.ruff.mccabe]
[tool.ruff.lint.mccabe]
max-complexity = 15

[tool.ruff.per-file-ignores]
[tool.ruff.lint.per-file-ignores]
"*/migrat*/*" = [
# Allow using PascalCase model names in migrations
"N806",
Expand Down
54 changes: 32 additions & 22 deletions tests/testapp/test_feincms3.py
Original file line number Diff line number Diff line change
Expand Up @@ -490,7 +490,7 @@ def setUp(self):
class MiddlewareNotUsedTestCase(CanonicalDomainMiddlewareTest):
def test_request(self):
self.assertContains(
self.client.get("/de/", HTTP_HOST="example.com"), "home - testapp"
self.client.get("/de/", headers={"host": "example.com"}), "home - testapp"
)


Expand All @@ -503,7 +503,7 @@ def test_request(self):
class ImproperlyConfiguredTest(CanonicalDomainMiddlewareTest):
def test_request(self):
with self.assertRaisesRegex(ImproperlyConfigured, "Current site unknown."):
self.client.get("/de/", HTTP_HOST="example.com")
self.client.get("/de/", headers={"host": "example.com"})


@override_settings(
Expand All @@ -515,21 +515,21 @@ def test_request(self):
)
class CanonicalDomainTestCase(CanonicalDomainMiddlewareTest):
def test_http_requests(self):
response = self.client.get("/", HTTP_HOST="example.org")
response = self.client.get("/", headers={"host": "example.org"})
self.assertEqual(response.status_code, 301)
self.assertEqual(response["Location"], "http://example.com/")

self.assertContains(
self.client.get("/de/", HTTP_HOST="example.com"), "home - testapp"
self.client.get("/de/", headers={"host": "example.com"}), "home - testapp"
)

def test_https_requests(self):
response = self.client.get("/", HTTP_HOST="example.org", secure=True)
response = self.client.get("/", headers={"host": "example.org"}, secure=True)
self.assertEqual(response.status_code, 301)
self.assertEqual(response["Location"], "https://example.com/")

self.assertContains(
self.client.get("/de/", HTTP_HOST="example.com", secure=True),
self.client.get("/de/", headers={"host": "example.com"}, secure=True),
"home - testapp",
)

Expand All @@ -548,31 +548,31 @@ def test_http_redirects(self):
self.assertEqual(response.status_code, 301)
self.assertEqual(response["Location"], "https://example.com/")

response = self.client.get("/", HTTP_HOST="example.org")
response = self.client.get("/", headers={"host": "example.org"})
self.assertEqual(response.status_code, 301)
self.assertEqual(response["Location"], "https://example.com/")

def test_https_redirects(self):
response = self.client.get("/", HTTP_HOST="example.org", secure=True)
response = self.client.get("/", headers={"host": "example.org"}, secure=True)
self.assertEqual(response.status_code, 301)
self.assertEqual(response["Location"], "https://example.com/")

def test_match(self):
self.assertContains(
self.client.get("/de/", HTTP_HOST="example.com", secure=True),
self.client.get("/de/", headers={"host": "example.com"}, secure=True),
"home - testapp",
)

def test_other_site(self):
"""SSL redirect happens, but stays on secondary domain"""
Site.objects.create(host="example.org")
response = self.client.get("/", HTTP_HOST="example.org")
response = self.client.get("/", headers={"host": "example.org"})
self.assertEqual(response.status_code, 301)
self.assertEqual(response["Location"], "https://example.org/")

@override_settings(DEBUG=True)
def test_debug(self):
response = self.client.get("/", HTTP_HOST="example.org", secure=True)
response = self.client.get("/", headers={"host": "example.org"}, secure=True)
self.assertEqual(response.status_code, 302)
self.assertEqual(response["Location"], "https://example.com/")

Expand All @@ -594,7 +594,7 @@ def test_debug(self):
class ImproperlyConfiguredDLTest(CanonicalDomainMiddlewareTest):
def test_request(self):
with self.assertRaisesRegex(ImproperlyConfigured, "Current site unknown."):
self.client.get("/de/", HTTP_HOST="example.com")
self.client.get("/de/", headers={"host": "example.com"})


@override_settings(
Expand All @@ -619,7 +619,7 @@ def test_language(self):
Page.objects.create(title="de", slug="de", path="/de/", site=site)

self.assertRedirects(
self.client.get("/", HTTP_HOST=site.host),
self.client.get("/", headers={"host": site.host}),
"/de/",
fetch_redirect_response=False,
)
Expand All @@ -628,7 +628,7 @@ def test_language(self):
site.save()

self.assertRedirects(
self.client.get("/", HTTP_HOST=site.host),
self.client.get("/", headers={"host": site.host}),
"/en/",
fetch_redirect_response=False,
)
Expand All @@ -637,19 +637,21 @@ def test_language(self):
site.save()

self.assertRedirects(
self.client.get("/", HTTP_HOST=site.host, HTTP_ACCEPT_LANGUAGE="de"),
self.client.get("/", headers={"host": site.host, "accept-language": "de"}),
"/de/",
fetch_redirect_response=False,
)

self.assertRedirects(
self.client.get("/", HTTP_HOST=site.host, HTTP_ACCEPT_LANGUAGE="fr, en"),
self.client.get(
"/", headers={"host": site.host, "accept-language": "fr, en"}
),
"/en/",
fetch_redirect_response=False,
)

self.assertRedirects(
self.client.get("/", HTTP_HOST=site.host, HTTP_ACCEPT_LANGUAGE="fr"),
self.client.get("/", headers={"host": site.host, "accept-language": "fr"}),
"/en/",
fetch_redirect_response=False,
)
Expand All @@ -661,20 +663,28 @@ def test_i18n_patterns(self):
site = Site.objects.create(host="example.com")

self.assertRedirects(
self.client.get("/i18n/", HTTP_HOST=site.host), "/en/i18n/"
self.client.get("/i18n/", headers={"host": site.host}), "/en/i18n/"
)

self.assertContains(self.client.get("/en/i18n/", HTTP_HOST=site.host), "en")
self.assertContains(self.client.get("/de/i18n/", HTTP_HOST=site.host), "de")
self.assertContains(
self.client.get("/en/i18n/", headers={"host": site.host}), "en"
)
self.assertContains(
self.client.get("/de/i18n/", headers={"host": site.host}), "de"
)

self.assertRedirects(
self.client.get("/i18n/", HTTP_HOST=site.host, HTTP_ACCEPT_LANGUAGE="de"),
self.client.get(
"/i18n/", headers={"host": site.host, "accept-language": "de"}
),
"/de/i18n/",
)
site.default_language = "en"
site.save()
self.assertRedirects(
self.client.get("/i18n/", HTTP_HOST=site.host, HTTP_ACCEPT_LANGUAGE="de"),
self.client.get(
"/i18n/", headers={"host": site.host, "accept-language": "de"}
),
"/en/i18n/",
)

Expand Down
6 changes: 2 additions & 4 deletions tox.ini
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[tox]
envlist =
py{39,310}-dj{32,41,42}
py{310,311}-dj{32,41,42,50,main}
py{39,310}-dj{42}
py{310,311}-dj{42,50,main}
py{312}-dj{42,50,main}

[testenv]
Expand All @@ -11,8 +11,6 @@ commands =
python -Wd {envbindir}/coverage run tests/manage.py test -v2 --keepdb {posargs:testapp}
coverage report -m
deps =
dj32: Django>=3.2,<4.0
dj41: Django>=4.1,<4.2
dj42: Django>=4.2,<5.0
dj42: Django>=4.2,<5.0
dj50: Django>=5.0,<5.1
Expand Down

0 comments on commit 6a20dc0

Please sign in to comment.