Fix a few bugs with the new ID cursors.
authorJoshua Roesslein <jroesslein@gmail.com>
Mon, 10 Jun 2013 05:35:06 +0000 (22:35 -0700)
committerJoshua Roesslein <jroesslein@gmail.com>
Mon, 10 Jun 2013 05:35:06 +0000 (22:35 -0700)
 - stop once end of collection reached (empty result).
 - don't raise ValueError if ResultSet is empty when
   trying to get max/min ID of the set (max() and min() don't
   accept empty lists)

tweepy/cursor.py
tweepy/models.py

index 680b9e8faf8a5865425a439176d8bb8cd9b74adc..edda0ba623cab72c589b585826cf971416fcbfdd 100644 (file)
@@ -91,6 +91,8 @@ class IdIterator(BaseIterator):
         # to avoid requesting duplicate items.
         max_id = self.since_id - 1 if self.max_id else None
         data = self.method(max_id = max_id, *self.args, **self.kargs)
+        if len(data) == 0:
+            raise StopIteration
         self.max_id = data.max_id
         self.since_id = data.since_id
         return data
@@ -99,6 +101,8 @@ class IdIterator(BaseIterator):
         """Fetch a set of items with IDs greater than current set."""
         since_id = self.max_id
         data = self.method(since_id = since_id, *self.args, **self.kargs)
+        if len(data) == 0:
+            raise StopIteration
         self.max_id = data.max_id
         self.since_id = data.since_id
         return data
index 7171c404f9c7a94684f60d184af12c36e7363dce..fcccbf16a5b24564391e48a593af0f6777d3c2fb 100644 (file)
@@ -16,11 +16,17 @@ class ResultSet(list):
 
     @property
     def max_id(self):
-        return self._max_id or max(self.ids())
+        if self._max_id:
+            return self._max_id
+        ids = self.ids()
+        return max(ids) if ids else None
 
     @property
     def since_id(self):
-        return self._since_id or min(self.ids())
+        if self._since_id:
+            return self._since_id
+        ids = self.ids()
+        return min(ids) if ids else None
 
     def ids(self):
         return [item.id for item in self if hasattr(item, 'id')]