Пример #1
0
    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()
Пример #2
0
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))
Пример #3
0
    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()
Пример #4
0
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)
Пример #5
0
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))
Пример #6
0
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))