Add minimal type annotations to make mypy pass

Avoid using `Self` as a type argument: for some reason this fails
when mypy has an empty cache, but passes when the cache has been
filled. Maybe it's a weird interaction between the mypy core and
the django-stubs plugin?
This commit is contained in:
Maarten ter Huurne 2024-03-25 17:30:48 +01:00
parent 441e3adee5
commit 2f58a1160d
2 changed files with 22 additions and 15 deletions

View file

@ -1,3 +1,7 @@
from __future__ import annotations
from typing import ClassVar
from django.db import models
from django.db.models import Manager
from django.db.models.query_utils import DeferredAttribute
@ -32,7 +36,7 @@ class InheritanceManagerTestParent(models.Model):
related_self = models.OneToOneField(
"self", related_name="imtests_self", null=True,
on_delete=models.CASCADE)
objects = InheritanceManager()
objects: ClassVar[InheritanceManager[InheritanceManagerTestParent]] = InheritanceManager()
def __str__(self):
return "{}({})".format(
@ -44,7 +48,7 @@ class InheritanceManagerTestParent(models.Model):
class InheritanceManagerTestChild1(InheritanceManagerTestParent):
non_related_field_using_descriptor_2 = models.FileField(upload_to="test")
normal_field_2 = models.TextField()
objects = InheritanceManager()
objects: ClassVar[InheritanceManager[InheritanceManagerTestParent]] = InheritanceManager()
class InheritanceManagerTestGrandChild1(InheritanceManagerTestChild1):
@ -172,8 +176,8 @@ class Post(models.Model):
order = models.IntegerField()
objects = models.Manager()
public = QueryManager(published=True)
public_confirmed = QueryManager(
public: ClassVar[QueryManager[Post]] = QueryManager(published=True)
public_confirmed: ClassVar[QueryManager[Post]] = QueryManager(
models.Q(published=True) & models.Q(confirmed=True))
public_reversed = QueryManager(published=True).order_by("-order")
@ -194,7 +198,7 @@ class SplitFieldAbstractParent(models.Model):
class AbstractTracked(models.Model):
number = 1
number: models.IntegerField
class Meta:
abstract = True
@ -340,13 +344,13 @@ class SoftDeletable(SoftDeletableModel):
"""
name = models.CharField(max_length=20)
all_objects = models.Manager()
all_objects: ClassVar[Manager[SoftDeletable]] = models.Manager()
class CustomSoftDelete(SoftDeletableModel):
is_read = models.BooleanField(default=False)
objects = CustomSoftDeleteManager()
objects: ClassVar[CustomSoftDeleteManager[SoftDeletableModel]] = CustomSoftDeleteManager()
class StringyDescriptor:
@ -390,7 +394,7 @@ class ModelWithCustomDescriptor(models.Model):
class BoxJoinModel(models.Model):
name = models.CharField(max_length=32)
objects = JoinManager()
objects: ClassVar[JoinManager[BoxJoinModel]] = JoinManager()
class JoinItemForeignKey(models.Model):
@ -400,7 +404,7 @@ class JoinItemForeignKey(models.Model):
null=True,
on_delete=models.CASCADE
)
objects = JoinManager()
objects: ClassVar[JoinManager[JoinItemForeignKey]] = JoinManager()
class CustomUUIDModel(UUIDModel):

View file

@ -1,7 +1,10 @@
from __future__ import annotations
from unittest import skip
from django.core.cache import cache
from django.core.exceptions import FieldError
from django.db import models
from django.db.models.fields.files import FieldFile
from django.test import TestCase
@ -73,7 +76,7 @@ class FieldTrackerCommonTests:
class FieldTrackerTests(FieldTrackerTestCase, FieldTrackerCommonTests):
tracked_class = Tracked
tracked_class: type[models.Model] = Tracked
def setUp(self):
self.instance = self.tracked_class()
@ -280,7 +283,7 @@ class FieldTrackerMultipleInstancesTests(TestCase):
class FieldTrackedModelCustomTests(FieldTrackerTestCase,
FieldTrackerCommonTests):
tracked_class = TrackedNotDefault
tracked_class: type[models.Model] = TrackedNotDefault
def setUp(self):
self.instance = self.tracked_class()
@ -411,7 +414,7 @@ class FieldTrackedModelAttributeTests(FieldTrackerTestCase):
class FieldTrackedModelMultiTests(FieldTrackerTestCase,
FieldTrackerCommonTests):
tracked_class = TrackedMultiple
tracked_class: type[models.Model] = TrackedMultiple
def setUp(self):
self.instance = self.tracked_class()
@ -502,8 +505,8 @@ class FieldTrackedModelMultiTests(FieldTrackerTestCase,
class FieldTrackerForeignKeyTests(FieldTrackerTestCase):
fk_class = Tracked
tracked_class = TrackedFK
fk_class: type[models.Model] = Tracked
tracked_class: type[models.Model] = TrackedFK
def setUp(self):
self.old_fk = self.fk_class.objects.create(number=8)
@ -729,7 +732,7 @@ class FieldTrackerFileFieldTests(FieldTrackerTestCase):
class ModelTrackerTests(FieldTrackerTests):
tracked_class = ModelTracked
tracked_class: type[models.Model] = ModelTracked
def test_cache_compatible(self):
cache.set('key', self.instance)