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
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'
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'
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)
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
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
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')
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)
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