def validate_address_set(self, conf_obj, set_name): if set_name not in conf_obj: conf_obj[set_name] = set() return if isinstance(conf_obj[set_name], str) and conf_obj[set_name].lower() == 'none': conf_obj[set_name] = set() return # empty sets are evaluated as dict if not conf_obj[set_name] and (isinstance(conf_obj[set_name], dict) or isinstance(conf_obj[set_name], list)): conf_obj[set_name] = set() return # {KT*****,KT****} are loaded as {KT*****:None,KT****:None} # convert to set if isinstance(conf_obj[set_name], dict) and set( conf_obj[set_name].values()) == {None}: conf_obj[set_name] = set(conf_obj[set_name].keys()) validator = AddressValidator(set_name) for addr in conf_obj[set_name]: validator.validate(addr)
def __validate_share_map(self, conf_obj, map_name): """ all shares in the map must sum up to 1 :param conf_obj: configuration object :param map_name: name of the map to validate :return: None """ if map_name not in conf_obj: conf_obj[map_name] = dict() return if isinstance(conf_obj[map_name], str) and conf_obj[map_name].lower() == 'none': conf_obj[map_name] = dict() return if not conf_obj[map_name]: return share_map = conf_obj[map_name] validator = AddressValidator(map_name) for key, value in share_map.items(): validator.validate(key) if len(share_map) > 0: try: if abs(1 - sum(share_map.values()) > 1e-4): # a zero check actually raise ConfigurationException("Map '{}' shares does not sum up to 1!".format(map_name)) except TypeError: raise ConfigurationException("Map '{}' values must be number!".format(map_name))
def __validate_specials_map(self, conf_obj): if SPECIALS_MAP not in conf_obj: conf_obj[SPECIALS_MAP] = dict() return if isinstance(conf_obj[SPECIALS_MAP], str) and conf_obj[SPECIALS_MAP].lower() == 'none': conf_obj[SPECIALS_MAP] = dict() return if not conf_obj[SPECIALS_MAP]: return addr_validator = AddressValidator(SPECIALS_MAP) for key, value in conf_obj[SPECIALS_MAP].items(): addr_validator.validate(key) FeeValidator("specials_map:" + key).validate(value)
def __validate_address_set(self, conf_obj, set_name): if set_name not in conf_obj: conf_obj[set_name] = set() return if isinstance(conf_obj[set_name], str) and conf_obj[set_name].lower() == 'none': conf_obj[set_name] = set() return # empty sets are evaluated as dict if not conf_obj[set_name] and (isinstance(conf_obj[set_name], dict) or isinstance(conf_obj[set_name], list)): conf_obj[set_name] = set() return validator = AddressValidator(set_name) for addr in conf_obj[set_name]: validator.validate(addr)
def validate_dest_map(self, conf_obj): if RULES_MAP not in conf_obj: conf_obj[RULES_MAP] = dict() return if isinstance(conf_obj[RULES_MAP], str) and conf_obj[SPECIALS_MAP].lower() == 'none': conf_obj[RULES_MAP] = dict() return if not conf_obj[RULES_MAP]: return addr_validator = AddressValidator(RULES_MAP) for key, value in conf_obj[RULES_MAP].items(): # validate key (and address or MINDELEGATION) if key != MIN_DELEGATION_KEY: addr_validator.validate(key) # validate destination value (An address OR TOF OR TOB OR TOE) if value not in [TOF, TOB, TOE]: addr_validator.validate(key)