Ë
    F·jþE  ã            
      óÚ  — d Z ddlmZ ddlZddlZddlZddlZddlmZ dZ	dZ
dZ ej                  d	«      Z ej                  d
j                  ddddd¬«      «      Z ej                  dj                  ddd¬«      «      Z ej                  d«       ej                  d«       ej                  d«       ej                  d«       ej                  d«       ej                  d«       ej                  d«       ej                  d«      dœZ ej                  d«      Z ej                  d«      Z G d„ dej(                  «      Zd$d%d„Zd&d„Zd'd„Zd(d„Zd)d„Zd*d „Zd+d,d!„Zd+d,d"„Zd-d#„Zy).aï  
An implementation of `urlparse` that provides URL validation and normalization
as described by RFC3986.

We rely on this implementation rather than the one in Python's stdlib, because:

* It provides more complete URL validation.
* It properly differentiates between an empty querystring and an absent querystring,
  to distinguish URLs with a trailing '?'.
* It handles scheme, hostname, port, and path normalization.
* It supports IDNA hostnames, normalizing them to their encoded form.
* The API supports passing individual components, as well as the complete URL string.

Previously we relied on the excellent `rfc3986` package to handle URL parsing and
validation, but this module provides a simpler alternative, with less indirection
required.
é    )ÚannotationsNé   )Ú
InvalidURLi   zBABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-._~z!$&'()*+,;=z%[A-Fa-f0-9]{2}z‚(?:(?P<scheme>{scheme}):)?(?://(?P<authority>{authority}))?(?P<path>{path})(?:\?(?P<query>{query}))?(?:#(?P<fragment>{fragment}))?z([a-zA-Z][a-zA-Z0-9+.-]*)?z[^/?#]*z[^?#]*z[^#]*z.*©ÚschemeÚ	authorityÚpathÚqueryÚfragmentzA(?:(?P<userinfo>{userinfo})@)?(?P<host>{host}):?(?P<port>{port})?z(\[.*\]|[^:@]*))ÚuserinfoÚhostÚportz[^@]*z(\[.*\]|[^:]*))r   r   r	   r
   r   r   r   r   z ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$z^\[.*\]$c                  óˆ   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   edd„«       Zedd„«       Zdd„Zdd„Zy)ÚParseResultÚstrr   r   r   ú
int | Noner   r	   ú
str | Noner
   r   c                óð   — dj                  | j                  r| j                  › d�ndd| j                  v rd| j                  › d�n| j                  | j                  �d| j                  › �g«      S dg«      S )NÚ ú@ú:ú[ú])Újoinr   r   r   ©Úselfs    ú]/var/www/html/ai-video-generator/backend/venv/lib/python3.12/site-packages/httpx/_urlparse.pyr   zParseResult.authorityj   sz   € à�w‰wà'+§}¢}�4—=‘=�/ Ñ#¸"Ø$'¨4¯9©9Ñ$4�!�D—I‘I�;˜aÑ ¸$¿)¹)Ø#'§9¡9Ð#8�!�D—I‘I�;�ðó
ð 	
ð ?Aðó
ð 	
ó    c                ó¸   — dj                  d| j                  v rd| j                  › d�n| j                  | j                  �d| j                  › �g«      S dg«      S )Nr   r   r   r   )r   r   r   r   s    r   ÚnetloczParseResult.netloct   sd   € à�w‰wà$'¨4¯9©9Ñ$4�!�D—I‘I�;˜aÑ ¸$¿)¹)Ø#'§9¡9Ð#8�!�D—I‘I�;�ðó
ð 	
ð ?Aðó
ð 	
r   c                ó¶   — |s| S | j                   | j                  | j                  | j                  | j                  dœ}|j                  |«       t        di |¤ŽS )Nr   ©r   )r   r   r	   r
   r   ÚupdateÚurlparse)r   ÚkwargsÚdefaultss      r   Ú	copy_withzParseResult.copy_with}   sR   € ÙØˆKð —k‘kØŸ™Ø—I‘IØ—Z‘ZØŸ™ñ
