o
    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rt| }
|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|st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_hashhas_question_markdelimdelim_charswdelimhas_left_brackethas_right_bracketbracketed_host_ r5   _/var/www/html/construction_image-detection-poc/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 )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   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    =.!




"!