U
    dJ                     @   s8  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
 d dl	mZmZ d dlmZ d dlmZ dd	lmZ dd
lmZ ddlmZmZ ddl
mZmZ eeZdZejeddidejddej dej!dd Z"dd Z#dd Z$dd Z%dd Z&dd Z'd d! Z(d"d# Z)d$d% Z*dS )&    N)pformat)NullHandler)options)parse_command_lineparse_config_file)enable_pretty_logging)CeleryCommand   )Flower)settings)abs_pathprepend_url)DEFAULT_CONFIG_FILEdefault_optionsZFLOWER_Zignore_unknown_optionsT)clsZcontext_settingstornado_argv)nargstypec              	   C   s   t | | t  ttjd | t  t  | jj}t	f |t
dt}t|j dd }ttj| t|dtk z|  W n ttfk
r   Y nX dS )zAWeb based tool for monitoring and administrating Celery clusters.r   )Zcappr   c                 S   s   t d td d S )NzSIGTERM detected, shutting downr   )loggerinfosysexit)signalframe r   2/tmp/pip-unpacked-wheel-3pokl8eb/flower/command.pysigterm_handler.   s    
zflower.<locals>.sigterm_handlerssl_optionsN)-warn_about_celery_args_used_in_flower_commandapply_env_optionsapply_optionsr   argvextract_settingssetup_loggingobjappr
   r   r   atexitregisterstopr   SIGTERMprint_bannerstartKeyboardInterrupt
SystemExit)ctxr   r&   flowerr   r   r   r   r0      s    
r0   c               	      s   t ttj} | D ]}|tdd }tj| }ztj|  W n& t	k
rd   tj|dd  Y nX  j
r fdd|dD }n
 |}tt|| qdS )	z2apply options passed through environment variables r	   _-c                    s   g | ]}  |qS r   )r   ).0ioptionr   r   
<listcomp>E   s     z%apply_env_options.<locals>.<listcomp>,N)filteris_flower_envvarosenvironreplaceENV_VAR_PREFIXlowerr   _optionsKeyErrormultiplesplitr   setattr)Zenv_optionsZenv_var_namenamevaluer   r6   r   r    :   s    

r    c                 C   sr   t tt|}t| g|  z(ttjtj	dd t| g|  W n( t
k
rl   tjtj	tkrh Y nX dS )z3apply options passed through the configuration fileF)finalN)listr:   is_flower_optionr   r   r<   pathabspathr   confIOErrorbasenamer   )Z	prog_namer"   r   r   r   r!   K   s    r!   c                 C   s^   dd | j jjD }g }|D ]&}|d\}}}||kr|| q|rZtd| d d S )Nc                 S   s   g | ]}|j D ]}|qqS r   )opts)r4   paramr7   r   r   r   r8   Y   s       zAwarn_about_celery_args_used_in_flower_command.<locals>.<listcomp>=zTYou have incorrectly specified the following celery arguments after flower command: zv. Please specify them after celery command instead following this template: celery [celery args] flower [flower args].)parentcommandparams	partitionappendr   warning)r/   Zflower_argsZcelery_optionsZincorrectly_used_argsargZarg_namer2   r   r   r   r   X   s    
r   c                   C   s@   t jrt jdkrdt _t  ntdt  dtd_d S )Nr   debugztornado.accessF)r   rZ   loggingr   	getLogger
addHandlerr   	propagater   r   r   r   r$   j   s
    r$   c                  C   s   t jtd< t jrt jtd< t jr>dD ]} tt|  t jt| < q$t jr~t jpTtj	
dt jpdtj	
dt jpttj	
ddtd< t jrt jrttt jtt jd	td
< t jrtt jtd
 d< d S )NrZ   cookie_secret)Z	login_urlZstatic_url_prefixZFLOWER_OAUTH2_KEYZFLOWER_OAUTH2_SECRETZFLOWER_OAUTH2_REDIRECT_URI)keysecretZredirect_uriZoauth)certfilekeyfiler   ca_certs)r   rZ   r   r_   
url_prefixr   authZ
oauth2_keyr<   r=   getZoauth2_secretZoauth2_redirect_urirb   rc   dictr   rd   rF   r   r   r   r#   s   s"    




r#   c                 C   s,   |  dd\}}}|dd}tt|S )Nr3   rR   r2   )lstriprV   r>   hasattrr   )rY   rF   r2   r   r   r   rJ      s    rJ   c                 C   s"   |  to | ttd   tkS )N)
startswithr?   lenr@   r   ri   r   r   r   r;      s    
r;   c                 C   s   t jsDt jrdt j d}nd}td|r.dndt jp8dt j| ntdt j td|    tdt	t
| j  td	t	t d S )
N/r1   zVisit me at http%s://%s:%s%ss	localhostz!Visit me via unix socket file: %sz
Broker: %szRegistered tasks: 
%szSettings: %s)r   Zunix_socketre   r   r   addressport
connectionas_urir   sortedZtaskskeysrZ   r   )r&   sslZ
prefix_strr   r   r   r+      s$     
 r+   )+r<   r   r'   r   r[   pprintr   r   ZclickZtornado.optionsr   r   r   Ztornado.logr   Zcelery.bin.baser   r&   r
   urlsr   utilsr   r   r   r   r\   __name__r   r?   rT   argumentZUNPROCESSEDZpass_contextr0   r    r!   r   r$   r#   rJ   r;   r+   r   r   r   r   <module>   sB   
 	