Exemplo n.º 1
0
    def test_factory(self):
        resolver = ResolverFactory.get(ResolverFactory.TYPE_HTTP,
                                       base_url='http://server.com/path',
                                       user_id_parameter_name='userId')
        self.assertTrue(type(resolver) is HttpResolver)

        resolver = ResolverFactory.get(ResolverFactory.TYPE_PRODUCT,
                                       products_service_host='10.10.10.10')
        self.assertTrue(type(resolver) is DefaultProductResolver)

        resolver = ResolverFactory.get(
            ResolverFactory.TYPE_PERSONALIZE_RECOMMENDATIONS,
            inference_arn=
            'arn:aws:personalize:us-east-1:123456789:recommender/some_name')
        self.assertTrue(type(resolver) is PersonalizeRecommendationsResolver)

        resolver = ResolverFactory.get(ResolverFactory.TYPE_SIMILAR,
                                       search_service_host='10.10.10.11')
        self.assertTrue(type(resolver) is SearchSimilarProductsResolver)

        resolver = ResolverFactory.get(
            ResolverFactory.TYPE_PERSONALIZE_RANKING,
            inference_arn=
            'arn:aws:personalize:us-east-1:123456789:campaign/some_name')
        self.assertTrue(type(resolver) is PersonalizeRankingResolver)

        resolver = ResolverFactory.get(ResolverFactory.TYPE_RANKING_NO_OP)
        self.assertTrue(type(resolver) is RankingProductsNoOpResolver)

        with self.assertRaises(ValueError):
            ResolverFactory.get('bogus')
Exemplo n.º 2
0
    def test_similar_resolver(self):
        with patch('experimentation.resolvers.requests.get') as mocked_get:
            mocked_get.return_value.ok = True
            mocked_get.return_value.json.return_value = [{
                'itemId': '1'
            }, {
                'itemId': '2'
            }, {
                'itemId': '3'
            }, {
                'itemId': '4'
            }]

            resolver = ResolverFactory.get(ResolverFactory.TYPE_SIMILAR,
                                           search_service_host='10.10.10.10',
                                           search_service_port=8000)
            items = resolver.get_items(product_id='100')
            self.assertEqual(len(items), 4)
            self.assertEqual(items[0]['itemId'], '1')
            self.assertEqual(items[1]['itemId'], '2')
            self.assertEqual(items[2]['itemId'], '3')
            self.assertEqual(items[3]['itemId'], '4')

            mocked_get.assert_called_with(
                'http://10.10.10.10:8000/similar/products?productId=100')
Exemplo n.º 3
0
    def test_http_resolver(self):
        with patch('experimentation.resolvers.requests.get') as mocked_get:
            mocked_get.return_value.ok = True
            mocked_get.return_value.json.return_value = [{
                'id': '1'
            }, {
                'id': '2'
            }, {
                'id': '3'
            }, {
                'id': '4'
            }]

            resolver = ResolverFactory.get(ResolverFactory.TYPE_HTTP,
                                           base_url='http://server.com/path',
                                           user_id_parameter_name='userId')
            items = resolver.get_items(user_id='1')
            self.assertEqual(len(items), 4)
            self.assertEqual(items[0]['itemId'], '1')
            self.assertEqual(items[1]['itemId'], '2')
            self.assertEqual(items[2]['itemId'], '3')
            self.assertEqual(items[3]['itemId'], '4')

            mocked_get.assert_called_with(
                'http://server.com/path?userId=1&numResults=10')
Exemplo n.º 4
0
    def test_personalize_ranking_resolver(self):
        orig = botocore.client.BaseClient._make_api_call

        def mock_make_api_call(self, operation_name, kwarg):
            if operation_name == 'GetPersonalizedRanking':
                parsed_response = {
                    'personalizedRanking': [{
                        'itemId': '4'
                    }, {
                        'itemId': '3'
                    }, {
                        'itemId': '2'
                    }, {
                        'itemId': '1'
                    }]
                }
                return parsed_response
            return orig(self, operation_name, kwarg)

        with patch('botocore.client.BaseClient._make_api_call',
                   new=mock_make_api_call):
            resolver = ResolverFactory.get(
                ResolverFactory.TYPE_PERSONALIZE_RANKING,
                inference_arn=
                'arn:aws:personalize:us-east-1:123456789:campaign/some_name')
            unranked_items = ['1', '2', '3', '4']
            ranked_items = resolver.get_items(user_id='12',
                                              product_list=unranked_items)
            self.assertEqual(len(ranked_items), 4)
            self.assertEqual(ranked_items[0]['itemId'], '4')
            self.assertEqual(ranked_items[1]['itemId'], '3')
            self.assertEqual(ranked_items[2]['itemId'], '2')
            self.assertEqual(ranked_items[3]['itemId'], '1')
Exemplo n.º 5
0
    def test_personalize_recommendations_resolver(self):
        orig = botocore.client.BaseClient._make_api_call

        def mock_make_api_call(self, operation_name, kwarg):
            if operation_name == 'GetRecommendations':
                parsed_response = {
                    'itemList': [{
                        'itemId': '1'
                    }, {
                        'itemId': '2'
                    }]
                }
                return parsed_response
            return orig(self, operation_name, kwarg)

        with patch('botocore.client.BaseClient._make_api_call',
                   new=mock_make_api_call):
            resolver = ResolverFactory.get(
                ResolverFactory.TYPE_PERSONALIZE_RECOMMENDATIONS,
                inference_arn=
                'arn:aws:personalize:us-east-1:123456789:campaign/some_name')
            items = resolver.get_items(user_id='12',
                                       product_id='40',
                                       num_results=20)
            self.assertEqual(len(items), 2)
            self.assertEqual(items[0]['itemId'], '1')
            self.assertEqual(items[1]['itemId'], '2')
Exemplo n.º 6
0
 def test_ranking_noop_resolver(self):
     resolver = ResolverFactory.get(ResolverFactory.TYPE_RANKING_NO_OP)
     unranked_items = ['1', '2', '3', '4']
     ranked_items = resolver.get_items(product_list=unranked_items)
     self.assertEqual(len(ranked_items), 4)
     self.assertEqual(ranked_items[0]['itemId'], '1')
     self.assertEqual(ranked_items[1]['itemId'], '2')
     self.assertEqual(ranked_items[2]['itemId'], '3')
     self.assertEqual(ranked_items[3]['itemId'], '4')
Exemplo n.º 7
0
    def test_product_resolver(self):
        with patch('experimentation.resolvers.requests.get') as mocked_get:
            mocked_get.return_value.ok = True
            mocked_get.return_value.json.return_value = [{
                'id': '1'
            }, {
                'id': '2'
            }, {
                'id': '3'
            }, {
                'id': '4'
            }]

            resolver = ResolverFactory.get(ResolverFactory.TYPE_PRODUCT,
                                           products_service_host='10.10.10.10')
            items = resolver.get_items(product_id=None)
            self.assertEqual(len(items), 4)
Exemplo n.º 8
0
 def __init__(self, **data):
     self.config = data
     self.resolver = ResolverFactory.get(**data)