def test_ratelimit_error(): responses.add(responses.POST, 'https://www.space-track.org/ajaxauth/login', json='""') responses.add( responses.GET, 'https://www.space-track.org/basicspacedata/modeldef/class/tle_publish', json={ 'controller': 'basicspacedata', 'data': [{ 'Default': '0000-00-00 00:00:00', 'Extra': '', 'Field': 'PUBLISH_EPOCH', 'Key': '', 'Null': 'NO', 'Type': 'datetime' }, { 'Default': '', 'Extra': '', 'Field': 'TLE_LINE1', 'Key': '', 'Null': 'NO', 'Type': 'char(71)' }, { 'Default': '', 'Extra': '', 'Field': 'TLE_LINE2', 'Key': '', 'Null': 'NO', 'Type': 'char(71)' }] }) responses.add( responses.GET, 'https://www.space-track.org/basicspacedata/query/class/tle_publish', status=500, body='violated your query rate limit') st = SpaceTrackClient('identity', 'password') # Change ratelimiter period to speed up test st._ratelimiter.period = 1 # Do it first without our own callback, then with. # Catch the exception when URL is called a second time and still gets HTTP 500 with pytest.raises(HTTPError): st.tle_publish() mock_callback = Mock() st.callback = mock_callback # Catch the exception when URL is called a second time and still gets HTTP 500 with pytest.raises(HTTPError): st.tle_publish() assert mock_callback.call_count == 1
def build_space_track_client(username, password, log_delay=True): stc = SpaceTrackClient(identity=username, password=password) if log_delay: # Add a call back to the space track client that logs # when the client has to sleep to abide by the rate limits stc.callback = st_callback return stc
def test_ratelimit_error(): responses.add( responses.POST, 'https://www.space-track.org/ajaxauth/login', json='""') responses.add( responses.GET, 'https://www.space-track.org/basicspacedata/modeldef/class/tle_publish', json={ 'controller': 'basicspacedata', 'data': [ { 'Default': '0000-00-00 00:00:00', 'Extra': '', 'Field': 'PUBLISH_EPOCH', 'Key': '', 'Null': 'NO', 'Type': 'datetime' }, { 'Default': '', 'Extra': '', 'Field': 'TLE_LINE1', 'Key': '', 'Null': 'NO', 'Type': 'char(71)' }, { 'Default': '', 'Extra': '', 'Field': 'TLE_LINE2', 'Key': '', 'Null': 'NO', 'Type': 'char(71)' } ]}) responses.add( responses.GET, 'https://www.space-track.org/basicspacedata/query/class/tle_publish', status=500, body='violated your query rate limit') st = SpaceTrackClient('identity', 'password') # Change ratelimiter period to speed up test st._ratelimiter.period = 1 # Do it first without our own callback, then with. # Catch the exception when URL is called a second time and still gets HTTP 500 with pytest.raises(HTTPError): st.tle_publish() mock_callback = Mock() st.callback = mock_callback # Catch the exception when URL is called a second time and still gets HTTP 500 with pytest.raises(HTTPError): st.tle_publish() assert mock_callback.call_count == 1
def test_non_ratelimit_error(): responses.add(responses.POST, 'https://www.space-track.org/ajaxauth/login', json='""') responses.add( responses.GET, 'https://www.space-track.org/basicspacedata/modeldef/class/tle_publish', json={ 'controller': 'basicspacedata', 'data': [{ 'Default': '0000-00-00 00:00:00', 'Extra': '', 'Field': 'PUBLISH_EPOCH', 'Key': '', 'Null': 'NO', 'Type': 'datetime' }, { 'Default': '', 'Extra': '', 'Field': 'TLE_LINE1', 'Key': '', 'Null': 'NO', 'Type': 'char(71)' }, { 'Default': '', 'Extra': '', 'Field': 'TLE_LINE2', 'Key': '', 'Null': 'NO', 'Type': 'char(71)' }] }) st = SpaceTrackClient('identity', 'password') # Change ratelimiter period to speed up test st._ratelimiter.period = 1 mock_callback = Mock() st.callback = mock_callback responses.add( responses.GET, 'https://www.space-track.org/basicspacedata/query/class/tle_publish', status=500, body='some other error') with pytest.raises(HTTPError): st.tle_publish() assert not mock_callback.called
def test_non_ratelimit_error(): responses.add( responses.POST, 'https://www.space-track.org/ajaxauth/login', json='""') responses.add( responses.GET, 'https://www.space-track.org/basicspacedata/modeldef/class/tle_publish', json={ 'controller': 'basicspacedata', 'data': [ { 'Default': '0000-00-00 00:00:00', 'Extra': '', 'Field': 'PUBLISH_EPOCH', 'Key': '', 'Null': 'NO', 'Type': 'datetime' }, { 'Default': '', 'Extra': '', 'Field': 'TLE_LINE1', 'Key': '', 'Null': 'NO', 'Type': 'char(71)' }, { 'Default': '', 'Extra': '', 'Field': 'TLE_LINE2', 'Key': '', 'Null': 'NO', 'Type': 'char(71)' } ]}) st = SpaceTrackClient('identity', 'password') # Change ratelimiter period to speed up test st._ratelimiter.period = 1 mock_callback = Mock() st.callback = mock_callback responses.add( responses.GET, 'https://www.space-track.org/basicspacedata/query/class/tle_publish', status=500, body='some other error') with pytest.raises(HTTPError): st.tle_publish() assert not mock_callback.called
def build_space_track_client(username, password, log_delay=True): """Builds a client for the space-track.org API. :param username: The space-track.org username :type username: str :param password: The space-track.org password :type password: str :param log_delay: Whether or not to log when the API client sleeps to prevent rate limiting :type log_delay: bool """ stc = SpaceTrackClient(identity=username, password=password) if log_delay: # Add a call back to the space track client that logs # when the client has to sleep to abide by the rate limits stc.callback = st_callback return stc