code: def decode_embedded_strs(src):
      '''
      Convert enbedded bytes to strings if possible.
      This is necessary because Python 3 makes a distinction
      between these types.
  
      This wouldn't be needed if we used "use_bin_type=True" when encoding
      and "encoding='utf-8'" when decoding. Unfortunately, this would break
      backwards compatibility due to a change in wire protocol, so this less
      than ideal solution is used instead.
      '''
      if not six.PY3:
          return src
  
      if isinstance(src, dict):
          return _decode_embedded_dict(src)
      elif isinstance(src, list):
          return _decode_embedded_list(src)
      elif isinstance(src, bytes):
          try:
              return src.decode()  # pylint: disable=redefined-variable-type
          except UnicodeError:
              return src
      else:
          return srf decode_embedded_strs(src):
      '''
      Convert enbedded bytes to strings if possible.
      This is necessary because Python 3 makes a distinction
      between these types.
  
      This wouldn't be needed if we used "use_bin_type=True" when encoding
      and "encoding='utf-8'" when decoding. Unfortunately, this would break
      backwards compatibility due to a change in wire protocol, so this less
      than ideal solution is used instead.
      '''
      if not six.PY3:
          return src
  
      if isinstance(src, dict):
          return _decode_embedded_dict(src)
      elif isinstance(src, list):
          return _decode_embedded_list(src)
      elif isinstance(src, bytes):
          try:
              return src.decode()  # pylint: disable=redefined-variable-type
          except UnicodeError:
              return src
      else:
          return src
docs: Convert enbedded bytes to strings if possible.
      This is necessary because Python 3 makes a distinction
      between these types.
  
      This wouldn't be needed if we used "use_bin_type=True" when encoding
      and "encoding='utf-8'" when decoding. Unfortunately, this would break
      backwards compatibility due to a change in wire protocol, so this less
      than ideal solution is used instead.