o
    WÉÆh  ã                   @   sf  d Z ddlZddlZddlmZ ddlmZ ddlmZm	Z	 ddl
mZmZ dZg d	¢Zee	ƒZeeeeeef Zd
edefdd„Zdeddfdd„Zededeeedf eedf eedf eedf f fdd„ƒZdeded
edededefdd„Ze	d#deedf deedf deedf deedf dedefdd„ƒZd edeeeef  fd!d"„ZdS )$zURL parsing utilities.é    N)Ú	lru_cache)ÚUnion)Úscheme_charsÚuses_netlocé   )ÚQUOTERÚUNQUOTER_PLUSz! 	
 )ú	úÚ
ÚurlÚreturnc                 C   sê  |   t¡} tD ]}|| v r|  |d¡} qd } } }}|  d¡}|dkrK| d tv rK| d|… D ]}|tvr9 nq1| d|…  ¡ | |d d… }} d| v }d| v }	| dd… d	krÐt| ƒ}
|rf|	rfd
}n|	rkd}n|rpd}nd}|D ]}|  |d¡}|dkr†||
k r†|}
qt| d|
… }| |
d… } d|v }d|v }|rŸ|r£|r§|s§tdƒ‚|rÐ| 	d¡d  	d¡d }|rÈ|d dkrÈt
 d|¡sÇtdƒ‚nd|vrÐtdƒ‚|rÚ|  	d¡\} }}|	rä|  	d¡\} }}|rî| ¡ sît|ƒ ||| ||fS )zSplit URL into parts.Ú ú:r   r   Nú#ú?é   ú//z/?#z/?z/#ú/ú[ú]zInvalid IPv6 URLÚvz\Av[a-fA-F0-9]+\..+\ZzIPvFuture address is invalidz.The IPv6 content between brackets is not valid)ÚlstripÚWHATWG_C0_CONTROL_OR_SPACEÚUNSAFE_URL_BYTES_TO_REMOVEÚreplaceÚfindr   ÚlowerÚlenÚ
ValueErrorÚ	partitionÚreÚmatchÚisasciiÚ_check_netloc)r   ÚbÚschemeÚnetlocÚqueryÚfragmentÚiÚcÚhas_hashÚhas_question_markÚdelimÚdelim_charsÚwdelimÚhas_left_bracketÚhas_right_bracketÚbracketed_hostÚ_© r5   úX/var/www/html/HyperOracle/crypto_trader/venv/lib/python3.10/site-packages/yarl/_parse.pyÚ	split_url   sl   
€
ÿ"€ÿÿÿr7   r'   c                 C   sb   |   dd¡  dd¡  dd¡  dd¡}t d|¡}||krd S dD ]}||v r.td| › d	�ƒ‚q d S )
Nú@r   r   r   r   ÚNFKCz/?#@:znetloc 'z6' contains invalid characters under NFKC normalization)r   ÚunicodedataÚ	normalizer   )r'   ÚnÚnormalized_netlocr+   r5   r5   r6   r$   V   s   $
ÿÿÿr$   c                 C   sü   d| vrd}d}| }n|   d¡\}}}| d¡\}}}|sd}d|v r<| d¡\}}}| d¡\}}}	|	 d¡\}}}	n| d¡\}}}	|	sP|pId||pMddfS zt|	ƒ}
W n tya   tdƒ‚w d|
  krodksttd	ƒ‚ td	ƒ‚|pwd||p{d|
fS )
z4Split netloc into username, password, host and port.r8   Nr   r   r   z/Invalid URL: port can't be converted to integerr   iÿÿ  zPort out of range 0-65535)Ú
rpartitionr    Úintr   )r'   ÚusernameÚpasswordÚhostinfoÚuserinfor4   Úhave_passwordÚ	bracketedÚhostnameÚport_strÚportr5   r5   r6   Úsplit_netlocl   s2   ÿÿrI   r&   r(   r)   c                 C   s¼   |s| r| t v s|dd… dkrA|r.|dd… dkr.| r&| › d|› d|› �n| › d|› �}n| r9| › d|› |› �nd|› |› �}n	| rJ| › d|› �}|rS|› d|› �}|r\|› d	|› �S |S )
z(Unsplit a URL without any normalization.Nr   r   r   r   z://r   r   r   )ÚUSES_AUTHORITY)r&   r'   r   r(   r)   r5   r5   r6   Úunsplit_resultŽ   s    (&rK   FÚuserrA   ÚhostrH   Úencodec                 C   sš   |du rdS |}|dur|› d|› �}| du r|du r|S |dur:| s&d} n|r,t | ƒ} |r2t |ƒ}| › d|› �} n| rB|rBt | ƒ} | rK| › d|› �S |S )z�Make netloc from parts.

    The user and password are encoded if encode is True.

    The host must already be encoded with _encode_host.
    Nr   r   r8   )r   )rL   rA   rM   rH   rN   Úretr5   r5   r6   Úmake_netlocž   s$   rP   Úquery_stringc                 C   sF   g }| s|S |   d¡D ]}| d¡\}}}| t|ƒt|ƒf¡ q|S )zmParse a query given as a string argument.

    Works like urllib.parse.parse_qsl with keep empty values.
    ú&ú=)Úsplitr    Úappendr   )rQ   ÚpairsÚk_vÚkr4   r   r5   r5   r6   Úquery_to_pairsÀ   s   rY   )F)Ú__doc__r!   r:   Ú	functoolsr   Útypingr   Úurllib.parser   r   Ú_quotersr   r   r   r   Ú	frozensetrJ   ÚtupleÚstrÚSplitURLTyper7   r$   r?   rI   rK   ÚboolrP   ÚlistrY   r5   r5   r5   r6   Ú<module>   sb    ÿ=ÿ.þ!ÿÿÿÿÿ
þû
ÿ
þ
ý
üûú"!