U
    ^gn,                     @  s   d dl mZ d dlmZ d dlZd dlmZ ejdejdZ	edZ
edZd	Zd
e Zde Zde ZdZdZedZedZeedddZeeddddddddddd
ZG dd dZddddddddZdS )    )annotations)defaultdictN)URLz^([a-z0-9.+-]+:))flagsz:[0-9]*$z^(//?(?!/)[^?\s]*)(\?[^\s]*)?$)<>"` 
	){}|\^r	   )')%/?;#)r   r   r      z^[+a-z0-9A-Z_-]{0,63}$z^([+a-z0-9A-Z_-]{0,63})(.*)$T)Z
javascriptzjavascript:)
httphttpsftpgopherfilezhttp:zhttps:zftp:zgopher:zfile:c                   @  s<   e Zd ZddddZddddd	d
ZdddddZdS )
MutableURLNone)returnc                 C  s4   d | _ d| _d | _d | _d | _d | _d | _d | _d S )NF)protocolslashesauthporthostnamehashsearchpathname)self r+   0/tmp/pip-unpacked-wheel-avu6tzza/mdurl/_parse.py__init__j   s    zMutableURL.__init__strboolz'MutableURL'urlslashes_denote_hostr!   c                 C  s6  d}d}|}|  }|s^t|ddkr^t|}|r^|d| _|drZ|d| _| S d}t|}|r| }|	 }|| _
|t|d  }|s|std|r|d}|r|rt| s|dd  }d| _t| s|s|rt| sd	}	tttD ]6}
|t|
 }|d	kr|	d	ks4||	k r|}	q|	d	krR|d
}n|d
d|	d }|d	kr|d | }||d d  }|| _d	}	tttD ]6}
|t|
 }|d	kr|	d	ks||	k r|}	q|	d	krt|}	|	dkr||	d  dkr|	d8 }	|d |	 }||	d  }| | | jp:d| _| jdoV| jd}|s~| jd}t|}d}
|
|k r~||
 }|s|
d7 }
qvt|srd}t|}d}||k rt|| dkr|d7 }n||| 7 }|d7 }qt|sr|d |
 }||
d d  }t|}|rN||d |d|d |rbd|| }d|| _q~|
d7 }
qvt| jtkrd| _|r| jdd	 | _|d}|d	kr||d  | _ |d | }|d}|d	kr||d  | _|d | }|r|| _t| r2| jr2| js2d| _| S )N Fr         z^//[^@/]+@[^@/]+z//T@r   :[].   xr   )!striplensplitSIMPLE_PATH_PATTERNmatchgroupr)   r(   PROTOCOL_PATTERNlowerr"   re
startswithHOSTLESS_PROTOCOLr#   SLASHED_PROTOCOLrangeHOST_ENDING_CHARSfindrfindr$   NON_HOST_CHARS
parse_hostr&   endswithHOSTNAME_PART_PATTERNordHOSTNAME_PART_STARTappendinsertjoinHOSTNAME_MAX_LENr'   )r*   r1   r2   Zlower_protor#   restZsimple_pathprotoZproto_matchZhost_endiZhecZat_signr$   hostZipv6_hostnameZ	hostpartslpartZnewpartkjZvalid_partsZnot_hostbitr'   Zqmr+   r+   r,   parset   s    
















zMutableURL.parse)r[   r!   c                 C  sL   t |}|r>| }|dkr,|dd  | _|d t|  }|rH|| _d S )Nr8   r4   )PORT_PATTERNr(   rC   r%   r?   r&   )r*   r[   Z
port_matchr%   r+   r+   r,   rO     s    
zMutableURL.parse_hostN)__name__
__module____qualname__r-   ra   rO   r+   r+   r+   r,   r   i   s   
 +r   F)r2   z	URL | strr/   r   r0   c             	   C  sF   t | tr| S t }|| | t|j|j|j|j|j|j	|j
|jS )N)
isinstancer   r   ra   r"   r#   r$   r%   r&   r'   r(   r)   )r1   r2   ur+   r+   r,   	url_parse)  s    
       rh   )
__future__r   collectionsr   rF   Z
mdurl._urlr   compile
IGNORECASErD   rb   rA   ZDELIMSZUNWISEZAUTO_ESCAPErN   rK   rW   rQ   rS   r/   rH   rI   r   rh   r+   r+   r+   r,   <module>*   sJ   



 A