The streaming API Stream object can be run either in async/synch modes. See CHANGELOG...
authorJoshua Roesslein <jroesslein@gmail.com>
Fri, 20 Nov 2009 06:41:18 +0000 (00:41 -0600)
committerJoshua Roesslein <jroesslein@gmail.com>
Fri, 20 Nov 2009 06:41:18 +0000 (00:41 -0600)
CHANGELOG
tweepy/streaming.py

index 1c74825102942b44edc292547c58338c70b43587..113c8347262e5b57c3fbd1df8ca03347dca1106a 100644 (file)
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -4,6 +4,14 @@ during upgrade will be listed here.
 1.3 -> 1.4 [Future release]
 ===========================
 + Added people search API method. API.search_users()
++ Streaming API
+    - Moved parameters into POST body to prevent "head too big" errors.
+    - Stream can be run either asynchronously (threaded) or synchronously (blocks main thread).
+      By default Stream will run in sync. mode. To change this pass into the stream
+      method 'async=True'. Example:
+          s = Stream('test', 'password', MyListener())
+          s.sample(async=True)  # threaded mode
+          s.filter(track=['pizza']) # synch./blocking mode
 
 1.2 -> 1.3 [Current release]
 =====================
index c0ece3ed7e7ea33b40cc70f5c8537b71818deb63..ddb72ea4be65b067caa27619f6cda9eb20a637ab 100644 (file)
@@ -144,32 +144,36 @@ class Stream(object):
                 if self.listener.on_limit(json.loads(data)['limit']['track']) == False:
                     self.running = False
 
-    def firehose(self, count=None):
+    def _start(self, async):
+        self.running = True
+        if async:
+            Thread(target=self._run).start()
+        else:
+            self._run()
+
+    def firehose(self, count=None, async=False):
         if self.running:
             raise TweepError('Stream object already connected!')
         self.url = '/%i/statuses/firehose.json?delimited=length' % STREAM_VERSION
         if count:
             self.url += '&count=%s' % count
-        self.running = True
-        Thread(target=self._run).start()
+        self._start(async)
 
-    def retweet(self):
+    def retweet(self, async=False):
         if self.running:
             raise TweepError('Stream object already connected!')
         self.url = '/%i/statuses/retweet.json?delimited=length' % STREAM_VERSION
-        self.running = True
-        Thread(target=self._run).start()
+        self._start(async)
 
-    def sample(self, count=None):
+    def sample(self, count=None, async=False):
         if self.running:
             raise TweepError('Stream object already connected!')
         self.url = '/%i/statuses/sample.json?delimited=length' % STREAM_VERSION
         if count:
             self.url += '&count=%s' % count
-        self.running = True
-        Thread(target=self._run).start()
+        self._start(async)
 
-    def filter(self, follow=None, track=None):
+    def filter(self, follow=None, track=None, async=False):
         params = {}
         self.headers['Content-type'] = "application/x-www-form-urlencoded"
         if self.running:
@@ -180,8 +184,7 @@ class Stream(object):
         if track:
             params['track'] = ','.join(map(str, track))
         self.body = urllib.urlencode(params)
-        self.running = True
-        Thread(target=self._run).start()
+        self._start(async)
 
     def disconnect(self):
         if self.running is False: