a
    ^g?                  	   @   s(  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 dZg d	Zee	Zeeeeeef Zeed
ddZeddddZeeeeedf eedf eedf eedf f dddZeeeeeedddZedeedf eedf eedf eedf eedddZdS )zURL parsing utilities.    N)	lru_cache)Union)scheme_charsuses_netloc   QUOTERz! 	
 )	
)urlreturnc                 C   s   |  t} tD ]}|| v r| |d} qd } } }}| d}|dkr| d tv r| d| D ]}|tvrb qqb| d|  | |d d  }} d| v }d| v }	| dd d	krt| }
|r|	rd
}n|	rd}n|rd}nd}|D ]$}| |d}|dkr||
k r|}
q| d|
 }| |
d } d|v }d|v }|rD|rP|rX|sXtd|r|	dd 	dd }|d dkrt
d|stdnd|vrtd|r| 	d\} }}|	r| 	d\} }}|r| st| ||| ||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%An IPv4 address cannot be in brackets)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_hashZhas_question_markdelimZdelim_charswdelimZhas_left_bracketZhas_right_bracketZbracketed_host_ r0   Y/var/www/html/cobodadashboardai.evdpl.com/venv/lib/python3.9/site-packages/yarl/_parse.py	split_url   sd    

"

r2   )r'   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'   nZnormalized_netlocr+   r0   r0   r1   r$   V   s    $
r$   c                 C   s   d| vrd}d}| }n(|  d\}}}|d\}}}|s>d}d|v rx|d\}}}|d\}}}	|	d\}}}	n|d\}}}	|	s|pd||pddfS zt|	}
W n ty   tdY n0 d|
  krdksn td	|pd||pd|
fS )
z4Split netloc into username, password, host and port.r3   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userinfor/   have_password	bracketedhostnameZport_strportr0   r0   r1   split_netlocl   s,    rB   )r&   r'   r   r(   r)   r   c                 C   s   |s | r| t v s |dd dkr|r\|dd dkr\| rL|  d| d| n|  d| }q| rr|  d| | nd| | }n| r|  d| }|r| 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)   r0   r0   r1   unsplit_result   s     (&rD   F)userr;   hostrA   encoder   c                 C   s   |du rdS |}|dur&| d| }| du r:|du r:|S |durt| sLd} n|rXt | } |rdt |}|  d| } n| r|rt | } | r|  d| S |S )zMake netloc from parts.

    The user and password are encoded if encode is True.

    The host must already be encoded with _encode_host.
    Nr   r   r3   r   )rE   r;   rF   rA   rG   retr0   r0   r1   make_netloc   s$    rI   )F)__doc__r!   r5   	functoolsr   typingr   urllib.parser   r   Z_quotersr   r   r   	frozensetrC   tuplestrZSplitURLTyper2   r$   r9   rB   rD   boolrI   r0   r0   r0   r1   <module>   s<   =."
 