ˆð 	�‰˜ÔÜÑ'˜hÑ'Ð'r   c                ó  — | j                   }dj                  | j                  r| j                  › d�nd|rd|› �nd| j                  | j                  �d| j                  › �nd| j
                  �d| j
                  › �g«      S dg«      S )Nr   r   ú//ú?ú#)r   r   r   r	   r
   r   )r   r   s     r   Ú__str__zParseResult.__str__‹   s’   € Ø—N‘Nˆ	Ø�w‰wà%)§[¢[�4—;‘;�-˜qÑ!°bÙ$-�"�Y�KÑ °2Ø—	‘	Ø$(§J¡JÐ$:�!�D—J‘J�<Ñ ÀØ'+§}¡}Ð'@�!�D—M‘M�?Ð#ðó
ð 	
ð GIðó
ð 	
r   N)Úreturnr   )r%   r   r-   r   )	Ú__name__Ú
__module__Ú__qualname__Ú__annotations__Úpropertyr   r    r'   r,   © r   r   r   r   a   sX   … ØƒKØƒMØ
ƒIØ
ÓØ
ƒIØÓØÓàò
ó ð
ð ò
ó ð
ó(ô

r   r   c           	     óN  — t        | «      t        kD  rt        d«      ‚t        d„ | D «       «      r7t	        d„ | D «       «      }| j                  |«      }d|›d|› d�}t        |«      ‚d|v r%|d   }t        |t        «      rt        |«      n||d<   d|v r0|j                  d«      xs d	}|j                  d
«      \  |d<   }|d<   d|v sd|v rLt        |j                  dd	«      xs d	«      }t        |j                  dd	«      xs d	«      }	|	r|› d
|	› �n||d<   d|v r7|j                  d«      xs d	}
|
j                  d«      \  |d<   }|d<   |sd |d<   d|v rD|j                  d«      xs d	}d
|v r+|j                  d«      r|j                  d«      s	d|› d�|d<   |j                  «       D ]œ  \  }}|€Œ	t        |«      t        kD  rt        d|› d�«      ‚t        d„ |D «       «      r:t	        d„ |D «       «      }|j                  |«      }d|› d|›d|› d�}t        |«      ‚t         |   j#                  |«      rŒ�t        d|› d�«      ‚ t$        j'                  | «      }|€J ‚|j)                  «       }|j                  d|d   «      xs d	}|j                  d|d   «      xs d	}|j                  d|d   «      xs d	}|j                  d|d   «      }|j                  d|d   «      }t*        j'                  |«      }|€J ‚|j)                  «       }|j                  d|d   «      xs d	}|j                  d|d   «      xs d	}|j                  d|d   «      }|j-                  «       }t        |t.        d
z   ¬ «      }t1        |«      }t3        ||«      }|d	k7  }|d	k7  xs |d	k7  xs |d u}t5        |||¬!«       |s|rt7        |«      }d"}t        |t.        |z   d#z   ¬ «      } |€d nt        |t.        |z   d$z   ¬ «      }!|€d nt        |t.        |z   d%z   ¬ «      }"t9        ||||| |!|"«      S )&NzURL too longc              3  ób   K  — | ]'  }|j                  «       xr |j                  «        –— Œ) y ­w©N©ÚisasciiÚisprintable©Ú.0Úchars     r   ú	<genexpr>zurlparse.<locals>.<genexpr>¢   s*   è ø€ Ò
E¸ˆ4�<‰<‹>Ò4 $×"2Ñ"2Ó"4Ð4Ó4Ñ
Eùó   ‚-/c              3  ód   K  — | ](  }|j                  «       sŒ|j                  «       rŒ%|–— Œ* y ­wr6   r7   r:   s     r   r=   zurlparse.<locals>.<genexpr>£   s#   è ø€ ÒV˜T¨D¯L©L­NÀ4×CSÑCSÕCU”DÑVùó   ‚0˜0©0z.Invalid non-printable ASCII character in URL, z at position ú.r   r    r   r   r   ÚusernameÚpasswordr   Úraw_pathr*   r	   r
   r   r   zURL component 'z
