Ë
    îñþi³!  ã                  óà   — 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 dl	m
Z
 d dlZd dlZd dlmZ d dlmZmZ d dlmZ d dlmZmZmZ d d	lmZmZmZ e
ed
f   Z G d„ de«      Z G d„ d«      Zy)é    )ÚannotationsN)Ú	parsedate)ÚUnion)Úget_route_path)ÚURLÚHeaders)ÚHTTPException)ÚFileResponseÚRedirectResponseÚResponse)ÚReceiveÚScopeÚSendzos.PathLike[str]c                  ó$   ‡ — e Zd ZdZdˆ fd„Zˆ xZS )ÚNotModifiedResponse)zcache-controlzcontent-locationÚdateÚetagÚexpiresÚvaryc           	     ó–   •— t         ‰| �  d|j                  «       D ��ci c]  \  }}|| j                  v sŒ||“Œ c}}¬«       y c c}}w )Ni0  )Ústatus_codeÚheaders)ÚsuperÚ__init__ÚitemsÚNOT_MODIFIED_HEADERS)Úselfr   ÚnameÚvalueÚ	__class__s       €úU/root/aria/mcps/aria-brain/venv/lib/python3.12/site-packages/starlette/staticfiles.pyr   zNotModifiedResponse.__init__    sD   ø€ Ü‰ÑØØ4;·M±M³O×i¡[ T¨5ÀtÈt×OhÑOhÒGh�T˜5‘[Óið 	õ 	
ùãis
   ŸA¶A)r   r   )Ú__name__Ú
__module__Ú__qualname__r   r   Ú__classcell__)r    s   @r!   r   r      s   ø„ ðÐ÷
ñ 
ó    r   c                  óž   — e Zd Zddddddœ	 	 	 	 	 	 	 	 	 	 	 dd„Z	 	 d	 	 	 	 	 dd„Zdd„Zdd„Zdd	„Zdd
„Z	 d	 	 	 	 	 	 	 	 	 dd„Z	dd„Z
dd„Zy)ÚStaticFilesNFT)Ú	directoryÚpackagesÚhtmlÚ	check_dirÚfollow_symlinkc               óà   — || _         || _        | j                  ||«      | _        || _        d| _        || _        |r2|�/t        j                  j                  |«      st        d|› d�«      ‚y y y )NFúDirectory 'z' does not exist)r)   r*   Úget_directoriesÚall_directoriesr+   Úconfig_checkedr-   ÚosÚpathÚisdirÚRuntimeError)r   r)   r*   r+   r,   r-   s         r!   r   zStaticFiles.__init__(   su   € ð #ˆŒØ ˆŒØ#×3Ñ3°I¸xÓHˆÔØˆŒ	Ø#ˆÔØ,ˆÔÙ˜Ð.´r·w±w·}±}ÀYÔ7OÜ ¨Y¨KÐ7GÐHÓIÐIð 8PÐ.ˆ9r&   c                ó  — g }|�|j                  |«       |xs g D ]ã  }t        |t        «      r|\  }}nd}t        j                  j                  |«      }|€J d|›d�«       ‚|j                  €J d|›d�«       ‚t        j                  j                  t        j                  j                  |j                  d|«      «      }t        j                  j                  |«      sJ d|›d|›d�«       ‚|j                  |«       Œå |S )z�
        Given `directory` and `packages` arguments, return a list of all the
        directories that should be used for serving static files from.
        ÚstaticszPackage z could not be found.z..r/   z' in package )ÚappendÚ
isinstanceÚtupleÚ	importlibÚutilÚ	find_specÚoriginr3   r4   ÚnormpathÚjoinr5   )r   r)   r*   ÚdirectoriesÚpackageÚstatics_dirÚspecÚpackage_directorys           r!   r0   zStaticFiles.get_directories:   s  € ð ˆØÐ Ø×Ñ˜yÔ)à’~ 2ò 	2ˆGÜ˜'¤5Ô)Ø'.Ñ$�™à'�Ü—>‘>×+Ñ+¨GÓ4ˆDØÐ#ÐO x°¨{Ð:NÐ%OÓOÐ#Ø—;‘;Ð*ÐV¨h°w°kÐAUÐ,VÓVÐ*Ü "§¡× 0Ñ 0´·±·±¸d¿k¹kÈ4ÐQ\Ó1]Ó ^ÐÜ—7‘7—=‘=Ð!2Ô3ð Ø˜k˜_¨M¸'¸ÐDXÐYóÐ3ð ×ÑÐ0Õ1ð	2ð Ðr&   c              ƒ  óü   K  — |d   dk(  sJ ‚| j                   s| j                  «       ƒ d{  –—†  d| _         | j                  |«      }| j                  ||«      ƒ d{  –—† } ||||«      ƒ d{  –—†  y7 ŒI7 Œ7 Œ	­w)z'
        The ASGI entry point.
        ÚtypeÚhttpNT)r2   Úcheck_configÚget_pathÚget_response)r   ÚscopeÚreceiveÚsendr4   Úresponses         r!   Ú__call__zStaticFiles.__call__W   s�   è ø€ ð �V‰} Ò&Ð&Ð&à×"Ò"Ø×#Ñ#Ó%×%Ð%Ø"&ˆDÔà�}‰}˜UÓ#ˆØ×*Ñ*¨4°Ó7×7ˆÙ�u˜g tÓ,×,Ñ,ð &øð 8øØ,ús3   ‚*A<¬A6­1A<ÁA8ÁA<Á0A:Á1A<Á8A<Á:A<c                ó¨   — t        |«      }t        j                  j                  t        j                  j                  |j                  d«      Ž «      S )z�
        Given the ASGI scope, return the `path` string to serve up,
        with OS specific path separators, and any '..', '.' components removed.
        ú/)r   r3   r4   r@   rA   Úsplit)r   rM   Ú
