o
    ,&]i                     @  s   U d dl mZ d dlmZmZmZ d dlZd dlZ	d dl
mZ d dlmZmZ er/d dlmZ eeZded< G d	d
 d
ejjZdS )    )annotations)TYPE_CHECKINGFinalcastN)
get_logger)build_safe_abspathguess_content_type)BaseComponentRegistryr   _LOGGERc                   @  sZ   e Zd ZdddZdd	d
ZdddZdddZdddZedddZ	edddZ
dS )ComponentRequestHandlerregistryr	   returnNonec                 C  s
   || _ d S )N)	_registry)selfr    r   l/var/www/html/IGF-ODF-V3/venv/lib/python3.10/site-packages/streamlit/web/server/component_request_handler.py
initialize#   s   
z"ComponentRequestHandler.initializepathstrc           
      C  s$  | d}|d }| j|}|d u r| d | d d S d|dd  }t||}|d u r=| d | d d S zt|d}| }W d    n1 sRw   Y  W n$ t	y|   |
d	d

dd
}	td|	 | d | d Y d S w | | | d| | | | d S )N/r   z	not foundi     	forbiddeni  rb
 z*ComponentRequestHandler: GET %s read errorz
read errorzContent-Type)splitr   get_component_pathwrite
set_statusjoinr   openreadOSErrorreplacer
   	exception
set_headerget_content_typeset_extra_headers)
r   r   partscomponent_namecomponent_rootfilenameabspathfilecontentssanitized_abspathr   r   r   get&   s<   









	zComponentRequestHandler.getc                 C  s:   t |dk}|s|dr| dd dS | dd dS )zDisable cache for HTML files.

        Other assets like JS and CSS are suffixed with their hash, so they can
        be cached indefinitely.
        r   z.htmlzCache-Controlzno-cachepublicN)lenendswithr'   )r   r   is_index_urlr   r   r   r)   G   s   z)ComponentRequestHandler.set_extra_headersc                 C  sV   t jjj r| dd d S t jjj| jj	d }r)| dt
d| d S d S )NzAccess-Control-Allow-Origin*Originr   )	streamlitwebserverroutesallow_all_cross_origin_requestsr'   is_allowed_originrequestheadersr2   r   )r   originr   r   r   set_default_headersT   s   
z+ComponentRequestHandler.set_default_headersc                 C  s   |  d |   dS )z+/OPTIONS handler for preflight CORS checks.   N)r    finish)r   r   r   r   options\   s   
zComponentRequestHandler.optionsr.   c                 C  s   t | S )zuReturns the ``Content-Type`` header to be used for this request.
        From tornado.web.StaticFileHandler.
        )r   )r.   r   r   r   r(   a   s   z(ComponentRequestHandler.get_content_typefile_idc                 C  s
   d|  S )z6Return the URL for a component file with the given ID.zcomponents/r   )rF   r   r   r   get_urlh   s   
zComponentRequestHandler.get_urlN)r   r	   r   r   )r   r   r   r   )r   r   )r.   r   r   r   )rF   r   r   r   )__name__
__module____qualname__r   r2   r)   rB   rE   staticmethodr(   rG   r   r   r   r   r   "   s    


!

r   )
__future__r   typingr   r   r   tornado.webtornadostreamlit.web.server.routesr9   streamlit.loggerr   )streamlit.web.server.component_file_utilsr   r   2streamlit.components.types.base_component_registryr	   rH   r
   __annotations__r:   RequestHandlerr   r   r   r   r   <module>   s   