Skip to content

Commit c5ffa1a

Browse files
committed
Twisted 15.3.0 does not raises expected exception serializing lambda functions
1 parent 2bca27e commit c5ffa1a

File tree

2 files changed

+15
-0
lines changed

2 files changed

+15
-0
lines changed

scrapy/_monkeypatches.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import sys
2+
from six.moves import copyreg
23

34
if sys.version_info[0] == 2:
45
from urlparse import urlparse
@@ -12,3 +13,13 @@
1213
if urlparse('s3://bucket/key?key=value').query != 'key=value':
1314
from urlparse import uses_query
1415
uses_query.append('s3')
16+
17+
18+
# Undo what Twisted's perspective broker adds to pickle register
19+
# to prevent bugs like Twisted#7989 while serializing requests
20+
import twisted.persisted.styles # NOQA
21+
# Remove only entries with twisted serializers for non-twisted types.
22+
for k, v in frozenset(copyreg.dispatch_table.items()):
23+
if not getattr(k, '__module__', '').startswith('twisted') \
24+
and getattr(v, '__module__', '').startswith('twisted'):
25+
copyreg.dispatch_table.pop(k)

tests/test_squeues.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ def test_serialize(self):
3131
self.assertEqual(q.pop(), {'a': 'dict'})
3232

3333
def test_nonserializable_object(self):
34+
# Trigger Twisted bug #7989
35+
import twisted.persisted.styles # NOQA
3436
q = self.queue()
3537
self.assertRaises(ValueError, q.push, lambda x: x)
3638

@@ -109,6 +111,8 @@ def test_serialize(self):
109111
self.assertEqual(q.pop(), 'a')
110112

111113
def test_nonserializable_object(self):
114+
# Trigger Twisted bug #7989
115+
import twisted.persisted.styles # NOQA
112116
q = self.queue()
113117
self.assertRaises(ValueError, q.push, lambda x: x)
114118

0 commit comments

Comments
 (0)