route_paths      r!   rK   zStaticFiles.get_pathe   s;   € ô
 $ EÓ*ˆ
Ü�w‰w×Ñ¤§¡§¡¨j×.>Ñ.>¸sÓ.CÐ DÓEÐEr&   c              ƒ  óÖ  K  — |d   dvrt        d¬«      ‚	 t        j                  j                  | j                  |«      ƒ d{  –—† \  }}|r2t        j                  |j                  «      r| j                  |||«      S |rÿt        j                  |j                  «      rà| j                  rÔt         j"                  j%                  |d«      }t        j                  j                  | j                  |«      ƒ d{  –—† \  }}|�}t        j                  |j                  «      r^|d	   j'                  d
«      s7t)        |¬«      }|j+                  |j"                  d
z   ¬«      }t-        |¬«      S | j                  |||«      S | j                  rdt        j                  j                  | j                  d«      ƒ d{  –—† \  }}|r-t        j                  |j                  «      rt/        ||d¬«      S t        d¬«      ‚7 �Œ¹# t
        $ r t        d¬«      ‚t        $ r0}|j                  t        j                  k(  rt        d¬«      ‚|‚d}~wt        $ r t        d¬«      ‚w xY w7 �Œj7 Œ¬­w)z`
        Returns an HTTP response, given the incoming path, method and request headers.
        Úmethod)ÚGETÚHEADi•  )r   Ni‘  i”  z
index.htmlr4   rS   ©rM   )r4   )Úurlz404.html)Ústat_resultr   )r	   ÚanyioÚ	to_threadÚrun_syncÚlookup_pathÚPermissionErrorÚOSErrorÚerrnoÚENAMETOOLONGÚ
ValueErrorÚstatÚS_ISREGÚst_modeÚfile_responseÚS_ISDIRr+   r3   r4   rA   Úendswithr   Úreplacer   r
   )r   r4   rM   Ú	full_pathr\   ÚexcÚ
index_pathr[   s           r!   rL   zStaticFiles.get_responsem   sû  è ø€ ð �‰? /Ñ1Ü¨CÔ0Ð0ð	1Ü+0¯?©?×+CÑ+CÀD×DTÑDTÐVZÓ+[×%[Ñ"ˆI�{ñ œ4Ÿ<™<¨×(;Ñ(;Ô<à×%Ñ% i°¸eÓDÐDáœTŸ\™\¨+×*=Ñ*=Ô>À4Ç9Â9ô Ÿ™Ÿ™ d¨LÓ9ˆJÜ+0¯?©?×+CÑ+CÀD×DTÑDTÐV`Ó+a×%aÑ"ˆI�{ØÐ&¬4¯<©<¸×8KÑ8KÔ+LØ˜V‘}×-Ñ-¨cÔ2ä EÔ*�CØŸ+™+¨3¯8©8°c©>˜+Ó:�CÜ+°Ô4Ð4Ø×)Ñ)¨)°[À%ÓHÐHà�9Š9ä+0¯?©?×+CÑ+CÀD×DTÑDTÐV`Ó+a×%aÑ"ˆI�{ÙœtŸ|™|¨K×,?Ñ,?Ô@Ü# I¸;ÐTWÔXÐXÜ¨Ô,Ð,ðG &\úÜò 	1Ü¨CÔ0Ð0Üò 	à�y‰yœE×.Ñ.Ò.Ü#°Ô4Ð4àˆIûÜò 	1ä¨CÔ0Ð0ð	1úð &bùð &bús[   ‚I)—-H  ÁG=ÁH  ÁB.I)Ã:I$Ã;B?I)Æ:I'Æ;AI)Ç=H  È I!È+IÉI!É!I)É'I)c                ó2  — | j                   D ]ò  }t        j                  j                  ||«      }| j                  r?t        j                  j                  |«      }t        j                  j                  |«      }n>t        j                  j                  |«      }t        j                  j                  |«      }t        j                  j                  ||g«      t        |«      k7  rŒÚ	 |t        j                  |«      fc S  y# t        t        f$ r Y �Œw xY w)N)Ú N)r1   r3   r4   rA   r-   ÚabspathÚrealpathÚ
commonpathÚstrrf   ÚFileNotFoundErrorÚNotADirectoryError)r   r4   r)   Újoined_pathrm   s        r!   r`   zStaticFiles.lookup_pathš   sÛ   € Ø×-Ñ-ò 	ˆIÜŸ'™'Ÿ,™, y°$Ó7ˆKØ×"Ò"ÜŸG™GŸO™O¨KÓ8�	ÜŸG™GŸO™O¨IÓ6‘	äŸG™G×,Ñ,¨[Ó9�	ÜŸG™G×,Ñ,¨YÓ7�	Ü�w‰w×!Ñ! 9¨iÐ"8Ó9¼SÀ»^ÒKàðØ ¤"§'¡'¨)Ó"4Ð4Ò4ð	ð øô &Ô'9Ð:ò Úðús   Ã(DÄDÄDc                óœ   — t        |¬«      }t        |||¬«      }| j                  |j                  |«      rt	        |j                  «      S |S )NrZ   )r   r\   )r   r
   Úis_not_modifiedr   r   )r   rm   r\   rM   r   Úrequest_headersrP   s          r!   ri   zStaticFiles.file_response¬   sI   € ô "¨Ô.ˆä 	°{ÐP[Ô\ˆØ×Ñ × 0Ñ 0°/ÔBÜ& x×'7Ñ'7Ó8Ð8Øˆr&   c              ƒ  ó¨  K  — | j                   €y	 t        j                  j                  t        j
                  | j                   «      ƒ d{  –—† }t        j                  |j                  «      s9t        j                  |j                  «      st        d| j                   › d�«      ‚yy7 Œ]# t        $ r t        d| j                   › d�«      ‚w xY w­w)zÇ
        Perform a one-off configuration check that StaticFiles is actually
        pointed at a directory, so that we can raise loud errors rather than
        just returning 404 responses.
        NzStaticFiles directory 'z' does not exist.zStaticFiles path 'z' is not a directory.)r)   r]   r^   r_   r3   rf   rv   r6   rj   rh   ÚS_ISLNK)r   r\   s     r!   rJ   zStaticFiles.check_configº   s¶   è ø€ ð �>‰>Ð!Øð	\Ü %§¡× 8Ñ 8¼¿¹À$Ç.Á.Ó Q×QˆKô —‘˜[×0Ñ0Ô1´T·\±\À+×BUÑBUÔ5VÜÐ!3°D·N±NÐ3CÐCXÐYÓZÐZð 6WÐ1ð RùÜ ò 	\ÜÐ!8¸¿¹Ð8HÐHYÐZÓ[Ð[ð	\üs/   ‚C‘;B, ÁB*ÁB, ÁACÂ*B, Â,#CÃCc                ó
  — |j                  d«      x}r5|d   }||j                  d«      D �cg c]  }|j                  d«      ‘Œ c}v S 	 t        |d   «      }t        |d   «      }|�|�||k\  ryyc c}w # t        $ r Y yw xY w)	z�
        Given the request and response headers, return `True` if an HTTP
        "Not Modified" response could be returned instead.
        zif-none-matchr   ú,z W/zif-modified-sincezlast-modifiedTF)ÚgetrT   Ústripr   ÚKeyError)r   Úresponse_headersr{   Úif_none_matchr   ÚtagÚif_modified_sinceÚlast_modifieds           r!   rz   zStaticFiles.is_not_modifiedÊ   s­   € ð
 ,×/Ñ/°Ó@Ð@ˆ=Ð@à# FÑ+ˆDØ¸×8KÑ8KÈCÓ8PÖQ°˜CŸI™I eÕ,ÒQÐQÐQð	Ü )¨/Ð:MÑ*NÓ OÐÜ%Ð&6°Ñ&GÓHˆMØ Ð,°Ð1JÐO`ÐdqÒOqØð ùò Røô ò 	Øàð	ús   ­A1Á
