docs: 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 ""