Skip to content

Commit 016a4b7

Browse files
committed
Send dict instead of User to the receivers.
Also, sender for user_deleted signal is None (instead of User object). When running on Python 3, when blinker iterates through all receivers listening for sender (receivers_for() method on Signal), it tries to get hashable_identity for the sender. To do that, it checks if sender has '__func__' attribute. This calls _ensure_data() on User object that we have just deleted (so it doesn't exist any more).
1 parent e642fd7 commit 016a4b7

File tree

3 files changed

+14
-13
lines changed

3 files changed

+14
-13
lines changed

flask_stormpath/models.py

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,15 +58,16 @@ def save(self):
5858
Send signal after user is updated.
5959
"""
6060
return_value = super(User, self).save()
61-
user_updated.send(self, user=self)
61+
user_updated.send(self, user=dict(self))
6262
return return_value
6363

6464
def delete(self):
6565
"""
6666
Send signal after user is deleted.
6767
"""
68+
user_dict = dict(self)
6869
return_value = super(User, self).delete()
69-
user_deleted.send(self, user=self)
70+
user_deleted.send(None, user=user_dict)
7071
return return_value
7172

7273
@classmethod
@@ -109,7 +110,7 @@ def create(self, email, password, given_name, surname, username=None, middle_nam
109110
'status': status,
110111
})
111112
_user.__class__ = User
112-
user_created.send(self, user=_user)
113+
user_created.send(self, user=dict(_user))
113114

114115
return _user
115116

tests/test_models.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Tests for our data models."""
22

33

4-
from flask.ext.stormpath.models import User
4+
from flask_stormpath.models import User
55
from stormpath.resources.account import Account
66

77
from .helpers import StormpathTestCase

tests/test_signals.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"""Run tests for signals."""
22

33
from flask.ext.login import user_logged_in
4-
from flask.ext.stormpath.models import (
4+
from flask_stormpath.models import (
55
User,
66
user_created,
77
user_deleted,
@@ -34,11 +34,11 @@ def test_user_created_signal(self):
3434
self.assertEqual(len(signal_receiver.received_signals), 1)
3535
received_signal = signal_receiver.received_signals[0]
3636
# User instance is received
37-
self.assertIsInstance(received_signal[1], User)
37+
self.assertIsInstance(received_signal[1], dict)
3838
# Correct user instance is received
3939
created_user = received_signal[1]
40-
self.assertEqual(created_user.email, '[email protected]')
41-
self.assertEqual(created_user.surname, 'Degges')
40+
self.assertEqual(created_user['email'], '[email protected]')
41+
self.assertEqual(created_user['surname'], 'Degges')
4242

4343
def test_user_logged_in_signal(self):
4444
# Subscribe to signals for user login
@@ -95,11 +95,11 @@ def test_user_is_updated_signal(self):
9595
self.assertEqual(len(signal_receiver.received_signals), 1)
9696
received_signal = signal_receiver.received_signals[0]
9797
# User instance is received
98-
self.assertIsInstance(received_signal[1], User)
98+
self.assertIsInstance(received_signal[1], dict)
9999
# Correct user instance is received
100100
updated_user = received_signal[1]
101-
self.assertEqual(updated_user.email, '[email protected]')
102-
self.assertEqual(updated_user.middle_name, 'Clark')
101+
self.assertEqual(updated_user['email'], '[email protected]')
102+
self.assertEqual(updated_user['middle_name'], 'Clark')
103103

104104
def test_user_is_deleted_signal(self):
105105
# Subscribe to signals for user delete
@@ -122,7 +122,7 @@ def test_user_is_deleted_signal(self):
122122
self.assertEqual(len(signal_receiver.received_signals), 1)
123123
received_signal = signal_receiver.received_signals[0]
124124
# User instance is received
125-
self.assertIsInstance(received_signal[1], User)
125+
self.assertIsInstance(received_signal[1], dict)
126126
# Correct user instance is received
127127
deleted_user = received_signal[1]
128-
self.assertEqual(deleted_user.email, '[email protected]')
128+
self.assertEqual(deleted_user['email'], '[email protected]')

0 commit comments

Comments
 (0)