Exemplo n.º 1
0
 def test_copy_source_missing_with_default(self, process_config, config3):
     expected = deepcopy(config3)
     expected['second'] = expected['second']['__default__']
     del expected['first']
     del config3['first']
     got = process_config(config3)
     assert got == expected
Exemplo n.º 2
0
    def test_entry_point_not_set(self, config, flask_app_test, flask_client,
                                 mock_predict):
        from palladium.config import process_config

        config['model_persister'] = Mock()
        config['predict_service'] = {
            '!': 'palladium.server.PredictService',
            'mapping': [
                ('param', 'str'),
            ],
        }
        # set default predict_decorators
        config['predict_decorators'] = ['palladium.tests.test_server.dec']
        with flask_app_test.test_request_context():
            process_config(config)

        resp1 = flask_client.get('predict?param=bla')

        # decorated result: default predict_decorators is defined
        assert resp1.get_data().decode('utf-8') == '/predict_decorated'
Exemplo n.º 3
0
    def test_entry_point_multiple(
            self, config, flask_app_test, flask_client, mock_predict):
        from palladium.config import process_config

        config['model_persister'] = Mock()
        config['my_predict_service'] = {
            '__factory__': 'palladium.server.PredictService',
            'mapping': [
                ('param', 'str'),
            ],
            'entry_point': '/predict1',
        }
        config['my_predict_service2'] = {
            '__factory__': 'palladium.server.PredictService',
            'mapping': [
                ('param', 'str'),
            ],
            'entry_point': '/predict2',
            'decorator_list_name': 'predict_decorators2',
        }

        # only second predict service uses decorator list
        config['predict_decorators2'] = ['palladium.tests.test_server.dec']

        with flask_app_test.test_request_context():
            process_config(config)

        resp1 = flask_client.get(
            'predict1?param=bla')

        # no decorated result: default predict_decorators is not defined
        assert resp1.get_data().decode('utf-8') == '/predict1'

        resp2 = flask_client.get(
            'predict2?param=bla')

        # decorated result using predict_decorators2
        assert resp2.get_data().decode('utf-8') == '/predict2_decorated'
Exemplo n.º 4
0
    def test_entry_point_multiple_conflict(self, config, flask_app_test,
                                           flask_client, mock_predict):
        from palladium.config import process_config

        config['model_persister'] = Mock()
        config['my_predict_service'] = {
            '!': 'palladium.server.PredictService',
            'mapping': [
                ('param', 'str'),
            ],
            'entry_point': '/predict1',  # <--
        }
        config['my_predict_service2'] = {
            '!': 'palladium.server.PredictService',
            'mapping': [
                ('param', 'str'),
            ],
            'entry_point': '/predict1',  # conflict: entry point exists
        }

        with pytest.raises(AssertionError):
            with flask_app_test.test_request_context():
                process_config(config)
Exemplo n.º 5
0
    def test_config1(self, process_config, config1):
        config = process_config(config1)

        assert config['myconstant'] == 42

        mycomponent = config['mycomponent']
        assert isinstance(mycomponent, MyDummyComponent)
        assert mycomponent.arg1 == 3
        assert mycomponent.arg2 == {'no': 'factory'}
        assert mycomponent.initialize_component_arg is config

        subcomponent = mycomponent.subcomponent
        assert isinstance(subcomponent, MyDummyComponent)
        assert subcomponent.arg2 == 6
        assert subcomponent.initialize_component_arg is config

        subsubcomponent = subcomponent.arg1['subsubcomponent']
        assert isinstance(subsubcomponent, MyDummyComponent)
        assert subsubcomponent.arg1 == 'wobwob'
        assert subsubcomponent.arg2 == 9
        assert subsubcomponent.initialize_component_arg is config

        mylistofcomponents = config['mylistofcomponents']
        assert len(mylistofcomponents) == 2
        assert isinstance(mylistofcomponents[0], MyDummyComponent)
        assert mylistofcomponents[0].arg1 == 'wobwob'
        assert mylistofcomponents[1] == 'somethingelse'

        mnl = config['mynestedlistofcomponents']
        assert isinstance(mnl[0][0], MyDummyComponent)
        assert mnl[0][0].arg1 == 'feep'

        assert config['mycopiedconstant'] == 3

        mcc = config['mydict']['mycopiedcomponent']
        assert mcc.arg2 is None
        assert mcc.arg1 == mycomponent.arg1
        assert mcc.subcomponent == mycomponent.subcomponent
        assert mcc.subcomponent is not mycomponent.subcomponent

        assert isinstance(mnl[0][0].arg2, dict)
        assert config['myotherconstant'] == 13
Exemplo n.º 6
0
    def test_config1_and_2(self, process_config, config1, config2):
        config = process_config(config1, config2)

        assert config['mydict']['arg1'] == 3

        mycomponent = config['mycomponent']
        mcc = config['mydict']['mycopiedcomponent']
        assert mcc.arg2 is None
        assert mcc.arg1 == mycomponent.arg1
        assert mcc.subcomponent == mycomponent.subcomponent
        assert mcc.subcomponent is not mycomponent.subcomponent

        assert config['mynewdict']['arg1'] == config['mydict']['arg1']
        assert config['mynewdict']['arg2'] == 2
        assert isinstance(config['mynewdict']['mycopiedcomponent'],
                          MyDummyComponent)
        assert isinstance(config['mysupernewdict']['mycopiedcomponent'],
                          MyDummyComponent)

        assert config['mycopiedconstant'] == 3
Exemplo n.º 7
0
 def test_initialize_config_logging(self, process_config):
     with patch('palladium.config.dictConfig') as dictConfig:
         process_config({'logging': 'yes, please'})
         dictConfig.assert_called_with('yes, please')
Exemplo n.º 8
0
 def test_copy_source_missing_no_default(self, process_config, config3):
     del config3['first']
     del config3['second']['__default__']
     with pytest.raises(KeyError):
         process_config(config3)
Exemplo n.º 9
0
 def test_copy_source_exists_with_default(self, process_config, config3):
     expected = deepcopy(config3)
     expected['second'] = expected['first']
     got = process_config(config3)
     assert got == expected