ó
    ëBj%  ã                   óH  • S SK J r Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SK	J
r
  S SKJrJrJrJrJr  S SKrS SKrS SKrS SKJrJr  S SKJr  SSKJr  \" S	5       " S
 S\5      5       r\R8                  \l        \" S5       " S S\5      5       r\R8                  \l        g)é    )ÚdatetimeÚtimezoneN)ÚPath)ÚIterableÚOptionalÚTupleÚUnionÚCallable)ÚClientÚregister_client_class)ÚFileCacheModeé   )ÚHttpPathÚhttpc                   ó¢  ^ • \ rS rSrSS\R
                  SSSS4S\\\\	4      S\\\\
R                  4      S\\   S\\R                  R                     S\\\/\\   4      S	\\\/\4      S
\\   4U 4S jjjrS\S\4S jrS\S\\   4S jrS\S\\\
R                  4   S\4S jrS\S\4S jrS&S\S\S\S\4S jjrS&S\S\SS4S jjrS\S\S\\\\4      4S jrS\\\
R                  4   S\S\4S jrS\S\4S jrS'S\S\ S\4S jjr!S\S \S\\\\4      4S! jr"S"\S#\S\\#RH                  RJ                  \&4   4S$ jrS%r'U =r($ )(Ú
HttpClienté   NÚPUTÚfile_cache_modeÚlocal_cache_dirÚcontent_type_methodÚauthÚcustom_list_page_parserÚcustom_dir_matcherÚwrite_file_http_methodc                 ó"  >• [         TU ]  XU5        X@l        U R                  c$  [        R                  R                  5       U l        O.[        R                  R                  U R                  5      U l        XPl        Ub  UOS U l        Xpl	        g)a   Class constructor. Creates an HTTP client that can be used to interact with HTTP servers
    using the cloudpathlib library.

Args:
    file_cache_mode (Optional[Union[str, FileCacheMode]]): How often to clear the file cache; see
        [the caching docs](https://cloudpathlib.drivendata.org/stable/caching/) for more information
        about the options in cloudpathlib.eums.FileCacheMode.
    local_cache_dir (Optional[Union[str, os.PathLike]]): Path to directory to use as cache
        for downloaded files. If None, will use a temporary directory. Default can be set with
        the `CLOUDPATHLIB_LOCAL_CACHE_DIR` environment variable.
    content_type_method (Optional[Callable]): Function to call to guess media type (mimetype) when
        uploading files. Defaults to `mimetypes.guess_type`.
    auth (Optional[urllib.request.BaseHandler]): Authentication handler to use for the client. Defaults to None, which will use the default handler.
    custom_list_page_parser (Optional[Callable[[str], Iterable[str]]]): Function to call to parse pages that list directories. Defaults to looking for `<a>` tags with `href`.
    custom_dir_matcher (Optional[Callable[[str], bool]]): Function to call to identify a url that is a directory. Defaults to a lambda that checks if the path ends with a `/`.
    write_file_http_method (Optional[str]): HTTP method to use when writing files. Defaults to "PUT", but some servers may want "POST".
Nc                 ó$   • U R                  S5      $ )NÚ/)Úendswith)Úxs    ÚY/home/mande/repo/quber/.venv/lib/python3.13/site-packages/cloudpathlib/http/httpclient.pyÚ<lambda>Ú%HttpClient.__init__.<locals>.<lambda><   s   € ÐPQ×PZÑPZÐ[^ÔP_ó    )
ÚsuperÚ__init__r   ÚurllibÚrequestÚbuild_openerÚopenerr   Údir_matcherr   )	Úselfr   r   r   r   r   r   r   Ú	__class__s	           €r!   r&   ÚHttpClient.__init__   sv   ø€ ô6 	‰Ñ˜Ð;NÔOØŒ	à�9‰9ÑÜ Ÿ.™.×5Ñ5Ó7ˆD�Kä Ÿ.™.×5Ñ5°d·i±iÓ@ˆDŒKà'>Ô$ð #5Ñ"@ÑÑF_ð 	Ôð '=Õ#r$   Ú
cloud_pathÚreturnc                 ó¶  • U R                   R                  UR                  5       5       nUR                  R	                  SS 5      nUb4  [
        R                  " US5      nUR                  [        R                  S9n[        UR                  R	                  SS5      5      UUR                  R	                  SS 5      S.sS S S 5        $ ! , (       d  f       g = f)NzLast-Modifiedz%a, %d %b %Y %H:%M:%S %Z)ÚtzinfozContent-Lengthr   úContent-Type)ÚsizeÚlast_modifiedÚcontent_type)r*   ÚopenÚas_urlÚheadersÚgetr   ÚstrptimeÚreplacer   ÚutcÚint)r,   r/   Úresponser5   s       r!   Ú_get_metadataÚHttpClient._get_metadataA   s±   € Ø�[‰[×Ñ˜j×/Ñ/Ó1Ô2°hØ$×,Ñ,×0Ñ0°À$ÓGˆMàÑ(ä (× 1Ò 1°-ÐA[Ó \�ð !.× 5Ñ 5¼X¿\¹\Ð 5Ð J�ô ˜H×,Ñ,×0Ñ0Ð1AÀ1ÓEÓFØ!.Ø (× 0Ñ 0× 4Ñ 4°^ÀTÓ Jñ÷ 3×2×2ús   ªBC
Ã

Cc                 óN   • U R                  UR                  5       5      (       a  gg)NÚdirÚfile)r+   r8   ©r,   r/   s     r!   Ú_is_file_or_dirÚHttpClient._is_file_or_dirR   s"   € Ø×Ñ˜J×-Ñ-Ó/×0Ñ0Øàr$   Ú
local_pathc                 óZ  • [        U5      nU R                  R                  UR                  5       5       nUR                  R                  SSS9  UR                  S5       n[        R                  " X45        S S S 5        S S S 5        U$ ! , (       d  f       N= f! , (       d  f       U$ = f)NT)ÚparentsÚexist_okÚwb)r   r*   r7   r8   ÚparentÚmkdirÚshutilÚcopyfileobj)r,   r/   rH   r?   Úout_files        r!   Ú_download_fileÚHttpClient._download_fileX   sŠ   € Ü˜*Ó%ˆ
Ø�[‰[×Ñ˜j×/Ñ/Ó1Ô2°hà×Ñ×#Ñ#¨D¸4Ð#Ñ@Ø—‘ Ô&¨(Ü×"Ò" 8Ô6÷ '÷ 3ð
 Ð÷ 'Õ&ú÷ 3Ô2ð
 Ðús#   µ,BÁ!B
Á8BÂ

B	ÂBÂ
B*c                 óä  • [         R                  R                  UR                  5       SS9n U R                  R                  U5       nUR                  S:H  sS S S 5        $ ! , (       d  f       g = f! [         R                  R                  [         R                  R                  4 aD  n[        U[         R                  R                  5      (       d  UR                  S:X  a   S nAge S nAff = f)NÚHEAD©ÚmethodéÈ   é”  F)r'   r(   ÚRequestr8   r*   r7   ÚstatusÚerrorÚ	HTTPErrorÚURLErrorÚ
isinstanceÚcode)r,   r/   r(   r?   Úes        r!   Ú_existsÚHttpClient._existsa   s¤   € Ü—.‘.×(Ñ(¨×):Ñ):Ó)<ÀVÐ(ÐLˆð	Ø—‘×!Ñ! 'Ô*¨hØ—‘¨#Ñ-÷ +×*×*ûä—‘×&Ñ&¬¯©×(=Ñ(=Ð>ó 	Ü˜!œVŸ\™\×2Ñ2×3Ñ3°q·v±vÀ³}ÜØûð	ús;   ®A3 Á	A"Á	A3 Á"
A0Á,A3 Á0A3 Á38C/Â+9C*Ã)C*Ã*C/ÚsrcÚdstÚ
remove_srcc           	      óâ   • U R                  UR                  U5        U(       a   U R                  U5        U$ U$ ! [         a*  n[        R
                  " SU SU SU 3[        5        e S nAff = f)Nz"File was successfully uploaded to z but failed to remove original z: )Ú_upload_fileÚfspathÚ_removeÚ	ExceptionÚwarningsÚwarnÚUserWarning)r,   rd   re   rf   ra   s        r!   Ú
_move_fileÚHttpClient._move_filek   sw   € à×Ñ˜#Ÿ*™* cÔ*ÞðØ—‘˜SÔ!ð ˆ
ˆsˆ
øô ó Ü—’Ø8¸¸Ð=\Ð]`Ð\aÐacÐdeÐcfÐgÜôð ûðús   ¥: º
A.Á%A)Á)A.Ú
missing_okc                 óª  • [         R                  R                  UR                  5       SS9n U R                  R                  U5       nUR                  S:w  a  [        SU S35      e S S S 5        g ! , (       d  f       g = f! [         R                  R                   a0  nUR                  S:X  a  U(       a   S nAg [        SU S35      eS nAff = f)NÚDELETErV   éÌ   zFailed to delete Ú.rY   )r'   r(   rZ   r8   r*   r7   r[   rk   r\   r]   r`   ÚFileNotFoundError)r,   r/   rq   r(   r?   ra   s         r!   rj   ÚHttpClient._removey   s²   € Ü—.‘.×(Ñ(¨×):Ñ):Ó)<ÀXÐ(ÐNˆð	KØ—‘×!Ñ! 'Ô*¨hØ—?‘? cÓ)Ü#Ð&7¸
°|À1Ð$EÓFÐFð *÷ +×*Ö*ûô �|‰|×%Ñ%ó 	KØ�v‰v˜‹}¦Üä'Ð*;¸J¸<ÀqÐ(IÓJÐJûð		Kús;   ®B Á	 A3Á*B Á3
BÁ=B ÂB ÂCÂ"CÂ>CÃCÚ	recursivec              #   ó²  #   •  U R                   R                  UR                  5       5       nU R                  UR	                  5       R                  5       [        U5      S9 H4  u  pEXE4v •  U(       d  M  U(       d  M  U R                  USS9 S h  v•N   M6     S S S 5        g  N! , (       d  f       g = f! [         a  n[        SU 35      eS nAff = f7f)N)Úbase_urlT)rx   z{Unable to parse response as a listing of files; please provide a custom parser as `custom_list_page_parser`. Error raised: )
r*   r7   r8   Ú_parse_list_dir_responseÚreadÚdecodeÚstrÚ	_list_dirrk   ÚNotImplementedError)r,   r/   rx   r?   ÚpathÚis_dirra   s          r!   r   ÚHttpClient._list_dir…   sÕ   é € ð	Ø—‘×!Ñ! *×"3Ñ"3Ó"5Ô6¸(à$(×$AÑ$AØ—M‘M“O×*Ñ*Ó,´s¸:³ð %Bó %‘L�Dð ˜,Ò&÷ !�y§V VØ#'§>¡>°$À$ >Ð#G×GÒGñ%÷ 7Ð6ñ H÷ 7Õ6ûô ó 	Ü%ð Nð  OPð  NQð  Róð ûð	üsj   ‚C„)B7 ­AB&Á6B&Á?B&ÂB$ÂB&ÂB7 Â#CÂ$B&Â&
B4Â0B7 Â3CÂ4B7 Â7
CÃCÃCÃCc           	      ó(  • [        U5      nU R                  b  U R                  U5      u  p4SW=(       d    S0nUR                  S5       n[        R                  R                  UR                  5       UR                  5       U R                  US9nU R                  R                  U5       nUR                  S:w  a"  UR                  S:w  a  [        SU SU S	35      eS S S 5        S S S 5        U$ ! , (       d  f       N= f! , (       d  f       U$ = f)
Nr3   zapplication/octet-streamÚrb)ÚdatarW   r9   éÉ   rX   zFailed to upload z to ru   )r   r   r7   r'   r(   rZ   r8   r|   r   r*   r[   rk   )	r,   rH   r/   r6   Ú_r9   Ú	file_datar(   r?   s	            r!   rh   ÚHttpClient._upload_file—   sø   € Ü˜*Ó%ˆ
Ø×#Ñ#Ñ/Ø"×6Ñ6°zÓB‰OˆLà! <×#MÐ3MÐNˆà�_‰_˜TÔ" iÜ—n‘n×,Ñ,Ø×!Ñ!Ó#Ø—^‘^Ó%Ø×2Ñ2Øð	 -ð ˆGð —‘×!Ñ! 'Ô*¨hØ—?‘? cÓ)¨h¯o©oÀÓ.DÜ#Ð&7¸
°|À4È
À|ÐSTÐ$UÓVÐV÷ +÷ #ð Ð÷ +Õ*ú÷ #Ô"ð Ðús%   Á
A"DÂ,3C1ÃDÃ1
C?	Ã;DÄ
Dc                 ó"   • UR                  5       $ ©N)r8   rE   s     r!   Ú_get_public_urlÚHttpClient._get_public_urlª   s   € Ø× Ñ Ó"Ð"r$   Úexpire_secondsc                 ó   • [        S5      e)Nz.Presigned URLs are not supported using urllib.)r€   )r,   r/   r�   s      r!   Ú_generate_presigned_urlÚ"HttpClient._generate_presigned_url­   s   € Ü!Ð"RÓSÐSr$   r?   rz   c              #   óæ   ^ ^#   • TR                  S5      (       d  TS-  mS[        S[        [           4S jnT R                  b  T R                  OUnUU 4S jU" U5       5        S h  v•N   g  N7f)Nr   Úhtmlr0   c                 ó0   • [         R                  " SU 5      $ )Nz<a\s+href="([^"]+)")ÚreÚfindall)r”   s    r!   Ú_simple_linksÚ:HttpClient._parse_list_dir_response.<locals>._simple_links·   s   € Ü—:’:Ð4°dÓ;Ð;r$   c              3   ó¤   >#   • U  HE  nTR                  [        R                  R                  TU5      5      TR	                  U5      4v •  MG     g 7frŒ   )Ú	CloudPathr'   ÚparseÚurljoinr+   )Ú.0Úmatchrz   r,   s     €€r!   Ú	<genexpr>Ú6HttpClient._parse_list_dir_response.<locals>.<genexpr>À   sC   øé € ð 
â)�ð �^‰^œVŸ\™\×1Ñ1°(¸EÓBÓDÀd×FVÑFVÐW\ÓF]Õ^Ú)ùs   ƒAA)r   r~   r   r   )r,   r?   rz   r˜   Úparsers   ` `  r!   r{   Ú#HttpClient._parse_list_dir_response°   sv   ùé € ð × Ñ  ×%Ñ%Ø˜‰OˆHð	<¤ð 	<¬´©ô 	<ð
 ×+Ñ+Ñ7ð ×(Ò(àð 	õ
á Ô)ó
÷ 	
ó 	
ùs   „A%A1Á)A/Á*A1ÚurlrW   c                 óò   • [         R                  R                  " UR                  5       4SU0UD6nU R                  R                  U5       nXUR                  5       4sS S S 5        $ ! , (       d  f       g = f)NrW   )r'   r(   rZ   r8   r*   r7   r|   )r,   r¤   rW   Úkwargsr(   r?   s         r!   r(   ÚHttpClient.requestÅ   sV   € ô —.‘.×(Ò(¨¯©«ÑO¸fÐOÈÑOˆØ�[‰[×Ñ˜gÔ&¨(ð Ÿ]™]›_Ð,÷ '×&×&ús   ÁA(Á(
A6)r   r   r+   r*   r   )T)i  ))Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú	mimetypesÚ
guess_typer   r	   r~   r   ÚosÚPathLiker
   r'   r(   ÚBaseHandlerr   Úboolr&   r   Údictr@   rF   r   rR   rb   ro   rj   r   r   rh   r�   r>   r‘   r{   r   ÚclientÚHTTPResponseÚbytesÚ__static_attributes__Ú__classcell__)r-   s   @r!   r   r      s]  ø† ð @DØ=AØ2;×2FÑ2FØ59ØLPØ>BØ05ñ)=à! %¨¨]Ð(:Ñ";Ñ<ð)=ð " %¨¨R¯[©[Ð(8Ñ"9Ñ:ð)=ð & hÑ/ð	)=ð
 �v—~‘~×1Ñ1Ñ2ð)=ð "*¨(°C°5¸(À3¹-Ð3GÑ*HÑ!Ið)=ð % X¨s¨e°T¨kÑ%:Ñ;ð)=ð !)¨¡÷)=ð )=ðV¨ð °Tô ð"¨(ð °xÀ±}ô ð¨ð ¸uÀSÈ"Ï+É+ÐEUÑ?Vð Ð[_ô ð (ð ¨tô ñ˜hð ¨Xð À4ð ÐS[õ ñ