%A6 Á6	BÂB)r)   úPathLike | Noner*   ú"list[str | tuple[str, str]] | Noner+   Úboolr,   rŠ   r-   rŠ   ÚreturnÚNone)NN)r)   rˆ   r*   r‰   r‹   zlist[PathLike])rM   r   rN   r   rO   r   r‹   rŒ   )rM   r   r‹   ru   )r4   ru   rM   r   r‹   r   )r4   ru   r‹   z!tuple[str, os.stat_result | None])éÈ   )
rm   ÚPathLiker\   zos.stat_resultrM   r   r   Úintr‹   r   )r‹   rŒ   )rƒ   r   r{   r   r‹   rŠ   )r"   r#   r$   r   r0   rQ   rK   rL   r`   ri   rJ   rz   © r&   r!   r(   r(   '   sß   „ ð &*Ø7;ØØØ$ñJð #ðJð 5ð	Jð
 ðJð ðJð ðJð 
óJð( &*Ø7;ðà"ðð 5ðð 
ó	ó:-óFó+-óZð. ðàðð $ðð ð	ð
 ðð 
óó[ô r&   r(   ) Ú
__future__r   rc   Úimportlib.utilr<   r3   rf   Úemail.utilsr   Útypingr   r]   Úanyio.to_threadÚstarlette._utilsr   Ústarlette.datastructuresr   r   Ústarlette.exceptionsr	   Ústarlette.responsesr
   r   r   Ústarlette.typesr   r   r   ru   rŽ   r   r(   r�   r&   r!   ú<module>r›      s]   ðÝ "ã Û Û 	Û Ý !Ý ã Û å +ß 1Ý .ß HÑ Hß 0Ñ 0à�Ð(Ð(Ñ)€ô
˜(ô 
÷"uò ur&   