� L�g� ����ddlmZddlZddlZddlZddlZddlZddlm Z ddl Z ddl Z ddl m Z ddlmZmZddlmZddlmZmZmZddlmZmZmZejed fZGd �d e��ZGd �d ��ZdS)�)� annotationsN)� parsedate)�get_route_path)�URL�Headers)� HTTPException)� FileResponse�RedirectResponse�Response)�Receive�Scope�Sendzos.PathLike[str]c�$��eZdZdZd�fd� Z�xZS)�NotModifiedResponse)z cache-controlzcontent-location�date�etag�expires�vary�headersrc����t���d�fd�|���D�����dS)Ni0c�.��i|]\}}|�jv�||��S�)�NOT_MODIFIED_HEADERS)�.0�name�value�selfs ��e/home/asafur/pinokio/api/open-webui.git/app/env/lib/python3.11/site-packages/starlette/staticfiles.py� <dictcomp>z0NotModifiedResponse.__init__.<locals>.<dictcomp>#s,���i�i�i�[�T�5�t�t�Oh�Gh�Gh�T�5�Gh�Gh�Gh�)� status_coder)�super�__init__�items)rr� __class__s` �rr#zNotModifiedResponse.__init__ sQ���� ������i�i�i�i�G�M�M�O�O�i�i�i� � � � � � r )rr)�__name__� __module__� __qualname__rr#� __classcell__)r%s@rrrsE��������� � � � � � � � � � r rc�n�eZdZdddddd�d-d�Z d.d/d�Zd0d�Zd1d�Zd2d�Zd3d�Z d4d5d'�Z d6d(�Z d7d,�Z dS)8� StaticFilesNFT)� directory�packages�html� check_dir�follow_symlinkr,�PathLike | Noner-�"list[str | tuple[str, str]] | Noner.�boolr/r0�return�Nonec���||_||_|�||��|_||_d|_||_|r4|�4tj� |��std|�d����dSdSdS)NF� Directory 'z' does not exist) r,r-�get_directories�all_directoriesr.�config_checkedr0�os�path�isdir� RuntimeError)rr,r-r.r/r0s rr#zStaticFiles.__init__(s���#��� �� �#�3�3�I�x�H�H����� �#���,��� � J��.�r�w�}�}�Y�7O�7O�.��H�Y�H�H�H�I�I� I� J� J�.�.�.�.r �list[PathLike]c��g}|�|�|��|pgD]�}t|t��r|\}}nd}tj�|��}|�Jd|�d����|j�Jd|�d����tj� tj� |jd|����}tj� |��sJd|�d|�d����|�|����|S)z� Given `directory` and `packages` arguments, return a list of all the directories that should be used for serving static files from. N�staticszPackage z could not be found.z..r7z ' in package ) �append� isinstance�tuple� importlib�util� find_spec�originr;r<�normpath�joinr=)rr,r-� directories�package� statics_dir�spec�package_directorys rr8zStaticFiles.get_directories:sD��� � � � � � �y� )� )� )��~�2� 2� 2�G��'�5�)�)� (�'.�$����'� ��>�+�+�G�4�4�D��#�#�%O��%O�%O�%O�#�#�#��;�*�*�,V�w�,V�,V�,V�*�*�*� "�� 0� 0�����d�k�4�Q\�1]�1]� ^� ^� ��7�=�=�!��� Y� Y�X�[�X�X��X�X�X� Y� Y�� � � �0� 1� 1� 1� 1��r �scoper �receiver �sendrc���K�|ddksJ�|js!|����d{V��d|_|�|��}|�||���d{V��}||||���d{V��dS)z' The ASGI entry point. �type�httpNT)r:� check_config�get_path� get_response)rrPrQrRr<�responses r�__call__zStaticFiles.__call__Ws������V�}��&�&�&�&��"� '��#�#�%�%� %� %� %� %� %� %� %�"&�D� ��}�}�U�#�#���*�*�4��7�7�7�7�7�7�7�7���h�u�g�t�,�,�,�,�,�,�,�,�,�,�,r �strc��t|��}tj�tjj|�d�����S)z� Given the ASGI scope, return the `path` string to serve up, with OS specific path separators, and any '..', '.' components removed. �/)rr;r<rIrJ�split)rrP� route_paths rrWzStaticFiles.get_pathes>�� $�E�*�*� ��w����� �j�.>�.>�s�.C�.C� D�E�E�Er r<r c��|K�|ddvrtd���� tj�|j|���d{V��\}}nR#t $rtd����t $r,}|jtjkrtd����|�d}~wwxYw|r0tj |j ��r|� |||��S|r�tj |j ��r�|jr�tj�|d��}tj�|j|���d{V��\}}|��tj |j ��rp|d �d ��s>t'|� ��}|�|jd z� ��}t+|� ��S|� |||��S|jr[tj�|jd���d{V��\}}|r+tj |j ��rt-||d���Std����)z` Returns an HTTP response, given the incoming path, method and request headers. �method)�GET�HEADi�)r!Ni�i�z index.htmlr<r]�rP)r<)�urlz404.html)� stat_resultr!)r�anyio� to_thread�run_sync� lookup_path�PermissionError�OSError�errno� ENAMETOOLONG�stat�S_ISREG�st_mode� file_response�S_ISDIRr.r;r<rJ�endswithr�replacer r )rr<rP� full_pathrf�exc� index_pathres rrXzStaticFiles.get_responsemsx���� ��?�/� 1� 1��C�0�0�0� 0� �+0�?�+C�+C�D�DT�VZ�+[�+[�%[�%[�%[�%[�%[�%[� "�I�{�{��� 1� 1� 1��C�0�0�0� 0�� � � ��y�E�.�.�.�#��4�4�4�4��I�����  ���� � I�4�<� �(;�<�<� I��%�%�i��e�D�D� D� � I�T�\�+�*=�>�>� I�4�9� I�����d�L�9�9�J�+0�?�+C�+C�D�DT�V`�+a�+a�%a�%a�%a�%a�%a�%a� "�I�{��&�4�<� �8K�+L�+L�&��V�}�-�-�c�2�2�5��E�*�*�*�C��+�+�3�8�c�>�+�:�:�C�+��4�4�4�4��)�)�)�[�%�H�H�H� �9� Y�+0�?�+C�+C�D�DT�V`�+a�+a�%a�%a�%a�%a�%a�%a� "�I�{�� Y�t�|�K�,?�@�@� Y�#�I�;�TW�X�X�X�X���,�,�,�,s�.A � #B�0'B�B�!tuple[str, os.stat_result | None]c���|jD]�}tj�||��}|jr tj�|��}n>tj�|��}tj�|��}tj�||g��t|��kr�� |tj |��fcS#ttf$rY��wxYwdS)N)�N) r9r;r<rJr0�abspath�realpath� commonpathr[ro�FileNotFoundError�NotADirectoryError)rr<r,� joined_pathrvs rrjzStaticFiles.lookup_path�s����-� � �I��'�,�,�y�$�7�7�K��"� 8��G�O�O�K�8�8� � ��G�,�,�[�9�9� ��G�,�,�Y�7�7� ��w�!�!�9�i�"8�9�9�S��^�^�K�K�� � �"�'�)�"4�"4�4�4�4�4��%�'9�:� � � ��� �����xs�C�C/�.C/��rv�PathLikerf�os.stat_resultr!�intc��t|���}t|||���}|�|j|��rt |j��S|S)Nrd)r!rf)rr �is_not_modifiedrr)rrvrfrPr!�request_headersrYs rrrzStaticFiles.file_response�sZ��"��.�.�.��� �{�P[�\�\�\�� � � �� 0�/� B� B� 9�&�x�'7�8�8� 8��r c��nK�|j�dS tj�tj|j���d{V��}n&#t $rtd|j�d����wxYwt j|j ��s1t j |j ��std|j�d����dSdS)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. NzStaticFiles directory 'z' does not exist.zStaticFiles path 'z' is not a directory.) r,rgrhrir;rorr>rsrq�S_ISLNK)rrfs rrVzStaticFiles.check_config�s����� �>� !� �F� \� %�� 8� 8���$�.� Q� Q�Q�Q�Q�Q�Q�Q�K�K�� � \� \� \��Z���Z�Z�Z�[�[� [� \����� �[�0�1�1� [�T�\�+�BU�5V�5V� [��Y�D�N�Y�Y�Y�Z�Z� Z� [� [� [� [s �5A�#A&�response_headersrr�c� � |d}|d}|d�|�d��D��vrdSn#t$rYnwxYw t|d��}t|d��}|� |�||krdSn#t$rYnwxYwd S) z� Given the request and response headers, return `True` if an HTTP "Not Modified" response could be returned instead. z if-none-matchrc�8�g|]}|�d����S)z W/)�strip)r�tags r� <listcomp>z/StaticFiles.is_not_modified.<locals>.<listcomp>�s$��M�M�M�S�� � �%�(�(�M�M�Mr �,Tzif-modified-sincez last-modifiedNF)r^�KeyErrorr)rr�r�� if_none_matchr�if_modified_since� last_modifieds rr�zStaticFiles.is_not_modified�s���  �+�O�<�M�#�F�+�D��M�M�M�4G�4G��4L�4L�M�M�M�M�M��t�N��� � � � �D� ���� � )�/�:M�*N� O� O� �%�&6��&G�H�H�M� �,��1J�O`�dq�Oq�Oq��t���� � � � �D� �����us!�16� A�A�4A>�> B � B ) r,r1r-r2r.r3r/r3r0r3r4r5)NN)r,r1r-r2r4r?)rPr rQr rRrr4r5)rPr r4r[)r<r[rPr r4r )r<r[r4ry)r�) rvr�rfr�rPr r!r�r4r )r4r5)r�rr�rr4r3) r&r'r(r#r8rZrWrXrjrrrVr�rr rr+r+'s ������&*�7;���$�J�J�J�J�J�J�(&*�7;������: -� -� -� -�F�F�F�F�(-�(-�(-�(-�T����,� � � � � �[�[�[�[� �����r r+) � __future__rrm�importlib.utilrEr;ro�typing� email.utilsrrg�anyio.to_thread�starlette._utilsr�starlette.datastructuresrr�starlette.exceptionsr�starlette.responsesr r r �starlette.typesr r r�Unionr[r�rr+rr r�<module>r�s^��"�"�"�"�"�"� � � � ����� � � � � � � � � � � � �!�!�!�!�!�!� � � � �����+�+�+�+�+�+�1�1�1�1�1�1�1�1�.�.�.�.�.�.�H�H�H�H�H�H�H�H�H�H�0�0�0�0�0�0�0�0�0�0� �<��/�/� 0�� � � � � �(� � � �"t�t�t�t�t�t�t�t�t�tr
Memory