def test_type_validation_builder(): builder = ConfigBuilder() builder.validate_field_type("key1", int) builder.validate_field_type("key1.key2", list) type_validation_dict = builder._ConfigBuilder__validation_types assert type_validation_dict["key1"] == int assert type_validation_dict["key1.key2"] == list
def test_optional_validation(path): builder = ConfigBuilder() builder.set_field_access_optional() builder.validate_field_type("cache.name", str) builder.validate_field_value("cache.host", "localhost") builder.transform_field_value("cache.host", lambda name: f"https://{name}") builder.parse_config(path)
def test_type_validation(path): builder = ConfigBuilder() builder.validate_field_type("server.debug_mode", bool) builder.validate_field_type("server.port", int) builder.parse_config(path) builder.validate_field_type("server.host", int) with pytest.raises(AssertionError): builder.parse_config(path)
def loadConfigFromFile(path) -> 'Config': def makeElement(x: int, y: int, c: typing.TypeVar(T), grid_size: int): return c(Point(x, y), grid_size) builder = ConfigBuilder() config = builder.parse_config(path) builder.set_field_access_required() builder.add_required_field(GRID_CONFIG) builder.add_required_field(MAX_ITER) builder.add_required_field(DEFAULT_CONFIG) builder.add_required_field(DISINTEGRATE_PROB_CONFIG) builder.validate_field_type(GRID_CONFIG, int) builder.validate_field_type(MAX_ITER, int) builder.validate_field_type(DEFAULT_CONFIG, str) builder.validate_field_type(HOLES_CONFIG, [(int, int)]) builder.validate_field_type(SUBSTRATES_CONFIG, [(int, int)]) builder.validate_field_type(CATALYSTS_CONFIG, [(int, int)]) builder.validate_field_type(LINKS_CONFIG, [(int, int)]) builder.validate_field_type(DISINTEGRATE_PROB_CONFIG, float) # set up grid_size = config.grid_size default_element: T = STR_TO_CLASS[config.default] iter = config.max_iter disint_prob = config.disintegration_probability h_plist = [ makeElement(x, y, Hole, grid_size) for x, y in list(ast.literal_eval(config.Holes)) ] if config.Holes else [] s_plist = [ makeElement(x, y, Substrate, grid_size) for x, y in list(ast.literal_eval(config.Substrates)) ] if config.Substrates else [] k_plist = [ makeElement(x, y, Catalyst, grid_size) for x, y in list(ast.literal_eval(config.Catalysts)) ] if config.Catalysts else [] l_plist = [ makeElement(x, y, Link, grid_size) for x, y in list(ast.literal_eval(config.Links)) ] if config.Links else [] return Config(grid_size, default_element, iter, h_plist, s_plist, k_plist, l_plist, disint_prob)
# coding: utf8 import errno import sys from python_json_config import ConfigBuilder from app.helpers import singleton builder = ConfigBuilder() # ----- logging ----- # builder.validate_field_type("logging.version", int) builder.validate_field_type("logging.disable_existing_loggers", bool) # ----- database ----- # builder.validate_field_type("database.version", int) builder.validate_field_type("database.connect.engine", str) builder.validate_field_type("database.connect.port", int) builder.validate_field_type("database.connect.host", str) builder.validate_field_type("database.connect.login", str) builder.validate_field_type("database.connect.password", str) builder.validate_field_type("database.connect.name", str) builder.validate_field_type("database.pool.min", int) builder.validate_field_type("database.pool.max", int) # ----- bot ----- # builder.validate_field_type("bot.version", int) builder.validate_field_type("bot.skip_update", bool) builder.validate_field_type("bot.token", str) builder.validate_field_type("bot.polling", bool) builder.validate_field_type("bot.webhook.host", str)