code: def _parse_config_property(
      item: _T,
      variables: Dict[str, Union[str, Path, float, bool, int, None]],
      variables_exact: Dict[
          str, Union[str, Path, float, bool, int, None]
      ],
  ) -> _T:
      """Recursively apply config's variables values to its property"""
      if isinstance(item, str):
          if item in variables_exact:
              return variables_exact[item]
          return item.format(**variables)
      elif isinstance(item, list):
          return [
              _parse_config_property(item, variables, variables_exact)
              for item in item
          ]
      elif isinstance(item, dict):
          return {
              k: _parse_config_property(v, variables, variables_exact)
              for k, v in item.items()
          }
      else:
          return item
  
file_path: DeepPavlov/deeppavlov/core/commands/utils.py
imports: import os
  from copy import deepcopy
  from pathlib import Path
  from typing import Any, Union, Dict, TypeVar, Optional
  from deeppavlov.core.common.file import read_json, find_config
  from deeppavlov.core.common.registry import inverted_registry
  from deeppavlov.core.data.utils import get_all_elems_from_json
label_desc: Use image node_id 1 for calling a global function with example usage: _parse_config_property(item, variables, variables_exact) and returns: item, variables_exact, unknown, unknown, item