U
    bhE                     @  s   d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	m
Z
mZmZmZ zddlZdZW n ek
rt   d	ZY nX d
dlmZ eeddZeeZG dd deZdd Zdd ZeZdddZdddZdddZdd ZdS ) zURL Utilities.    )annotations)Mapping)partial)
NamedTuple)	parse_qslquoteunquoteurlparseNTF   )
get_logger )safec                   @  sJ   e Zd ZU dZded< ded< ded< ded< ded< ded	< d
ed< dS )urlpartsz*Named tuple representing parts of the URL.strschemehostnameintportusernamepasswordpathr   queryN)__name__
__module____qualname____doc____annotations__ r   r   3/tmp/pip-unpacked-wheel-earovzxb/kombu/utils/url.pyr      s   
r   c           
   	   C  s   t | \}}}}}}}|rdd | D }|D ]v}	|	dkrR||	  dk||	< n.|	dkrt||	 ||	< ||	 dkrtd d|kri |d< ||	 |d |	< ||	= q0tf ||||||d	|S )
z%Parse URL into mapping of components.c                 S  s   g | ]}| d r|qS )ssl_)
startswith).0keyr   r   r   
<listcomp>(   s     
 zparse_url.<locals>.<listcomp>Zssl_check_hostnamefalseZssl_cert_reqsNz%Defaulting to insecure SSL behaviour.ssl)	transportr   r   Zuseridr   Zvirtual_host)
_parse_urlkeyslowerparse_ssl_cert_reqsloggerwarningdict)
urlr   hostr   userr   r   r   r(   r"   r   r   r   	parse_url#   s,    
  r1   c              
   C  s   t | j}| t|d d }t d| }|jp2d}|rP|d dkrP|dd n|}t|t|jpbdphd|jt|jpvdp|dt|j	pdpdt|pdpdt
t|jS )z5Parse URL into :class:`urlparts` tuple of components.   Nzhttp://r   r   /   )r	   r   lenr   r   r   r   r   r   r   r-   r   r   )r.   r   Z
schemelesspartsr   r   r   r   url_to_parts<   s    

 r7   **c	           
      C  s   |  dg}	|s|rd|r&|	 t| |rZ|rH|	|r>d|gndg n|	dt|g |	 d |	 |rtt|nd |r|	d|g |	d|g ddd |	D S )z"Generate URL from component parts.://:@r   r3   c                 s  s   | ]}|rt |V  qd S )N)r   )r!   partr   r   r   	<genexpr>e   s      zas_url.<locals>.<genexpr>)append	safequoteextendjoin)
r   r/   r   r0   r   r   r   sanitizemaskr6   r   r   r   as_urlS   s    
rD   c                 C  s   t t| d|dS )z)Return copy of URL with password removed.T)rB   rC   )rD   r'   r.   rC   r   r   r   sanitize_urlh   s    rF   c                 C  s    t | trd| krt| |S | S )z-Sanitize url, or do nothing if url undefined.r9   )
isinstancer   rF   rE   r   r   r   maybe_sanitize_urln   s    
rH   c                 C  s2   t r*tjtjtjtjtjtjd}||  S dS dS )zMGiven the query parameter for ssl_cert_reqs, return the SSL constant or None.)CERT_REQUIREDCERT_OPTIONAL	CERT_NONErequiredoptionalnoneN)ssl_availabler%   rI   rJ   rK   )Zquery_valueZquery_value_to_constantr   r   r   r*   v   s    r*   )NNNNNNFr8   )r8   )r8   )r   
__future__r   collections.abcr   	functoolsr   typingr   urllib.parser   r   r   r	   r%   rO   ImportErrorlogr   r?   r   r+   r   r1   r7   r'   rD   rF   rH   r*   r   r   r   r   <module>   s4   
        


