def setUp(self): super(TestFirstAidApiClient, self).setUp() services.config.FIRST_AID_AUTH_ID = '1234' services.config.FIRST_AID_AUTH_PW = 'password' services.config.FIRST_AID_AUTH_URL_PATTERN = ( 'https://api.usmle-rx.com/v1/user/%s/login') services.config.FIRST_AID_REPORT_URL_PATTERN = ( 'https://api.usmle-rx.com/v1/report/123/execute?%s') self.client = FirstAidApiClient()
def topic_handler(data): _, url = data try: topics = FirstAidApiClient().fetch(url) except ServiceRequestError: raise FailJobError() except ServiceResponseError: raise RetrySliceError() for topic_data in topics: yield op.db.Put( FirstAidActivityTopic.new_topic(topic_data, commit=False)) yield op.counters.Increment('Topics', len(topic_data))
def setUp(self): super(TestFirstAidApiClient, self).setUp() services.config.FIRST_AID_AUTH_ID = '1234' services.config.FIRST_AID_AUTH_PW = 'password' services.config.FIRST_AID_AUTH_URL_PATTERN = ( 'https://api.usmle-rx.com/v1/user/%s/login' ) services.config.FIRST_AID_REPORT_URL_PATTERN = ( 'https://api.usmle-rx.com/v1/report/123/execute?%s' ) self.client = FirstAidApiClient()
def query_handler(data): _, url = data try: session_user_topic_stats = FirstAidApiClient().fetch(url) except ServiceRequestError: raise FailJobError() except ServiceResponseError: raise RetrySliceError() for session_data in session_user_topic_stats: try: education.api.validate('FirstAidSessionRowData', session_data) except ValidationError: logging.error('Invalid session stats: %s', session_data) continue yield op.db.Put(FirstAidActivity.from_data(session_data, commit=False)) yield op.counters.Increment('Session stats', 1)
class TestFirstAidApiClient(TestCase): def setUp(self): super(TestFirstAidApiClient, self).setUp() services.config.FIRST_AID_AUTH_ID = '1234' services.config.FIRST_AID_AUTH_PW = 'password' services.config.FIRST_AID_AUTH_URL_PATTERN = ( 'https://api.usmle-rx.com/v1/user/%s/login') services.config.FIRST_AID_REPORT_URL_PATTERN = ( 'https://api.usmle-rx.com/v1/report/123/execute?%s') self.client = FirstAidApiClient() def test_auth_pw(self): self.assertEqual('password', self.client.auth_pw) def test_cached_auth_cookie(self): memcache.set(firstaid.MEMCACHE_SESSION_KEY, 'foo') self.assertEqual('foo', self.client.auth_cookie) self.assertEqual('foo', self.client.auth_cookie) def test_fresh_auth_cookie(self): self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234/login', content=json.dumps({'sid': 'abc'}), headers={'Set-Cookie': 'sid=abc'}) self.assertEqual('sid=abc', self.client.auth_cookie) self.assertEqual('sid=abc', self.client.auth_cookie) self.assertEqual(1, len(self.url_fetcher.calls)) def test_reset_cookie(self): self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234/login', content=json.dumps({'sid': 'abc'}), headers={'Set-Cookie': 'sid=abc'}) self.assertEqual('sid=abc', self.client.auth_cookie) self.client.reset_cookie() self.assertEqual('sid=abc', self.client.auth_cookie) self.assertEqual(2, len(self.url_fetcher.calls)) def test_fetch(self): memcache.set(firstaid.MEMCACHE_SESSION_KEY, 'foo') self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234', content=json.dumps({ 'id': '1234', 'name': 'Bob Smith' })) resp = self.client.fetch('https://api.usmle-rx.com/v1/user/1234') self.assertEqual({'id': '1234', 'name': 'Bob Smith'}, resp) url, headers = self.url_fetcher.calls[0] self.assertEqual([('Cookie', 'foo')], headers) def test_fetch_400(self): memcache.set(firstaid.MEMCACHE_SESSION_KEY, 'foo') self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234', content=json.dumps({}), status_code=400, ) self.assertRaises(ServiceRequestError, self.client.fetch, 'https://api.usmle-rx.com/v1/user/1234') def test_fetch_500(self): memcache.set(firstaid.MEMCACHE_SESSION_KEY, 'foo') self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234', content=json.dumps({}), status_code=500, ) self.assertRaises(ServiceResponseError, self.client.fetch, 'https://api.usmle-rx.com/v1/user/1234') def test_fetch_401(self): self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234/login', content=json.dumps({'sid': 'abc'}), headers={'Set-Cookie': 'sid=abc'}) self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234', content=json.dumps({}), status_code=401, ) self.assertRaises(ServiceAuthError, self.client.fetch, 'https://api.usmle-rx.com/v1/user/1234') self.assertEqual(4, len(self.url_fetcher.calls))
class TestFirstAidApiClient(TestCase): def setUp(self): super(TestFirstAidApiClient, self).setUp() services.config.FIRST_AID_AUTH_ID = '1234' services.config.FIRST_AID_AUTH_PW = 'password' services.config.FIRST_AID_AUTH_URL_PATTERN = ( 'https://api.usmle-rx.com/v1/user/%s/login' ) services.config.FIRST_AID_REPORT_URL_PATTERN = ( 'https://api.usmle-rx.com/v1/report/123/execute?%s' ) self.client = FirstAidApiClient() def test_auth_pw(self): self.assertEqual('password', self.client.auth_pw) def test_cached_auth_cookie(self): memcache.set(firstaid.MEMCACHE_SESSION_KEY, 'foo') self.assertEqual('foo', self.client.auth_cookie) self.assertEqual('foo', self.client.auth_cookie) def test_fresh_auth_cookie(self): self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234/login', content=json.dumps({'sid': 'abc'}), headers={ 'Set-Cookie': 'sid=abc' } ) self.assertEqual('sid=abc', self.client.auth_cookie) self.assertEqual('sid=abc', self.client.auth_cookie) self.assertEqual(1, len(self.url_fetcher.calls)) def test_reset_cookie(self): self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234/login', content=json.dumps({'sid': 'abc'}), headers={ 'Set-Cookie': 'sid=abc' } ) self.assertEqual('sid=abc', self.client.auth_cookie) self.client.reset_cookie() self.assertEqual('sid=abc', self.client.auth_cookie) self.assertEqual(2, len(self.url_fetcher.calls)) def test_fetch(self): memcache.set(firstaid.MEMCACHE_SESSION_KEY, 'foo') self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234', content=json.dumps({'id': '1234', 'name': 'Bob Smith'}) ) resp = self.client.fetch('https://api.usmle-rx.com/v1/user/1234') self.assertEqual({'id': '1234', 'name': 'Bob Smith'}, resp) url, headers = self.url_fetcher.calls[0] self.assertEqual([('Cookie', 'foo')], headers) def test_fetch_400(self): memcache.set(firstaid.MEMCACHE_SESSION_KEY, 'foo') self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234', content=json.dumps({}), status_code=400, ) self.assertRaises( ServiceRequestError, self.client.fetch, 'https://api.usmle-rx.com/v1/user/1234' ) def test_fetch_500(self): memcache.set(firstaid.MEMCACHE_SESSION_KEY, 'foo') self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234', content=json.dumps({}), status_code=500, ) self.assertRaises( ServiceResponseError, self.client.fetch, 'https://api.usmle-rx.com/v1/user/1234' ) def test_fetch_401(self): self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234/login', content=json.dumps({'sid': 'abc'}), headers={ 'Set-Cookie': 'sid=abc' } ) self.url_fetcher.set_return_values( 'https://api.usmle-rx.com/v1/user/1234', content=json.dumps({}), status_code=401, ) self.assertRaises( ServiceAuthError, self.client.fetch, 'https://api.usmle-rx.com/v1/user/1234' ) self.assertEqual(4, len(self.url_fetcher.calls))