B
    lz]#                 @   s  d dl mZmZmZmZ d dlmZ d dlmZ d dl	Z	d dl
mZ d dlZee	jdkZee	jdkZe	jd  dkZe	jd  d	kZe	 Zd
ZdZdd Zdd Zdd ZerefZefZe fZ!eZ"e#Z$e%Z%e&Z&n8erd dl'm(Z( e)fZee*fZe e(fZ!e+Z"eZ$e,Z%e-Z&erbd dl.m/Z/m0Z0 d dl1m2Z2 d dlm3Z3 e	jd dkr\d dl4m5Z5 e5Z5ne6Z5n6erd dl7m/Z/m0Z0 d dl1m2Z2 d dlm8Z9m:Z3 e6Z5e/Z/e0Z0e2Z2e9Z9e3Z3erdd Z;dd Z<dd Z=ed Z>ed!Z?ed"Z@d d#l.mAZA d$d% ZBn>er6d&d Z;d'd Z<d(d Z=ed)Z>ed*Z?ed+Z@d,d% ZBd d-l7mCZD eDZDd d.l1mEZF dFd1d2ZEeGd3fd4d5ZHd6d7 ZIe dZJeKeeeeLeMeeJfZNd8d9 ZOd:d; ZPd<d= ZQd>d? ZRd@dA ZSdBdC ZTdDdE ZUdS )G    )absolute_importdivisionprint_functionunicode_literals)chain)methodcallerN)mkdtempZwin32darwin      TFc             C   sZ   t | tr| S tjd dkr"t}nt}t | t|frRyt| ddS    | dS t| S )Nr   r
   zutf-8)encoding)
isinstancestrsysversion_infounicodebytesencode)valueZ_unicode r   2lib/python3.7/site-packages/conda/common/compat.pyencode_for_env_var   s    

r   c             C   s   t rdd t| D } | S )Nc             S   s   i | ]\}}t |t |qS r   )r   ).0kvr   r   r   
<dictcomp>.   s    z&encode_environment.<locals>.<dictcomp>)ENCODE_ENVIRONMENT	iteritems)envr   r   r   encode_environment,   s    r   c             C   s   t rdd | D } | S )Nc             S   s   h | ]}t |qS r   )r   )r   argr   r   r   	<setcomp>4   s    z#encode_arguments.<locals>.<setcomp>)ENCODE_ARGS)Z	argumentsr   r   r   encode_arguments2   s    r#   )	ClassType)MappingSequence)StringIO)zip_longest      )JSONDecodeError)izipizip_longestc             K   s   t | jf |S )N)iterkeys)dkwr   r   r   iterkeys{   s    r2   c             K   s   t | jf |S )N)r.   values)r0   r1   r   r   r   
itervalues~   s    r4   c             K   s   t | jf |S )N)r.   items)r0   r1   r   r   r   r      s    r   r/   r3   r5   )Iterablec             C   s   t | t ot | tS )N)r   string_typesr6   )objr   r   r   
isiterable   s    r9   c             K   s   | j f |S )N)r2   )r0   r1   r   r   r   r2      s    c             K   s   | j f |S )N)r4   )r0   r1   r   r   r   r4      s    c             K   s   | j f |S )N)r   )r0   r1   r   r   r   r      s    viewkeys
viewvalues	viewitemsc             C   s"   t | do t| t o t| tk	S )N__iter__)hasattrr   r7   type)r8   r   r   r   r9      s    
)OrderedDict)openrc          	   C   sB   d|kr t | t|||||dS t | t|||p2d|||dS d S )Nb)	bufferingerrorsnewlineclosefdzutf-8)rE   r   rF   rG   rH   )io_openr   )filemoderE   r   rF   rG   rH   r   r   r   rA      s    
rA   )__dict____weakref__c                s    fdd}|S )zClass decorator to set metaclass.

    Works with both Python 2 and Python 3 and it does not add
    an extra class in the lookup order like ``six.with_metaclass`` does
    (that is -- it copies the original class instead of using inheritance).

    c                s.   t fddtt| D } | j| j|S )Nc             3   s"   | ]\}}| kr||fV  qd S )Nr   )r   keyr   )
