U
    dm                     @   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-HeaderszGx-requested-with,access-control-allow-origin,authorization,content-typezAccess-Control-Allow-Methodsz' PUT, DELETE, OPTIONS, POST, GET, PATCH)
set_headerself r   9/tmp/pip-unpacked-wheel-3pokl8eb/flower/views/__init__.pyset_default_headers   s    zBaseHandler.set_default_headersc                 O   s   |  d |   d S )N   )
set_statusfinish)r   argskwargsr   r   r   options   s    
zBaseHandler.optionsc                    sf   | j j}tttj}ttdd |t| @ r8t	|
| |j
|jd tt| j|| 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AssertionErrorupdater   superr   render)r   r   r   Zapp_optionsZ	functions	__class__r   r   r$      s    "
zBaseHandler.renderc                 K   s  |dkrFd}d|k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|k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}|r|| jjdd}z<| \}}t| 	 }|dksL||krXt
jdW n  tk
rz   t
jdY nX | 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/   r0   r1   
ValueErrorauthZget_secure_cookie
isinstancer6   rematch)r   r;   auth_headerbasiccredentialsr:   r   r   r   get_current_userB   s&    



zBaseHandler.get_current_userTNc              	      s   t t| |||}|r.t|tr.tj|}|d k	rz"|tkrNt	t|}n||}W nH t
tfk
r   |d kr|d kr| Y S tjdd||jf Y nX |S )Ni  z"Invalid argument '%s' of type '%s')r#   r   get_argumentrD   r6   r/   escapeZxhtml_escapeboolr   rB   	TypeErrorr0   r1   __name__)r   namedefaultstriptypeargr%   r   r   rK   Z   s&     
zBaseHandler.get_argumentc                 C   s   | j jS )z return Celery application object)r   cappr   r   r   r   rU   m   s    zBaseHandler.cappc                 C   s@   | j jj}|r<z|t|}W n   td|j Y nX |S )NzFailed to format '%s' task)r   r   format_taskcopylogger	exceptionuuid)r   ZtaskZcustom_format_taskr   r   r   rV   r   s    
zBaseHandler.format_taskc                 C   sB   t g }| jj D ](\}}|dg D ]}||d  q(q|S )NZactive_queuesrP   )r   r   workersitemsr>   add)r   Zqueues_infoqr   r   r   get_active_queue_names{   s
    z"BaseHandler.get_active_queue_names)rO   
__module____qualname__r   r   r$   r8   rJ   rK   propertyrU   rV   ra   __classcell__r   r   r%   r   r      s   
	r   )rE   r   r3   rW   loggingdistutils.utilr   base64r   r/   utilsr   r   r   	getLoggerrO   rX   r0   ZRequestHandlerr   r   r   r   r   <module>   s   