' too longc              3  ób   K  — | ]'  }|j                  «       xr |j                  «        –— Œ) y ­wr6   r7   r:   s     r   r=   zurlparse.<locals>.<genexpr>Ô   s*   è ø€ ÒOÀ�4—<‘<“>Ò<¨$×*:Ñ*:Ó*<Ð&<Ó<ÑOùr>   c              3  ód   K  — | ](  }|j                  «       sŒ|j                  «       rŒ%|–— Œ* y ­wr6   r7   r:   s     r   r=   zurlparse.<locals>.<genexpr>Õ   s(   è ø€ ò Ø!¨d¯l©l­nÀT×EUÑEUÕEW”Dñùr@   z-Invalid non-printable ASCII character in URL z component, zInvalid URL component 'ú'r   r   r   ©Úsafe)Ú
has_schemeÚhas_authorityz`{}%|^\"z:/[]@z:/?[]@z:/?#[]@)ÚlenÚMAX_URL_LENGTHr   ÚanyÚnextÚfindÚ
isinstanceÚintr   ÚpopÚ	partitionÚquoteÚgetÚ
startswithÚendswithÚitemsÚCOMPONENT_REGEXÚ	fullmatchÚ	URL_REGEXÚmatchÚ	groupdictÚAUTHORITY_REGEXÚlowerÚ
SUB_DELIMSÚencode_hostÚnormalize_portÚvalidate_pathÚnormalize_pathr   )#Úurlr%   r<   ÚidxÚerrorr   r    Ú_rB   rC   rD   Ú	seperatorr   ÚkeyÚvalueÚ	url_matchÚurl_dictr   r   r	   r
   r   Úauthority_matchÚauthority_dictr   Úparsed_schemeÚparsed_userinfoÚparsed_hostÚparsed_portrJ   rK   ÚWHATWG_SAFEÚparsed_pathÚparsed_queryÚparsed_fragments#                                      r   r$   r$   ˜   s½  € ô
 ˆ3ƒx”.Ò Ü˜Ó(Ð(ô Ñ
EÀÔ
EÔEÜÑV SÔVÓVˆØ�h‰h�t‹nˆà<¸T¸HÀMÐRUÐQVÐVWÐXð 	ô ˜ÓÐð �ÑØ�f‰~ˆÜ&0°´sÔ&;œ˜TœÀˆˆv‰ð �6ÑØ—‘˜HÓ%Ò+¨ˆØ,2×,<Ñ,<¸SÓ,AÑ)ˆˆv‰˜˜6 &™>ð �VÑ˜z¨VÑ3Ü˜Ÿ™ J°Ó3Ò9°rÓ:ˆÜ˜Ÿ™ J°Ó3Ò9°rÓ:ˆÙ9A ˜z¨¨8¨*Ñ5ÀxˆˆzÑð �VÑØ—:‘:˜jÓ)Ò/¨RˆØ5=×5GÑ5GÈÓ5LÑ2ˆˆv‰˜	 6¨'¡?ÙØ"ˆF�7‰Oð �ÑØ�z‰z˜&Ó!Ò' RˆØ�$‰; §¡°Ô 4¸¿¹ÀsÔ9KØ    a˜[ˆF�6‰Nð
 —l‘l“nò C‰
ˆˆUØÑÜ�5‹zœNÒ*Ü  ?°3°%°zÐ!BÓCÐCô ÑOÈÔOÔOÜñ Ø%*ôó �ð —j‘j Ó&�àCÀCÀ5ÈØ�h˜m¨C¨5°ð3ð ô ! Ó'Ð'ô # 3Ñ'×1Ñ1°%Õ8Ü Ð#:¸3¸%¸qÐ!AÓBÐBð)Cô. —‘ Ó$€IØÐ Ð Ð Ø×"Ñ"Ó$€Hð �Z‰Z˜ (¨8Ñ"4Ó5Ò;¸€FØ—
‘
˜;¨°Ñ(=Ó>ÒDÀ"€IØ�:‰:�f˜h vÑ.Ó/Ò5°2€DØ�J‰J�w ¨Ñ 1Ó2€EØ�z‰z˜* h¨zÑ&:Ó;€Hô &×+Ñ+¨IÓ6€OØÐ&Ð&Ð&Ø$×.Ñ.Ó0€Nð �z‰z˜* n°ZÑ&@ÓAÒGÀR€HØ�:‰:�f˜n¨VÑ4Ó5Ò;¸€DØ�:‰:�f˜n¨VÑ4Ó5€Dð
  Ÿ™›€MÜ  ´
¸SÑ0@ÔA€OÜ" 4Ó(€KÜ,¨T°6Ó:€Kà "Ñ$€Jà˜2ÑÒM °Ñ!2ÒM°kÈÐ6Mð ô �$ :¸]ÕKÙ‘]Ü˜dÓ#ˆð
 €Kô ˜T¬
°[Ñ(@À7Ñ(JÔK€Kð ˆ=ñ 	ä�5œz¨KÑ7¸(ÑBÔCð ð Ðñ 	ä�8¤*¨{Ñ":¸YÑ"FÔGð ô ØØØØØØØóð r   c                ót  — | syt         j                  | «      r	 t        j                  | «       | S t        j                  | «      r	 t        j                  | dd «       | dd S | j                  «       r$d}t        | j                  «       t        |z   ¬«      S 	 t        j                  | j                  «       «      j                  d«      S # t        j                  $ r t        d| ›�«      ‚w xY w# t        j                  $ r t        d| ›�«      ‚w xY w# t        j                  $ r t        d	| ›�«      ‚w xY w)
Nr   zInvalid IPv4 address: r   éÿÿÿÿzInvalid IPv6 address: z"`{}%|\rH   ÚasciizInvalid IDNA hostname: )ÚIPv4_STYLE_HOSTNAMEr]   Ú	ipaddressÚIPv4AddressÚAddressValueErrorr   ÚIPv6_STYLE_HOSTNAMEÚIPv6Addressr8   rU   r`   ra   ÚidnaÚencodeÚdecodeÚ	IDNAError)r   ru   s     r   rb   rb   /  s2  € ÙØä	×	"Ñ	" 4Ô	(ð	@Ü×!Ñ! $Ô'ð ˆä	×	"Ñ	" 4Ô	(ð	@Ü×!Ñ! $ q¨ *Ô-ð �A�bˆzÐà	�‰Œð !ˆÜ�T—Z‘Z“\¬
°[Ñ(@ÔAÐAð=Ü�{‰{˜4Ÿ:™:›<Ó(×/Ñ/°Ó8Ð8øô= ×*Ñ*ò 	@ÜÐ5°d°XÐ>Ó?Ð?ð	@ûô ×*Ñ*ò 	@ÜÐ5°d°XÐ>Ó?Ð?ð	@ûô  �>‰>ò =ÜÐ2°4°(Ð;Ó<Ð<ð=ús#   šC ÁC0 Â1D Ã"C-Ã0"DÄ"D7c                óž   — | �| dk(  ry 	 t        | «      }ddddddœj                  |«      }||k(  ry |S # t        $ r t        d| ›�«      ‚w xY w)Nr   zInvalid port: é   éP   i»  )ÚftpÚhttpÚhttpsÚwsÚwss)rR   Ú
ValueErrorr   rV   )r   r   Úport_as_intÚdefault_ports       r   rc   rc   ^  sv   € ð €|�t˜r’zØð4Ü˜$“iˆð
  r°C¸rÈ#ÑN×RÑRØó€Lð �lÒ"ØØÐøô ò 4Ü˜>¨$¨Ð2Ó3Ð3ð4ús	   Š4 ´Ac                óÀ   — |r| r| j                  d«      st        d«      ‚|s<|s9| j                  d«      rt        d«      ‚| j                  d«      rt        d«      ‚yyy)z¯
    Path validation rules that depend on if the URL contains
    a scheme or authority component.

    See https://datatracker.ietf.org/doc/html/rfc3986.html#section-3.3
    ú/z7For absolute URLs, path must be empty or begin with '/'r)   z3Relative URLs cannot have a path starting with '//'r   z2Relative URLs cannot have a path starting with ':'N)rW   r   )r	   rJ   rK   s      r   rd   rd   y  sh   € ñ ñ ˜Ÿ™¨Ô,ÜÐVÓWÐWá™mð �?‰?˜4Ô ÜÐRÓSÐSð �?‰?˜3ÔÜÐQÓRÐRð  ð ,ˆ:r   c                óæ   — d| vr| S | j                  d«      }d|vrd|vr| S g }|D ]9  }|dk(  rŒ	|dk(  r|sŒ|dgk7  sŒ|j                  «        Œ)|j                  |«       Œ; dj                  |«      S )zˆ
    Drop "." and ".." segments from a URL path.

    For example:

        normalize_path("/path/./to/somewhere/..") == "/path/to"
    rA   r’   z..r   )ÚsplitrS   Úappendr   )r	   Ú
componentsÚoutputÚ	components       r   re   re   ’  s�   € ð �$�Øˆà—‘˜C“€Jð �*Ñ ¨ZÑ!7Øˆð €FØò %ˆ	Ø˜ÒØØ˜$ÒÚ˜& R D›.Ø—
‘
•à�M‰M˜)Õ$ð%ð �8‰8�FÓÐr   c                óp   — dj                  | j                  d«      D �cg c]  }d|d›�‘Œ
 c}«      S c c}w )Nr   zutf-8ú%Ú02X)r   rƒ   )ÚstringÚbytes     r   ÚPERCENTrž   ±  s0   € Ø�7‰7¨v¯}©}¸WÓ/EÖF t�a˜˜S�z’NÒFÓGÐGùÒFs   Ÿ3c                ó    — t         |z   }| j                  |«      s| S dj                  | D �cg c]  }||v r|n
t        |«      ‘Œ c}«      S c c}w )z1
    Use percent-encoding to quote a string.
    r   )ÚUNRESERVED_CHARACTERSÚrstripr   rž   )rœ   rI   ÚNON_ESCAPED_CHARSr<   s       r   Úpercent_encodedr£   µ  sV   € ô .°Ñ4Ðð �=‰=Ð*Ô+Øˆà�7‰7ØJPÖQÀ$�Ð*Ñ*‰´¸³Ñ	=ÒQóð ùÚQs   ¬Ac                óœ  — g }d}t        j                  t        | «      D ]l  }|j                  «       |j	                  «       }}|j                  d«      }||k7  r!| || }|j                  t        ||¬«      «       |j                  |«       |}Œn |t        | «      k7  r!| |d }	|j                  t        |	|¬«      «       dj                  |«      S )a®  
    Use percent-encoding to quote a string, omitting existing '%xx' escape sequences.

    See: https://www.rfc-editor.org/rfc/rfc3986#section-2.1

    * `string`: The string to be percent-escaped.
    * `safe`: A string containing characters that may be treated as safe, and do not
        need to be escaped. Unreserved characters are always treated as safe.
        See: https://www.rfc-editor.org/rfc/rfc3986#section-2.3
    r   rH   Nr   )
ÚreÚfinditerÚPERCENT_ENCODED_REGEXÚstartÚendÚgroupr•   r£   rL   r   )
rœ   rI   ÚpartsÚcurrent_positionr]   Ústart_positionÚend_positionÚmatched_textÚleading_textÚtrailing_texts
             r   rU   rU   Ä  sÆ   € ð €EØÐÜ—‘Ô2°FÓ;ò 
(ˆØ',§{¡{£}°e·i±i³k˜ˆØ—{‘{ 1“~ˆàÐ-Ò-Ø!Ð"2°>ÐBˆLØ�L‰Lœ¨¸DÔAÔBð 	�‰�\Ô"Ø'Ñð
(ð œ3˜v›;Ò&ØÐ/Ð0Ð1ˆØ�‰”_ ]¸Ô>Ô?à�7‰7�5‹>Ðr   c                óŽ   — dj                  | D ��cg c]#  \  }}t        |d¬«      dz   t        |d¬«      z   ‘Œ% c}}«      S c c}}w )am  
    We can use a much simpler version of the stdlib urlencode here because
    we don't need to handle a bunch of different typing cases, such as bytes vs str.

    https://github.com/python/cpython/blob/b2f7b2ef0b5421e01efb8c7bee2ef95d3bab77eb/Lib/urllib/parse.py#L926

    Note that we use '%20' encoding for spaces. and '%2F  for '/'.
    This is slightly different than `requests`, but is the behaviour that browsers use.

    See
    - https://github.com/encode/httpx/issues/2536
    - https://github.com/encode/httpx/issues/2721
    - https://docs.python.org/3/library/urllib.parse.html#urllib.parse.urlencode
    ú&r   rH   ú=)r   r£   )rY   ÚkÚvs      r   Ú	urlencoder·   å  sN   € ð �8‰8ð ÷	
á��1ô ˜A BÔ'¨#Ñ-´ÀÈÔ0KÓKó	
óð ùó	
s   ‘(A
r"   )rf   r   r%   r   r-   r   )r   r   r-   r   )r   zstr | int | Noner   r   r-   r   )r	   r   rJ   ÚboolrK   r¸   r-   ÚNone)r	   r   r-   r   )rœ   r   r-   r   )r’   )rœ   r   rI   r   r-   r   )rY   zlist[tuple[str, str]]r-   r   )Ú__doc__Ú
__future__r   r}   r¥   Útypingr‚   Ú_exceptionsr   rM   r    ra   Úcompiler§   Úformatr\   r_   rZ   r|   r€   Ú
NamedTupler   r$   rb   rc   rd   re   rž   r£   rU   r·   r3   r   r   ú<module>rÁ      s‘  ðñõ$ #ã Û 	Û ã å #à€ð Ið ð €
à"˜Ÿ
™
Ð#4Ó5Ð ð ˆB�J‰Jð	*÷
 �fØ+ØØØØð ó ó€	ð& �"—*‘*àTß�fØØ àð	 ó ó	€ð  ˆb�j‰jÐ5Ó6Ø�—‘˜IÓ&ØˆB�J‰J�xÓ ØˆR�Z‰Z˜Ó Ø�—
‘
˜4Ó Ø�—
‘
˜7Ó#ØˆB�J‰JÐ)Ó*ØˆB�J‰J�tÓñ	€ð !�b—j‘jÐ!DÓEÐ Ø �b—j‘j Ó-Ð ô4
�&×#Ñ#ô 4
ônTón,=ó^ó6Só2ó>HôôôBr   