U
    bh#                     @   s  d Z ddlZddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 ddl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 ddlmZ z(ddlmZ ddlmZ ddlmZ W n$ e k
r   dd ZdZ!dZ"Y nX e Z!e Z"G dd dZ#dd Z$G dd dej%Z&G dd dej'Z(G dd de&Z)G dd de(Z*G dd  d eZ+G d!d" d"eZ,G d#d$ d$eZ-G d%d& d&eZ.G d'd( d(eZ/G d)d* d*ej0Z1e, Z2e- Z3e. Z4e/ Z5e1 Z6e+ Z7dS )+z Click customizations for Celery.    N)OrderedDictupdate_wrapper)pformat)Any)Context	ParamType)cached_property)get_current_app)user_preload_options)text)mlevel)maybe_iso8601)	highlight)Terminal256Formatter)PythonLexerc                 O   s   | S )z2Place holder function in case pygments is missing. )sargskwargsr   r   3/tmp/pip-unpacked-wheel-kcem4wq5/celery/bin/base.pyr      s    r   c                   @   s|   e Zd ZdZdddZedd Zedd Zdd
dZdddZ	dddZ
dddZdd Zdd Zdd Zd ddZd	S )!
CLIContextzContext Object for the CLI.Fc                 C   s"   |pt  | _|| _|| _|| _dS )zInitialize the CLI context.N)r
   appno_colorquietworkdir)selfr   r   r   r   r   r   r   __init__%   s    zCLIContext.__init__c                 C   s   | j ddddS )NOKZgreenTfgZboldstyler   r   r   r   r   ,   s    zCLIContext.OKc                 C   s   | j ddddS )NERRORZredTr   r!   r#   r   r   r   r$   0   s    zCLIContext.ERRORNc                 K   s   | j r
|S tj|f|S d S N)r   clickr"   r   messager   r   r   r   r"   4   s    zCLIContext.stylec                 K   s0   | j rd|d< tj|f| ntj|f| d S NFcolorr   r&   echosechor'   r   r   r   r-   :   s    zCLIContext.sechoc                 K   s0   | j rd|d< tj|f| ntj|f| d S r)   )r   r&   r,   r'   r   r   r   r,   A   s    zCLIContext.echoc                 K   s8   d|d< | j r&d|d< tj|f| ntj|f| d S )NTerrFr*   r+   r'   r   r   r   errorH   s
    zCLIContext.errorc                 C   s   t |tr| j| |fS t |trjd|ks4d|kr>| |S tj|ddd}| js`t	|t
t}| j|fS t |tr~| j|fS | jt|fS )Nokr/   T   )	sort_keysindent)
isinstancelistr   pretty_listdictpretty_dict_ok_errorjsondumpsr   r   LEXER	FORMATTERstrr   )r   nr   r   r   r   prettyP   s    





zCLIContext.prettyc                    s    |sdS d  fdd|D S )Nz	- empty -
c                 3   s&   | ]} j d dd d| V  qdS )*white)r     Nr!   ).0itemr#   r   r   	<genexpr>b   s    z)CLIContext.pretty_list.<locals>.<genexpr>)joinr   r>   r   r#   r   r6   _   s
    zCLIContext.pretty_listc                 C   sX   z"| j t| |d d dfW S  tk
r6   Y nX | jt| |d d dfS )Nr0      r1   r/   )r   r   r3   r?   KeyErrorr$   rH   r   r   r   r8   f   s    zCLIContext.pretty_dict_ok_error c                 C   s^   |dkr| j rd S | j  r0| j|ddd dp2d}| | d|  |rZ|rZ| | d S )Nz<-rB   Tr   rC   rK   )r   r"   r,   )r   	directiontitlebodyZ	show_bodyZdirstrr   r   r   say_chato   s    "zCLIContext.say_chat)F)N)N)N)N)rK   F)__name__
__module____qualname____doc__r   r	   r   r$   r"   r-   r,   r/   r?   r6   r8   rO   r   r   r   r   r   "   s   






	r   c                    s    fdd}t | S )z6Extract preload options and return a wrapped callable.c                    sV   | j j}dd |jdg D }|rF fdd|D }tj||d | f| S )Nc                 S   s   g | ]
}|j qS r   )name)rD   or   r   r   
<listcomp>}   s     z:handle_preload_options.<locals>.caller.<locals>.<listcomp>Zpreloadc                    s   i | ]}| | qS r   r   )rD   Zpreload_optionr   r   r   
<dictcomp>   s    z:handle_preload_options.<locals>.caller.<locals>.<dictcomp>)Zsenderr   options)objr   user_optionsgetr   send)ctxr   r   r   Zpreload_optionsr[   frW   r   callerz   s    
z&handle_preload_options.<locals>.callerr   )r`   ra   r   r_   r   handle_preload_optionsx   s    rb   c                       s,   e Zd ZdZ fddZ fddZ  ZS )CeleryOptionzCustomized option for Celery.c                    s(   | j r|j| j  | _t j|f||S r%   )default_value_from_contextrZ   defaultsuperget_default)r   r^   r   r   	__class__r   r   rg      s    zCeleryOption.get_defaultc                    s.   | dd| _| dd| _t j|| dS )zInitialize a Celery option.
help_groupNrd   )poprj   rd   rf   r   r   r   r   rh   r   r   r      s    zCeleryOption.__init__)rP   rQ   rR   rS   rg   r   __classcell__r   r   rh   r   rc      s   rc   c                   @   s   e Zd ZdZdd ZdS )CeleryCommandzCustomized command for Celery.c              
   C   s   t  }| |D ]R}||}|dk	rt|drP|jrP|t|jg | q|dg | q| D ](\}}|	| |
