
                         j    d Z ddlmZ ddlmZ ddlmZ ddlZddlZddZddZddZ	dd	Z
dd
Zd Zy)zCA module for dealing with unknown string and environment encodings.    )absolute_import)division)unicode_literalsNc                     | yt         j                  s| S t        | t         j                        r| S |xs
 t	               }| j                  |      S )zEncode the text string to a byte string.

  Args:
    string: str, The text string to encode.
    encoding: The suggested encoding if known.

  Returns:
    str, The binary string.
  N)sixPY2
isinstancebinary_type_GetEncodingencode)stringencodings     (lib/googlecloudsdk/core/util/encoding.pyEncoder      sH     ^	 M(M'(	x	      c                    | yt        | t        j                        st        | t        j                        r| }n	 t        j                  |       }t        |t        j                        r|S 	 |j                  d      S # t        t
        f$ r t        |       }Y Jw xY w# t
        $ r Y nw xY w|r!	 |j                  |      S # t
        $ r Y nw xY w	 |j                  d      S # t
        $ r Y nw xY w	 |j                  t        j                               S # t
        $ r Y nw xY w	 |j                  t        j                               S # t
        $ r Y nw xY w|j                  d      S )a  Returns string with non-ascii characters decoded to UNICODE.

  UTF-8, the suggested encoding, and the usual suspects will be attempted in
  order.

  Args:
    data: A string or object that has str() and unicode() methods that may
      contain an encoding incompatible with the standard output encoding.
    encoding: The suggested encoding if known.

  Returns:
    A text string representing the decoded byte string.
  Nasciizutf-8z
iso-8859-1)r	   r   	text_typer
   	TypeErrorUnicodeErrorstrdecodesysgetfilesystemencodinggetdefaultencoding)datar   r   s      r   Decoder   4   s^    
\
 cmm$
4(IF}}T"f &M	==!! |$  4yf 
 		
 ]]8$$ 
	==!!	 		
	==22455	 		
	==//122	 		& 
|	$$sk   A? .B ?BB	B+*B+1C 	CCC# #	C/.C/3"D 	D"!D"&"E	 		EEc                 X    t        |      }| j                  |      }||S t        |      S )zReturns the decoded value of the env var name.

  Args:
    env: {str: str}, The env dict.
    name: str, The env var name.
    default: The value to return if name is not in env.

  Returns:
    The decoded value of the env var name.
  )r   getr   )envnamedefaultvalues       r   GetEncodedValuer$      s0     
$
''$-%
]N 
r   c                 h    t        ||      }|| j                  |d       yt        ||      | |<   y)a!  Sets the value of name in env to an encoded value.

  Args:
    env: {str: str}, The env dict.
    name: str, The env var name.
    value: str or unicode, The value for name. If None then name is removed from
      env.
    encoding: str, The encoding to use or None to try to infer it.
  r   N)r   pop)r    r!   r#   r   s       r   SetEncodedValuer(      s6    & 
x	($
]GGD$
UX.#d)r   c                 ~    |xs
 t               }i }t        j                  |       D ]  \  }}t        ||||        |S )a%  Encodes all the key value pairs in env in preparation for subprocess.

  Args:
    env: {str: str}, The environment you are going to pass to subprocess.
    encoding: str, The encoding to use or None to use the default.

  Returns:
    {bytes: bytes}, The environment to pass to subprocess.
  r&   )r   r   	iteritemsr(   )r    r   encoded_envkvs        r   	EncodeEnvr.      s@     '(+mmC daKA9 !	r   c                  V    t        j                         xs t        j                         S )z!Gets the default encoding to use.)r   r   r    r   r   r   r      s    		"	"	$	@(>(>(@@r   )N)__doc__
__future__r   r   r   r   r   r   r   r$   r(   r.   r   r0   r   r   <module>r3      s;   " J &  ' 
 
!0X%v(/4$Ar   