def get(self, path, default=None, check_type=None, module_name=None):
    """
    Get option property

    :param path: full path to the property with name
    :param default: default value if original is not present
    :param check_type: cast param to passed type, if fail, default will returned
    :param module_name: get property from module name
    :return:
    """
    if self._json is not None:
      # process whole json or just concrete module
      node = self._json if module_name is None else self.get_module_config(module_name)
      path_data = path.split('.')
      try:
        while len(path_data) > 0:
          node = node[path_data.pop(0)]

        if check_type is not None:
          return check_type(node)
        else:
          return node
      except KeyError:
        if default is not None:
          return default
        else:
          raise KeyError("Key {} not present".format(path))
      except ValueError:
        if default is not None:
          return default
        else:
          raise KeyError("Key {} has a wrong format".format(path))
    else:
      return ""
Get option property

    :param path: full path to the property with name
    :param default: default value if original is not present
    :param check_type: cast param to passed type, if fail, default will returned
    :param module_name: get property from module name
    :return: