def METHOD_NAME(self, v, default=None):
    log.debug("read_value (enter): " + v)
    try:
        it = self.data
        for x in v.split('.'):
            if type(it) is str:
                fname = self.file_location + "/" + it[1:]
                if it.startswith("@") and os.path.isfile(fname) and fname.endswith(".json"):
                    log.debug(f"loading include {fname}")
                    with open(fname) as f:
                        it = json.load(f)
                else:
                    log.error("invalid path in config file ({v})")
            it = it[x]
        if type(it) is str:
            res = self.process_value(it)
        else:
            res = it
    except KeyError:
        log.debug(f"using default value ({default})")
        res = default
    log.debug("read_value (exit): "+v+"="+str(res))
    return res