a
    xd                     @   s~   d dl 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
mZmZmZ eeZG dd de	jjZdS )    N)	strtobool)	b64decode   )template	bugreportprepend_urlc                       sl   e Zd Zdd Zdd Z fddZdd Zd	d
 Zg ddf fdd	Ze	dd Z
dd Zdd Z  ZS )BaseHandlerc                 C   s(   |  dd |  dd |  dd d S )NzAccess-Control-Allow-Origin*zAccess-Control-Allow-Headerszx-requested-withzAccess-Control-Allow-Methodsz PUT, DELETE, OPTIONS)
set_headerself r   M/var/www/html/Ranjet/env/lib/python3.9/site-packages/flower/views/__init__.pyset_default_headers   s
    zBaseHandler.set_default_headersc                 C   s   |  d |   d S )N   )
set_statusfinishr   r   r   r   options   s    
zBaseHandler.optionsc                    sj   | j j}tttj}ttdd |t| @ r8J |	| |j	|j
d tt| j|i | d S )Nc                 S   s   | d S )Nr   r   )xr   r   r   <lambda>       z$BaseHandler.render.<locals>.<lambda>)
url_prefix)applicationr   inspect
getmembersr   
isfunctionsetmapkeysupdater   superr   render)r   argskwargsZapp_optionsZ	functions	__class__r   r   r!      s    "
zBaseHandler.renderc                 K   s  |dv rFd}d|v r6|d d t jjkr6|d d j}| jd|d n|dkrd}tj|d  D ]}||7 }q`| jd	| jjj	||t
 d
 n|dkr| | | dd | d nZd}d|v r|d d t jjkr|d d j}| dd | t| | | |   d S )N)i  i   exc_infor      z404.html)messagei  z
error.html)debugstatus_codeerror_tracer     zWWW-AuthenticatezBasic realm="flower"zAccess deniedzContent-Typez
text/plain)tornadoweb	HTTPErrorlog_messager!   	tracebackformat_exceptionr   r   r*   r   r   r
   r   writestr)r   r+   r#   r)   r,   liner   r   r   write_error$   s4    


zBaseHandler.write_errorc                 C   s   | j jj}|rz| jjdd}z<| \}}t| 	 }|dksL||vrXt
jdW n tyx   t
jdY n0 | j jjsdS | d}|rt|ts|	 }t| j jj|r|S d S )NAuthorizationr&   ZBasicr-   Tuser)r   r   
basic_authrequestheadersgetsplitr   encodedecoder.   r/   r0   
ValueErrorauthZget_secure_cookie
isinstancer5   rematch)r   r:   auth_headerbasiccredentialsr9   r   r   r   get_current_userA   s&    



zBaseHandler.get_current_userTNc              	      s   t t| |||}|r.t|tr.tj|}|d urz"|tu rNt	t|}n||}W nF t
tfy   |d u r|d u r| Y S tjdd||jf Y n0 |S )Ni  z"Invalid argument '%s' of type '%s')r    r   get_argumentrC   r5   r.   escapeZxhtml_escapeboolr   rA   	TypeErrorr/   r0   __name__)r   namedefaultstriptypeargr$   r   r   rJ   Y   s$    
zBaseHandler.get_argumentc                 C   s   | j jS )z return Celery application object)r   cappr   r   r   r   rT   l   s    zBaseHandler.cappc                 C   s@   | j jj}|r<z|t|}W n   td|j Y n0 |S )NzFailed to format '%s' task)r   r   format_taskcopylogger	exceptionuuid)r   ZtaskZcustom_format_taskr   r   r   rU   q   s    
zBaseHandler.format_taskc                 C   sB   t g }| jj D ](\}}|dg D ]}||d  q(q|S )NZactive_queuesrO   )r   r   workersitemsr=   add)r   Zqueues_infoqr   r   r   get_active_queue_namesz   s
    z"BaseHandler.get_active_queue_names)rN   
__module____qualname__r   r   r!   r7   rI   rJ   propertyrT   rU   r`   __classcell__r   r   r$   r   r      s   
	r   )rD   r   r2   rV   loggingdistutils.utilr   base64r   r.   utilsr   r   r   	getLoggerrN   rW   r/   ZRequestHandlerr   r   r   r   r   <module>   s   