| W 5 Q R X qldS )z7Write all the options into the formatter if they exist.Nrj   Options)r   
get_paramsZget_help_recordhasattrrj   
setdefaultr=   appenditemssectionZwrite_dl)r   r^   	formatteroptsparamrvrT   Z
opts_groupr   r   r   format_options   s    
zCeleryCommand.format_optionsN)rP   rQ   rR   rS   rz   r   r   r   r   rn      s   rn   c                       s4   e Zd ZdZ fddZeeeedddZ  Z	S )DaemonOptionzCommon daemonization optionc                    s0   t  j|f|dd|d| jd| d S )Nrj   zDaemonization Optionscallback)rj   r|   )rf   r   rk   daemon_settingrl   rh   r   r   r      s    

zDaemonOption.__init__)r^   optvaluereturnc                 C   s&   |p$t |jjj|jj d| j dS )z
        Try to fetch daemonization option from applications settings.
        Use the daemon command name as prefix (eg. `worker` -> `worker_pidfile`)
        _N)getattrrZ   r   confcommandrT   )r   r^   r~   r   r   r   r   r}      s    zDaemonOption.daemon_setting)
rP   rQ   rR   rS   r   r   rc   r   r}   rm   r   r   rh   r   r{      s   r{   c                       s    e Zd ZdZ fddZ  ZS )CeleryDaemonCommandzDaemon commands.c                    s\   t  j|| | jtddddtdddtdddtd	d
dtdddtdddf dS )z7Initialize a Celery command with common daemon options.z	--logfilez-fz#Log destination; defaults to stderr)helpz	--pidfilez&PID file path; defaults to no PID filez--uidz Drops privileges to this user IDz--gidz!Drops privileges to this group IDz--umaskz,Create files and directories with this umaskz--executablez&Override path to the Python executableN)rf   r   paramsextendr{   rl   rh   r   r   r      s    




zCeleryDaemonCommand.__init__)rP   rQ   rR   rS   r   rm   r   r   rh   r   r      s   r   c                   @   s   e Zd ZdZdZdd ZdS )CommaSeparatedListzComma separated list argument.zcomma separated listc                 C   s
   t |S r%   )r   Zstr_to_listr   r   rx   r^   r   r   r   convert   s    zCommaSeparatedList.convertNrP   rQ   rR   rS   rT   r   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdd ZdS )	JsonArrayzJSON formatted array argument.z
json arrayc              
   C   sl   t |tr|S zt|}W n0 tk
rL } z| t| W 5 d }~X Y nX t |tsh| | d |S )Nz was not an array)r4   r5   r9   loads
ValueErrorfailr=   r   r   rx   r^   ver   r   r   r      s    
 
zJsonArray.convertNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdd ZdS )
JsonObjectzJSON formatted object argument.zjson objectc              
   C   sl   t |tr|S zt|}W n0 tk
rL } z| t| W 5 d }~X Y nX t |tsh| | d |S )Nz was not an object)r4   r7   r9   r   r   r   r=   r   r   r   r   r      s    
 
zJsonObject.convertNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdd ZdS )ISO8601DateTimezISO 8601 Date Time argument.z	iso-86091c              
   C   s@   z
t |W S  ttfk
r: } z| | W 5 d }~X Y nX d S r%   )r   	TypeErrorr   r   r   r   rx   r^   r   r   r   r   r     s    
zISO8601DateTime.convertNr   r   r   r   r   r      s   r   c                   @   s   e Zd ZdZdZdd ZdS )ISO8601DateTimeOrFloatz%ISO 8601 Date Time or float argument.ziso-86091 or floatc              
   C   sd   z
t |W S  ttfk
r"   Y nX z
t|W S  ttfk
r^ } z| | W 5 d }~X Y nX d S r%   )floatr   r   r   r   r   r   r   r   r     s    

zISO8601DateTimeOrFloat.convertNr   r   r   r   r   r     s   r   c                       s,   e Zd ZdZ fddZ fddZ  ZS )LogLevelzLog level option.c                    s   t  d dS )z:Initialize the log level option with the relevant choices.)DEBUGINFOWARNINGr$   CRITICALFATALN)rf   r   r#   rh   r   r   r      s    zLogLevel.__init__c                    s0   t |tjr|S | }t |||}t|S r%   )r4   numbersIntegralupperrf   r   r   r   rh   r   r   r   $  s
    zLogLevel.convert)rP   rQ   rR   rS   r   r   rm   r   r   rh   r   r     s   r   )8rS   r9   r   collectionsr   	functoolsr   pprintr   typingr   r&   r   r   Zkombu.utils.objectsr	   Zcelery._stater
   Zcelery.signalsr   Zcelery.utilsr   Zcelery.utils.logr   Zcelery.utils.timer   Zpygmentsr   Zpygments.formattersr   Zpygments.lexersr   ImportErrorr;   r<   r   rb   Optionrc   Commandrn   r{   r   r   r   r   r   r   ZChoicer   Z
JSON_ARRAYZJSON_OBJECTZISO8601ZISO8601_OR_FLOATZ	LOG_LEVELZCOMMA_SEPARATED_LISTr   r   r   r   <module>   sT   
V	