docstr: Return tree config representation of value found at key
  
  :param key: key to use (dot separated). E.g., a.b.c
  :type key: basestring
  :param default: default value if key not found
  :type default: config
  :return: config value
  :type return: ConfigTree
docstr_tok: ["Return","tree","config","representation","of","value","found","at","key",":","param","key",":","key","to","use","(","dot","separated",")",".","E.g.",",","a.b.c",":","type","key",":","basestring",":","param","default",":","default","value","if","key","not","found",":","type","default",":","config",":","return",":","config","value",":","type","return",":","ConfigTree"]
code: def get_config(self, key, default=UndefinedKey):
      """Return tree config representation of value found at key
  
      :param key: key to use (dot separated). E.g., a.b.c
      :type key: basestring
      :param default: default value if key not found
      :type default: config
      :return: config value
      :type return: ConfigTree
      """
      value = self.get(key, default)
      if isinstance(value, dict):
          return value
      elif value is None:
          return None
      else:
          raise ConfigException(
              "{key} has type '{type}' rather than 'config'".format(
                  key=key, type=type(value).__name__
              )
          )
  
imports: from collections import OrderedDict
  from pyparsing import lineno
  from pyparsing import col
  import re
  import copy
  from .exceptions import ConfigException, ConfigWrongTypeException, ConfigMissingException
label_desc: Use image node_id 15 for calling the ConfigTree obj's underlying member method code with example usage: obj.get_config(key, default) and returns: value, None