skip_attrsr   r   	<genexpr>   s    z@with_metaclass.<locals>._clone_with_metaclass.<locals>.<genexpr>)dictr   vars__name__	__bases__)ZClassZattrs)TyperO   r   r   _clone_with_metaclass   s    z-with_metaclass.<locals>._clone_with_metaclassr   )rU   rO   rV   r   )rU   rO   r   with_metaclass   s    	rW   c                s*   G  fdddt }t |tddi S )z%Create a base class with a metaclass.c                   s,   e Zd Z fddZe fddZdS )z%six_with_metaclass.<locals>.metaclassc                s   | |S )Nr   )clsname
this_basesr0   )basesmetar   r   __new__   s    z-six_with_metaclass.<locals>.metaclass.__new__c                s    | S )N)__prepare__)rX   rY   rZ   )r[   r\   r   r   r^      s    z1six_with_metaclass.<locals>.metaclass.__prepare__N)rS   
__module____qualname__r]   classmethodr^   r   )r[   r\   r   r   	metaclass   s   rb   Ztemporary_classr   )r?   r]   r   )r\   r[   rb   r   )r[   r\   r   six_with_metaclass   s    rc   c             C   sh   t rt| tr| jr| S ddlm} ddlm} | }y||}W n tk
r^   |d}Y nX || S )Nr   )	getwriter)getpreferredencodingzUTF-8)	PY2r   rJ   r   codecsrd   Zlocalere   LookupError)streamrd   re   r   Zwriter_classr   r   r   _init_stream_encoding   s    rj   c               C   s   t tjt_t tjt_d S )N)rj   r   stdoutstderrr   r   r   r   init_std_stream_encoding   s    rm   c             C   s$   y
|  dS  tk
r   | S X d S )Nzutf-8)r   AttributeError)r   r   r   r   ensure_binary   s    
ro   c             C   s   y
|  dS  tk
r   | S  tk
r   yddlm} W nF tk
r   yddlm} W n  tk
r|   ddlm} Y nX Y nX || dpd}| j |ddS  t	k
r   | S X d S )Nzutf-8r   )detectr   replace)rF   )
decodern   UnicodeDecodeErrorZchardetrp   ImportErrorZrequests.packages.chardetZ%pip._vendor.requests.packages.chardetgetUnicodeEncodeError)r   rp   r   r   r   r   ensure_text_type   s     
rw   c             C   s$   y
|  dS  tk
r   | S X d S )NZunicode_escape)rr   rn   )r   r   r   r   ensure_unicode  s    
rx   c             C   s6   y
|  tS  tk
r   | S  tk
r0   | S X d S )N)r   FILESYSTEM_ENCODINGrn   rv   )r   r   r   r   ensure_fs_path_encoding  s    
rz   c             C   s6   y
|  dS  tk
r   | S  tk
r0   | S X d S )Nzutf-8)r   rn   rv   )r   r   r   r   ensure_utf8_encoding#  s    
r{   )rB   rC   NNNT)VZ
__future__r   r   r   r   	itertoolsr   operatorr   r   Ztempfiler   warnings	_warningsboolplatformZon_winZon_macr   rf   ZPY3getfilesystemencodingry   r   r"   r   r   r#   r   r7   intZinteger_typesr?   Zclass_typesZ	text_typer   Zbinary_typeinputrangetypesr$   Z
basestringZlongr   Z	raw_inputZxrangeZcollections.abcr%   r&   ior'   r(   Zjsonr+   
ValueErrorcollectionsr,   zipr-   r2   r4   r   r:   r;   r<   r6   r9   r@   ZodictrA   rI   setrW   rc   ZNoneTypetuplefloatcomplexZprimitive_typesrj   rm   ro   rw   rx   rz   r{   r   r   r   r   <module>	   s   




			