Skip to content
Browse files

fixes rate limit error for /statuses/show/:id and /users/show endpoint

  • Loading branch information...
1 parent bd7e6af commit 67575e00ad6d8941f0b5be86b775d45ac0ecff5c @jeremylow jeremylow committed Apr 12, 2016
Showing with 19 additions and 7 deletions.
  1. +12 −4 tests/test_rate_limit.py
  2. +7 −3 twitter/ratelimit.py
View
16 tests/test_rate_limit.py
@@ -1,15 +1,15 @@
# encoding: utf-8
+import re
import sys
import unittest
+import warnings
import twitter
-
-import warnings
+import responses
warnings.filterwarnings('ignore', category=DeprecationWarning)
-
-import responses
+DEF_URL_RE = re.compile(r'https?://.*\.twitter.com/1\.1/.*')
class ErrNull(object):
@@ -60,6 +60,13 @@ def testInitializeRateLimit(self):
self.assertTrue(self.api.rate_limit)
self.assertTrue(self.api.sleep_on_rate_limit)
+ responses.add(responses.GET, url=DEF_URL_RE, body=b'{}', status=200)
+ try:
+ self.api.GetStatus(status_id=1234)
+ self.api.GetUser(screen_name='test')
+ except Exception as e:
+ self.fail(e)
+
@responses.activate
def testCheckRateLimit(self):
with open('testdata/ratelimit.json') as f:
@@ -105,6 +112,7 @@ def setUp(self):
self.api.InitializeRateLimit()
self.assertTrue(self.api.rate_limit)
+
def tearDown(self):
sys.stderr = self._stderr
pass
View
10 twitter/ratelimit.py
@@ -17,8 +17,8 @@
SAVED_SEARCHES_DESTROY_ID = ResourceEndpoint(re.compile(r'/saved_searches/destroy/\d+'), "/saved_searches/destroy/:id")
SAVED_SEARCHES_SHOW_ID = ResourceEndpoint(re.compile(r'/saved_searches/show/\d+'), "/saved_searches/show/:id")
STATUSES_RETWEETS_ID = ResourceEndpoint(re.compile(r'/statuses/retweets/\d+'), "/statuses/retweets/:id")
-STATUSES_SHOW_ID = ResourceEndpoint(re.compile(r'/statuses/show/\d+'), "/statuses/show/:id")
-USERS_SHOW_ID = ResourceEndpoint(re.compile(r'/users/show/\d+'), "/users/show/:id")
+STATUSES_SHOW_ID = ResourceEndpoint(re.compile(r'/statuses/show'), "/statuses/show/:id")
+USERS_SHOW_ID = ResourceEndpoint(re.compile(r'/users/show'), "/users/show/:id")
USERS_SUGGESTIONS_SLUG = ResourceEndpoint(re.compile(r'/users/suggestions/\w+$'), "/users/suggestions/:slug")
USERS_SUGGESTIONS_SLUG_MEMBERS = ResourceEndpoint(re.compile(r'/users/suggestions/.+/members'), "/users/suggestions/:slug/members")
@@ -144,7 +144,6 @@ def set_unknown_limit(self, url, limit, remaining, reset):
reset (int):
Epoch time at which the rate limit window will reset.
"""
-
endpoint = self.url_to_resource(url)
resource_family = endpoint.split('/')[1]
self.__dict__['resources'].update(
@@ -174,6 +173,11 @@ def get_limit(self, url):
family_rates = self.resources.get(resource_family).get(endpoint)
except AttributeError:
return EndpointRateLimit(limit=15, remaining=15, reset=0)
+
+ if not family_rates:
+ self.set_unknown_limit(url, limit=15, remaining=15, reset=0)
+ return EndpointRateLimit(limit=15, remaining=15, reset=0)
+
return EndpointRateLimit(family_rates['limit'],
family_rates['remaining'],
family_rates['reset'])

0 comments on commit 67575e0

Please sign in to comment.
Something went wrong with that request. Please try again.