
    g                        d dl mZ d dlmZ d dlZd dlmZ d dlm	Z	m
Z
 d dlmZmZ d dlmZ  ee      Z G d d	ej$                  j&                        Zy)
    )annotations)quoteN)
get_logger)MediaFileKindMediaFileStorageError)MemoryMediaFileStorageget_extension_for_mimetype)allow_cross_origin_requestsc                      e Zd ZU ded<   edd       ZddZddZddZddZ	ddZ
edd	       Ze	 d	 	 	 	 	 dd       Zy
)MediaFileHandlerr   _storagec                    || _         y)z{Set the MemoryMediaFileStorage object used by instances of this
        handler. Must be called on server startup.
        N)r   )clsstorages     \/var/www/openai/venv/lib/python3.12/site-packages/streamlit/web/server/media_file_handler.pyinitialize_storagez#MediaFileHandler.initialize_storage#   s         c                >    t               r| j                  dd       y y )NzAccess-Control-Allow-Origin*)r
   
set_headerselfs    r   set_default_headersz$MediaFileHandler.set_default_headers-   s    &(OO93? )r   c                \   | j                   j                  |      }|rr|j                  t        j                  k(  rT|j
                  }|sdt        |j                         }	 |j                  d       d| d}| j                  dd|        yyy# t        $ r dt        |       }Y 1w xY w)	a  Add Content-Disposition header for downloadable files.

        Set header value to "attachment" indicating that file should be saved
        locally instead of displaying inline in browser.

        We also set filename to specify the filename for downloaded files.
        Used for serving downloadable files, like files stored via the
        `st.download_button` widget.
        streamlit_downloadlatin1z
filename=""zfilename*=utf-8''zContent-Dispositionzattachment; N)r   get_filekindr   DOWNLOADABLEfilenamer	   mimetypeencodeUnicodeEncodeErrorr   r   )r   path
media_filer!   	file_exprs        r   set_extra_headersz"MediaFileHandler.set_extra_headers1   s     ]]++D1
*//]-G-GG!**H/0J:K^K^0_/`aB )(
!4	 OO1\)3MN! H: & B 0h/@A	Bs   "B B+*B+c                    	 | j                   j                  |       |S # t        $ r7 t        j	                  d|       t
        j                  j                  dd      w xY w)N!MediaFileHandler: Missing file %si  z	not found)r   r   r   _LOGGERerrortornadoweb	HTTPError)r   rootabsolute_paths      r   validate_absolute_pathz'MediaFileHandler.validate_absolute_pathV   sX    	:MM""=1
 	 % 	:MM=}M++''[99	:s
    A Ac                n    | j                   }|y| j                  j                  |      }|j                  S )Nr   )r1   r   r   content_size)r   abspathr&   s      r   get_content_sizez!MediaFileHandler.get_content_size_   s5    $$?]]++G4
&&&r   c                     y N r   s    r   get_modified_timez"MediaFileHandler.get_modified_timeg   s     r   c                    |S r8   r9   )r   r0   r%   s      r   get_absolute_pathz"MediaFileHandler.get_absolute_pathl   s	     r   Nc                f   t         j                  d|       	 | j                  j                  |      }t         j                  d|j                  |       |||j                  S |d}|t        |j                        }|j                  || S # t        $ r t         j                  d|       Y y w xY w)NzMediaFileHandler: GET %sr*   z$MediaFileHandler: Sending %s file %sr   )	r+   debugr   r   	Exceptionr,   r"   contentlen)r   r5   startendr&   s        r   get_contentzMediaFileHandler.get_contentr   s     	0':	..w7J
 	2J4G4G	

 =S[%%%=E;j(()C !!%,,%  	MM=wG	s   B B0/B0)r   r   returnNone)rE   rF   )r%   strrE   rF   )r0   rG   r1   rG   rE   rG   )rE   int)r0   rG   r%   rG   rE   rG   )NN)r5   rG   rB   
int | NonerC   rI   )__name__
__module____qualname____annotations__classmethodr   r   r(   r2   r6   r:   r<   rD   r9   r   r   r   r       sy    $$ @OJ'
  
 GK--",-:D- -r   r   )
__future__r   urllib.parser   tornado.webr-   streamlit.loggerr   $streamlit.runtime.media_file_storager   r   +streamlit.runtime.memory_media_file_storager   r	   streamlit.web.serverr
   rJ   r+   r.   StaticFileHandlerr   r9   r   r   <module>rW      sB    #   ' U =
X
m-w{{44 m-r   