U
    d_!                     @   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	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 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	j,Z-e( Z.e) Z/e* Z0e+ Z1e- Z2e' Z3dS )(z Click customizations for Celery.    N)OrderedDictupdate_wrapper)pformat)	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-mu1yl971/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"   /   s    zCLIContext.ERRORNc                 K   s   | j r
|S tj|f|S d S N)r   clickr    r   messager   r   r   r   r    3   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+   9   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*   @   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   errorG   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   prettyO   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>a   s    z)CLIContext.pretty_list.<locals>.<genexpr>)joinr   r<   r   r!   r   r4   ^   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 )Nr.      r/   r-   )r   r
   r1   r=   KeyErrorr"   rF   r   r   r   r6   e   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<-r@   Tr   rA   rI   )r   r    r*   )r   	directiontitlebodyZ	show_bodyZdirstrr   r   r   say_chatn   s    "zCLIContext.say_chat)F)N)N)N)N)rI   F)__name__
__module____qualname____doc__r   r   r   r"   r    r+   r*   r-   r=   r4   r6   rM   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)rB   or   r   r   
<listcomp>|   s     z:handle_preload_options.<locals>.caller.<locals>.<listcomp>Zpreloadc                    s   i | ]}| | qS r   r   )rB   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_optionsrY   frU   r   callery   s    
z&handle_preload_options.<locals>.callerr   )r^   r_   r   r]   r   handle_preload_optionsw   s    r`   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_contextrX   defaultsuperget_default)r   r\   r   r   	__class__r   r   re      s    zCeleryOption.get_defaultc                    s.   | dd| _| dd| _t j|| dS )zInitialize a Celery option.
help_groupNrb   )poprh   rb   rd   r   r   r   r   rf   r   r   r      s    zCeleryOption.__init__)rN   rO   rP   rQ   re   r   __classcell__r   r   rf   r   ra      s   ra   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.Nrh   Options)r   
get_paramsZget_help_recordhasattrrh   
setdefaultr;   appenditemssectionZwrite_dl)r   r\   	formatteroptsparamrvrR   Z
opts_groupr   r   r   format_options   s    
zCeleryCommand.format_optionsN)rN   rO   rP   rQ   rx   r   r   r   r   rl      s   rl   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 | jtddd | jtddd | jtddd | jtddd | jtddd | jtddd d	S )
z7Initialize a Celery command with common daemon options.)z-fz	--logfilezDaemonization Options)rh   )z	--pidfile)z--uid)z--gid)z--umask)z--executableN)rd   r   paramsrq   ra   rj   rf   r   r   r      s    zCeleryDaemonCommand.__init__)rN   rO   rP   rQ   r   rk   r   r   rf   r   ry      s   ry   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   valuerv   r\   r   r   r   convert   s    zCommaSeparatedList.convertNrN   rO   rP   rQ   rR   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)r2   r3   r7   loads
ValueErrorfailr;   r   r}   rv   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)r2   r5   r7   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}   rv   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)rd   r   r!   rf   r   r   r     s    zLogLevel.__init__c                    s0   t |tjr|S | }t |||}t|S r#   )r2   numbersIntegralupperrd   r~   r   r|   rf   r   r   r~     s
    zLogLevel.convert)rN   rO   rP   rQ   r   r~   rk   r   r   rf   r   r   
  s   r   )4rQ   r7   r   collectionsr   	functoolsr   pprintr   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   ImportErrorr9   r:   r   r`   Optionra   Commandrl   ry   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>   sP   
V	