docs: def dict_crawl(entry, key):
      ''' returns a triple tuple representing the location of the key/key-list.
      returns: (parent_dictionary, final_key, value_found)
      If unable to locate the key, then (None, None, None) is returned.
      '''
      value = None
      key_list = make_list(key)
      try:
          result = None
          success_flag = True
          temp = entry
          for next_key in key_list:
              parent = temp
              actual_type = detect_type(temp)
              if actual_type=="mongoengine":
                  if next_key in temp.__dict__['_data']:
                      temp = temp.__dict__['_data'][next_key]
                  else:
                      break
              elif actual_type=="class":
                  if next_key in temp.__dict__:
                      temp = temp.__dict__[next_key]
                  else:
                      break
              elif actual_type=="dict":
                  if next_key in temp:
                      temp = temp[next_key]
                  else:
                      break
              elif actual_type=="iterable_dict":
                  if next_key in convert_to_dict(temp): # 'contains' method might not be there
                      temp = temp[next_key]
                  else:
                      break
              elif actual_type=="list":
                  if next_key in temp:
                      temp = temp[next_key]
                  else:
                      break
              else:  ## I'm unsure we can really 'crawl' an 'object'
                  break
          else:
              return (parent, key_list[-1], temp)
          return (None, None, None)
      except:
          pass
      return (None, None, None)