o
    Rhn,                     @  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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)
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Zdd
dZdddZdS )
MutableURLreturnNonec                 C  s4   d | _ d| _d | _d | _d | _d | _d | _d | _d S )NF)protocolslashesauthporthostnamehashsearchpathname)self r,   N/home/air/sanwanet/backup_V2/venv/lib/python3.10/site-packages/mdurl/_parse.py__init__j   s   
zMutableURL.__init__urlstrslashes_denote_hostbool'MutableURL'c                 C  s&  d}d}|}|  }|s/t|ddkr/t|}|r/|d| _|dr-|d| _| S d}t|}|rK| }|	 }|| _
|t|d  }|sU|sUtd|rk|d}|rk|rbt| sk|dd  }d| _t| s|sz|rt| sd	}	tttD ]}
|t|
 }|d	kr|	d	ks||	k r|}	q|	d	kr|d
}n	|d
d|	d }|d	kr|d | }||d d  }|| _d	}	tttD ]}
|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o| jd}|s| jd}t|}d}
|
|k r||
 }|s@|
d7 }
q.t|sd}t|}d}||k rpt|| dkra|d7 }n||| 7 }|d7 }||k sSt|s|d |
 }||
d d  }t|}|r||d |d|d |rd|| }d|| _n	|
d7 }
|
|k s3t| jtkrd| _|r| jdd	 | _|d}|d	kr||d  | _ |d | }|d}|d	kr||d  | _|d | }|r|| _t| r| jr| jsd| _| 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+   r/   r1   lower_protor$   restsimple_pathprotoproto_matchhost_endihecat_signr%   hostipv6_hostname	hostpartslpartnewpartkjvalid_partsnot_hostbitr(   qmr,   r,   r-   parset   s   











!



zMutableURL.parserb   c                 C  sP   t |}|r| }|dkr|dd  | _|d t|  }|r&|| _d S d S )Nr9   r5   )PORT_PATTERNr)   rD   r&   r@   r'   )r+   rb   
port_matchr&   r,   r,   r-   rP     s   

zMutableURL.parse_hostN)r!   r"   )r/   r0   r1   r2   r!   r3   )rb   r0   r!   r"   )__name__
__module____qualname__r.   rn   rP   r,   r,   r,   r-   r    i   s
    


 +r    F)r1   r/   	URL | strr1   r2   r!   r   c             	   C  sF   t | tr| S t }|| | t|j|j|j|j|j|j	|j
|jS )N)
isinstancer   r    rn   r#   r$   r%   r&   r'   r(   r)   r*   )r/   r1   ur,   r,   r-   	url_parse)  s   
 rw   )r/   rt   r1   r2   r!   r   )
__future__r   collectionsr   rG   
mdurl._urlr   compile
IGNORECASErE   ro   rB   DELIMSUNWISEAUTO_ESCAPErO   rL   rX   rR   rT   r2   rI   rJ   r    rw   r,   r,   r,   r-   <module>   sL   )



 A