K (ð 
K¸ð 
KÈõ 
Kð Hð ¸ð À(È5ÐQYÐ[_ÐQ_ÑK`ÑBaô ð$ u¨S°"·+±+Ð-=Ñ'>ð ÈHð ÐYaô ð&#¨(ð #°sô #ñT°(ð TÈCð TÐ^aõ Tð
Øð
Ø'*ð
à	�%˜ $˜Ñ'Ñ	(ô
ð*-Øð-Ø%(ð-à	ˆt�{‰{×'Ñ'¨Ð.Ñ	/÷-ò -r$   r   Úhttpsc                   ó   • \ rS rSrSrg)ÚHttpsClientéÒ   © N)r¨   r©   rª   r«   r¶   r¼   r$   r!   rº   rº   Ò   s   † âr$   rº   )r   r   r   r®   r–   Úurllib.requestr'   Úurllib.parseÚurllib.errorÚpathlibr   Útypingr   r   r   r	   r
   rO   r¬   rl   Úcloudpathlib.clientr   r   Úcloudpathlib.enumsr   Úhttppathr   r   r›   rº   Ú	HttpsPathr¼   r$   r!   Ú<module>rÆ      s™   ðß 'Û Û 	Û 	Û Û Û Ý ß =Õ =Û Û Û ç =Ý ,å ñ �vÓôw-�ó w-ó ðw-ðt !×*Ñ*€
Ô ñ �wÓô	�*ó 	ó  ð	ð $×-Ñ-€Õ r$   