diff --git a/model_utils/managers.py b/model_utils/managers.py index 4cb1ffc..5746c1d 100644 --- a/model_utils/managers.py +++ b/model_utils/managers.py @@ -196,8 +196,7 @@ class InheritanceQuerySetMixin(Generic[ModelT]): # Defining the 'model' attribute using a generic type triggers a bug in mypy: -# https://github.com/python/mypy/issues/9031 -class InheritanceQuerySet(InheritanceQuerySetMixin[ModelT], QuerySet[ModelT]): # type: ignore[misc] +class InheritanceQuerySet(InheritanceQuerySetMixin[ModelT], QuerySet[ModelT]): def instance_of(self, *models: type[ModelT]) -> InheritanceQuerySet[ModelT]: """ Fetch only objects that are instances of the provided model(s). diff --git a/tests/models.py b/tests/models.py index 8c6b046..bb3c02f 100644 --- a/tests/models.py +++ b/tests/models.py @@ -110,7 +110,7 @@ class TimeFrameManagerAdded(TimeFramedModel): class Monitored(models.Model): name = models.CharField(max_length=25) name_changed = MonitorField(monitor="name") - name_changed_nullable = MonitorField(monitor="name", null=True) + name_changed_nullable = MonitorField(monitor="name", null=True) # type: ignore[misc] class MonitorWhen(models.Model): diff --git a/tests/test_fields/test_field_tracker.py b/tests/test_fields/test_field_tracker.py index b823eb6..1317c23 100644 --- a/tests/test_fields/test_field_tracker.py +++ b/tests/test_fields/test_field_tracker.py @@ -544,7 +544,7 @@ class FieldTrackerForeignKeyMixin(FieldTrackerMixin): self.assertChanged() self.assertPrevious() self.assertCurrent(id=self.instance.id, fk_id=self.old_fk.id) - self.instance.fk = self.fk_class.objects.create(number=8) # type: ignore[assignment] + self.instance.fk = self.fk_class.objects.create(number=8) self.assertChanged(fk_id=self.old_fk.id) self.assertPrevious(fk_id=self.old_fk.id) self.assertCurrent(id=self.instance.id, fk_id=self.instance.fk_id) @@ -554,7 +554,7 @@ class FieldTrackerForeignKeyMixin(FieldTrackerMixin): self.assertChanged() self.assertPrevious() self.assertCurrent(fk_id=self.old_fk.id) - self.instance.fk = self.fk_class.objects.create(number=8) # type: ignore[assignment] + self.instance.fk = self.fk_class.objects.create(number=8) self.assertChanged(fk_id=self.old_fk.id) self.assertPrevious(fk_id=self.old_fk.id) self.assertCurrent(fk_id=self.instance.fk_id) @@ -566,7 +566,7 @@ class FieldTrackerForeignKeyMixin(FieldTrackerMixin): self.assertChanged() self.assertPrevious() self.assertCurrent(fk=self.old_fk.id) - self.instance.fk = self.fk_class.objects.create(number=8) # type: ignore[assignment] + self.instance.fk = self.fk_class.objects.create(number=8) self.assertChanged(fk=self.old_fk.id) self.assertPrevious(fk=self.old_fk.id) self.assertCurrent(fk=self.instance.fk_id) diff --git a/tests/test_managers/test_inheritance_manager.py b/tests/test_managers/test_inheritance_manager.py index 68e8a74..b82edad 100644 --- a/tests/test_managers/test_inheritance_manager.py +++ b/tests/test_managers/test_inheritance_manager.py @@ -511,7 +511,7 @@ class InheritanceManagerRelatedTests(InheritanceManagerTests): self.child1) def test_get_method_with_select_subclasses_check_for_useless_join(self) -> None: - child4 = InheritanceManagerTestChild4.objects.create(related=self.related, other_onetoone=self.child1) + child4 = InheritanceManagerTestChild4.objects.create(related=self.related, other_onetoone=self.child1) # type: ignore[misc] self.assertEqual( str(InheritanceManagerTestChild4.objects.select_subclasses().filter( id=child4.id).query), @@ -521,7 +521,7 @@ class InheritanceManagerRelatedTests(InheritanceManagerTests): def test_annotate_with_select_subclasses(self) -> None: qs = InheritanceManagerTestParent.objects.select_subclasses().annotate( models.Count('id')) - self.assertEqual(qs.get(id=self.child1.id).id__count, 1) + self.assertEqual(qs.get(id=self.child1.id).id__count, 1) # type: ignore[attr-defined] def test_annotate_with_named_arguments_with_select_subclasses(self) -> None: qs = InheritanceManagerTestParent.objects.select_subclasses().annotate( @@ -531,7 +531,7 @@ class InheritanceManagerRelatedTests(InheritanceManagerTests): def test_annotate_before_select_subclasses(self) -> None: qs = InheritanceManagerTestParent.objects.annotate( models.Count('id')).select_subclasses() - self.assertEqual(qs.get(id=self.child1.id).id__count, 1) + self.assertEqual(qs.get(id=self.child1.id).id__count, 1) # type: ignore[attr-defined] def test_annotate_with_named_arguments_before_select_subclasses(self) -> None: qs = InheritanceManagerTestParent.objects.annotate( diff --git a/tests/test_models/test_softdeletable_model.py b/tests/test_models/test_softdeletable_model.py index 8f4e656..c2d6fe7 100644 --- a/tests/test_models/test_softdeletable_model.py +++ b/tests/test_models/test_softdeletable_model.py @@ -8,16 +8,16 @@ from tests.models import SoftDeletable class SoftDeletableModelTests(TestCase): def test_can_only_see_not_removed_entries(self) -> None: - SoftDeletable.available_objects.create(name='a', is_removed=True) - SoftDeletable.available_objects.create(name='b', is_removed=False) + SoftDeletable.available_objects.create(name='a', is_removed=True) # type: ignore[misc] + SoftDeletable.available_objects.create(name='b', is_removed=False) # type: ignore[misc] queryset = SoftDeletable.available_objects.all() self.assertEqual(queryset.count(), 1) - self.assertEqual(queryset[0].name, 'b') + self.assertEqual(queryset[0].name, 'b') # type: ignore[attr-defined] def test_instance_cannot_be_fully_deleted(self) -> None: - instance = SoftDeletable.available_objects.create(name='a') + instance = SoftDeletable.available_objects.create(name='a') # type: ignore[misc] instance.delete() @@ -25,7 +25,7 @@ class SoftDeletableModelTests(TestCase): self.assertEqual(SoftDeletable.all_objects.count(), 1) def test_instance_cannot_be_fully_deleted_via_queryset(self) -> None: - SoftDeletable.available_objects.create(name='a') + SoftDeletable.available_objects.create(name='a') # type: ignore[misc] SoftDeletable.available_objects.all().delete() @@ -33,12 +33,12 @@ class SoftDeletableModelTests(TestCase): self.assertEqual(SoftDeletable.all_objects.count(), 1) def test_delete_instance_no_connection(self) -> None: - obj = SoftDeletable.available_objects.create(name='a') + obj = SoftDeletable.available_objects.create(name='a') # type: ignore[misc] self.assertRaises(ConnectionDoesNotExist, obj.delete, using='other') def test_instance_purge(self) -> None: - instance = SoftDeletable.available_objects.create(name='a') + instance = SoftDeletable.available_objects.create(name='a') # type: ignore[misc] instance.delete(soft=False) @@ -46,7 +46,7 @@ class SoftDeletableModelTests(TestCase): self.assertEqual(SoftDeletable.all_objects.count(), 0) def test_instance_purge_no_connection(self) -> None: - instance = SoftDeletable.available_objects.create(name='a') + instance = SoftDeletable.available_objects.create(name='a') # type: ignore[misc] self.assertRaises(ConnectionDoesNotExist, instance.delete, using='other', soft=False) @@ -55,10 +55,10 @@ class SoftDeletableModelTests(TestCase): self.assertWarns(DeprecationWarning, SoftDeletable.objects.all) def test_delete_queryset_return(self) -> None: - SoftDeletable.available_objects.create(name='a') - SoftDeletable.available_objects.create(name='b') + SoftDeletable.available_objects.create(name='a') # type: ignore[misc] + SoftDeletable.available_objects.create(name='b') # type: ignore[misc] - result = SoftDeletable.available_objects.filter(name="a").delete() + result = SoftDeletable.available_objects.filter(name="a").delete() # type: ignore[misc] assert result == ( 1, {SoftDeletable._meta.label: 1} diff --git a/tox.ini b/tox.ini index b869141..d343b29 100644 --- a/tox.ini +++ b/tox.ini @@ -1,6 +1,6 @@ [tox] envlist = - py{38,39,310,311}-dj{42} + py{310,311}-dj{42} py{310,311,312}-dj{50,51} py{310,311,312,313}-dj{51,52} py{314}-dj{52}