Skip to content

Commit 9b93162

Browse files
committed
chores: remove no-index-together
1 parent ec545f2 commit 9b93162

File tree

10 files changed

+15
-35
lines changed

10 files changed

+15
-35
lines changed

.github/workflows/main.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,8 @@ jobs:
3434
python-version: 3.8
3535
- django-version: "Django>=5.0,<5.1"
3636
python-version: 3.9
37+
- django-version: "Django==5.1a1"
38+
python-version: 3.8
3739
- django-version: "Django==5.1a1"
3840
python-version: 3.9
3941
# - django-version: "https://github.com/django/django/archive/main.tar.gz"

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,10 @@
22

33
### Unreleased
44

5+
### 0.15.0
6+
57
- chores: Add python3.13 and django5.1 to test matrix
8+
- chores: remove `no-index-together`
69

710
### 0.14.1
811

README.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@ Collection of useful checks for Django Checks Frameworks
1010
- **model-attribute** - Each Model in the project must have all attributes from `attrs` setting specified.
1111
- **model-meta-attribute** - Each Model.Meta in the project must have all attributes from `attrs` setting specified.
1212
- **no-unique-together** - Use `UniqueConstraint` with the `constraints` option instead.
13-
- **no-index-together** - [DEPRECATED] Use the `indexes` option instead.
1413
- **model-admin** - Each model must be registered in admin.
1514
- **field-file-upload-to** - `FileField` / `ImageField` must have non empty `upload_to` argument.
1615
- **field-verbose-name** - All model's fields must have verbose name.
1716
- **field-verbose-name-gettext** - `verbose_name` must use gettext.
1817
- **field-verbose-name-gettext-case** - Words in text wrapped with gettext must be in one case.
1918
- **field-help-text-gettext** - `help_text` must use gettext.
2019
- **field-text-null** - text fields shouldn't use `null=True`.
21-
- **field-boolean-null** - [DEPRECATED] prefer using `BooleanField(null=True)` instead of `NullBooleanField`.
2220
- **field-null** - don't pass `null=False` to model fields (this is django default).
2321
- **field-foreign-key-db-index** - ForeignKey fields must specify `db_index` explicitly (to apply only to fields in indexes: `when: indexes`).
2422
- **field-related-name** - Related fields must specify `related_name` explicitly.

src/extra_checks/check_id.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class CheckId(str, enum.Enum):
88
X011 = "model-meta-attribute"
99
X012 = "model-admin"
1010
X013 = "no-unique-together"
11-
X014 = "no-index-together"
11+
# X014 = "no-index-together" - removed
1212
X050 = "field-verbose-name"
1313
X051 = "field-verbose-name-gettext"
1414
X052 = "field-verbose-name-gettext-case"

src/extra_checks/checks/model_checks.py

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -179,17 +179,3 @@ def apply(
179179
"Use UniqueConstraint with the constraints option instead.",
180180
obj=model,
181181
)
182-
183-
184-
@registry.register(django.core.checks.Tags.models)
185-
class CheckNoIndexTogether(CheckModelMeta):
186-
Id = CheckId.X014
187-
deprecation_warnings = [
188-
"`no-index-together` check is deprecated and will be removed in a future version"
189-
]
190-
191-
def apply(
192-
self, model: Type[models.Model], ast: ModelASTProtocol
193-
) -> Iterator[django.core.checks.CheckMessage]:
194-
if ast.has_meta_var("index_together"):
195-
yield self.message("Use the indexes option instead", obj=model)

src/extra_checks/checks/model_field_checks.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
from abc import abstractmethod
22
from typing import Any, Iterator, Optional, Type
33

4+
import django
45
import django.core.checks
56
from django import forms
67
from django.db import models
@@ -198,8 +199,9 @@ def __init__(self, when: str, **kwargs: Any) -> None:
198199
def get_index_values_in_meta(cls, model: Type[models.Model]) -> Iterator[str]:
199200
for entry in model._meta.unique_together:
200201
yield from entry
201-
for entry in model._meta.index_together:
202-
yield from entry
202+
if django.VERSION < (5, 1):
203+
for entry in model._meta.index_together:
204+
yield from entry
203205
for constraint in model._meta.constraints:
204206
if isinstance(constraint, models.UniqueConstraint):
205207
yield from constraint.fields

tests/example/models.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import django
12
from django.contrib.contenttypes.fields import GenericForeignKey, GenericRelation
23
from django.contrib.contenttypes.models import ContentType
34
from django.contrib.sites.models import Site
@@ -128,7 +129,8 @@ class ModelFieldForeignKeyIndex(models.Model):
128129

129130
class Meta:
130131
unique_together = [("author", "article")]
131-
index_together = ("field_one", "field_two")
132+
if django.VERSION < (5, 1):
133+
index_together = ("field_one", "field_two")
132134
constraints = [
133135
models.UniqueConstraint(
134136
fields=("author", "field_three"), name="fi_author_field_unique"
@@ -231,4 +233,3 @@ class DisableManyChecksModel(models.Model):
231233
# extra-checks-disable-next-line no-unique-together
232234
class Meta:
233235
unique_together = ("text_fail", "text_fail2")
234-
index_together = ("text_fail", "text_fail2")

tests/test_ignore.py

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,15 +44,13 @@ def test_ignore_many_model_check(test_case):
4444
model_field_checks.CheckFieldTextNull.Id.value,
4545
model_field_checks.CheckFieldVerboseName.Id.value,
4646
model_checks.CheckNoUniqueTogether.Id.value,
47-
model_checks.CheckNoIndexTogether.Id.value,
4847
]
4948
}
5049
)
5150
.check(
5251
model_field_checks.CheckFieldTextNull,
5352
model_field_checks.CheckFieldVerboseName,
5453
model_checks.CheckNoUniqueTogether,
55-
model_checks.CheckNoIndexTogether,
5654
)
5755
.run()
5856
)

tests/test_model_checks.py

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -96,14 +96,3 @@ def test_no_unique_together(test_case):
9696
)
9797
assert len(messages) == 1
9898
assert messages[0].id == model_checks.CheckNoUniqueTogether.Id.name
99-
100-
101-
def test_no_index_together(test_case):
102-
messages = (
103-
test_case.models(ModelFieldForeignKeyIndex)
104-
.settings({"checks": [model_checks.CheckNoIndexTogether.Id.value]})
105-
.check(model_checks.CheckNoIndexTogether)
106-
.run()
107-
)
108-
assert len(messages) == 1
109-
assert messages[0].id == model_checks.CheckNoIndexTogether.Id.name

tests/test_model_field_checks.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import django
12
import pytest
23

34
from extra_checks.checks import model_checks, model_field_checks
@@ -137,7 +138,7 @@ def test_check_field_foreign_key_index(test_case):
137138
.run()
138139
)
139140
assert {m.obj.name for m in messages} == {
140-
"field_one",
141+
*(["field_one"] if django.VERSION < (5, 1) else []),
141142
"author",
142143
"field_three",
143144
"field_in_indexes",

0 commit comments

Comments
 (0)