class_docstr: Class that manages configuration files for a DVC repo.
  
  Args:
      dvc_dir (str): optional path to `.dvc` directory, that is used to
          access repo-specific configs like .dvc/config and
          .dvc/config.local.
      validate (bool): optional flag to tell dvc if it should validate the
          config or just load it as is. 'True' by default.
  
  Raises:
      ConfigError: thrown if config has an invalid format.
code: def edit(self, level=None, validate=True):
      # NOTE: we write to repo config by default, same as git config
      level = level or "repo"
      if self.dvc_dir is None and level in self.REPO_LEVELS:
          raise ConfigError("Not inside a DVC repo")
  
      conf = self.load_one(level)
      yield conf
  
      conf = self._save_paths(conf, self.files[level])
  
      merged_conf = self.load_config_to_level(level)
      merge(merged_conf, conf)
  
      if validate:
          self.validate(merged_conf)
  
      self._save_config(level, conf)
      self.load(validate=validate)
  
imports: import os
  import re
  from contextlib import contextmanager
  from functools import partial
  from typing import TYPE_CHECKING, Dict, Optional
  from funcy import compact, memoize, re_find
  from dvc.exceptions import DvcException, NotDvcRepoError
  from dvc.log import logger
  from .utils.objects import cached_property
label_desc: Use image node_id 20 for calling the Config obj's underlying member method code with example usage: obj.edit(level, validate) without return types