Encode track and follow parameters to UTF8. Blindly calling str() will cause a Unicod...
authorDan Fairs <dan@fezconsulting.com>
Tue, 17 Jan 2012 12:17:33 +0000 (12:17 +0000)
committerAaron Hill <aa1ronham@gmail.com>
Sun, 22 Dec 2013 13:53:36 +0000 (08:53 -0500)
tests/test_streaming.py
tweepy/streaming.py

index fdeb2c929af6d522a8610eb23223e9f7fc94e72a..ed4824bbb263803ff72e2c0f8c06c2bf13cc497e 100644 (file)
@@ -68,6 +68,21 @@ class TweepyStreamTests(unittest.TestCase):
         self.assertEquals(self.listener.status_count,
                           self.listener.status_stop_count)
 
+    def test_track_encoding(self):
+        s = Stream(None, None)
+        s._start = lambda async: None
+        s.filter(track=[u'Caf\xe9'])
+
+        # Should be UTF-8 encoded
+        self.assertEqual(u'Caf\xe9'.encode('utf8'), s.parameters['track'])
+
+    def test_follow_encoding(self):
+        s = Stream(None, None)
+        s._start = lambda async: None
+        s.filter(follow=[u'Caf\xe9'])
+
+        # Should be UTF-8 encoded
+        self.assertEqual(u'Caf\xe9'.encode('utf8'), s.parameters['follow'])
 
 class TweepyStreamBackoffTests(unittest.TestCase):
     def setUp(self):
index cd6bffb95b3a586271fbadce4fe69d141b7f277f..61b3021c843a2275a30ea09844d6b403f4d69fd8 100644 (file)
@@ -272,17 +272,19 @@ class Stream(object):
             self.url += '&count=%s' % count
         self._start(async)
 
-    def filter(self, follow=None, track=None, async=False, locations=None, 
-        count = None, stall_warnings=False, languages=None):
+    def filter(self, follow=None, track=None, async=False, locations=None,
+               count=None, stall_warnings=False, languages=None, encoding='utf8'):
         self.parameters = {}
         self.headers['Content-type'] = "application/x-www-form-urlencoded"
         if self.running:
             raise TweepError('Stream object already connected!')
         self.url = '/%s/statuses/filter.json?delimited=length' % STREAM_VERSION
         if follow:
-            self.parameters['follow'] = ','.join(map(str, follow))
+            encoded_follow = [s.encode(encoding) for s in follow]
+            self.parameters['follow'] = ','.join(encoded_follow)
         if track:
-            self.parameters['track'] = ','.join(map(str, track))
+            encoded_track = [s.encode(encoding) for s in track]
+            self.parameters['track'] = ','.join(encoded_track)
         if locations and len(locations) > 0:
             assert len(locations) % 4 == 0
             self.parameters['locations'] = ','.join(['%.2f' % l for l in locations])