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)
示例#4
0
    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)
示例#5
0
# 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)