Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Fixed #26778 -- Fixed ModelSignal.connect() weak argument.
  • Loading branch information
timgraham committed Jun 19, 2016
1 parent 8ba44ec commit 9bf8d50
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 2 deletions.
5 changes: 4 additions & 1 deletion django/db/models/signals.py
Expand Up @@ -27,7 +27,10 @@ def _lazy_method(self, method, apps, receiver, sender, **kwargs):
return partial_method(sender)

def connect(self, receiver, sender=None, weak=True, dispatch_uid=None, apps=None):
self._lazy_method(super(ModelSignal, self).connect, apps, receiver, sender, dispatch_uid=dispatch_uid)
self._lazy_method(
super(ModelSignal, self).connect, apps, receiver, sender,
weak=weak, dispatch_uid=dispatch_uid,
)

def disconnect(self, receiver=None, sender=None, weak=None, dispatch_uid=None, apps=None):
if weak is not None:
Expand Down
15 changes: 14 additions & 1 deletion tests/signals/tests.py
Expand Up @@ -4,7 +4,7 @@
from django.db import models
from django.db.models import signals
from django.dispatch import receiver
from django.test import TestCase
from django.test import TestCase, mock
from django.test.utils import isolate_apps
from django.utils import six

Expand Down Expand Up @@ -258,6 +258,19 @@ def __call__(self, signal, sender, **kwargs):
self.assertTrue(b._run)
self.assertEqual(signals.post_save.receivers, [])

@mock.patch('weakref.ref')
def test_lazy_model_signal(self, ref):
def callback(sender, args, **kwargs):
pass
signals.pre_init.connect(callback)
signals.pre_init.disconnect(callback)
self.assertTrue(ref.called)
ref.reset_mock()

signals.pre_init.connect(callback, weak=False)
signals.pre_init.disconnect(callback)
ref.assert_not_called()


class LazyModelRefTest(BaseSignalTest):
def setUp(self):
Expand Down

0 comments on commit 9bf8d50

Please sign in to comment.