o
    wvXjxY  ã                   @   s   d Z ddlmZmZmZ ddlZddlZ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mZ ddlmZmZmZmZ ddlmZmZ dd	lmZmZmZmZmZm Z m!Z!m"Z" dd
l#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)m*Z*m+Z+ ddl,m-Z- ddl.m/Z/m0Z0 ddl1m2Z2 zddl3m4Z4 W n e5yŸ   dZ4Y nw ze6Z7W n	 e8y­   Y nw dZ9eefD ]	Z:e ;de:d¡ q´e
j<dk rÅe5Z=dZ>dZ?dZ@e	 Ad¡ZBe	 Ad¡ZCe	 Ad¡ZDdd„ ZEd)dd„ZFdd„ ZGeG dd „ d eHƒƒZIG d!d"„ d"eIƒZJG d#d$„ d$eKƒZLG d%d&„ d&eKƒZMd*d'd(„ZNdS )+zBase command-line interface.é    )Úabsolute_importÚprint_functionÚunicode_literalsN)Údefaultdict)Úheappush)Úpformat)ÚVERSION_BANNERÚCeleryÚmaybe_patch_concurrencyÚsignals)ÚCDeprecationWarningÚCPendingDeprecationWarning)ÚPY2ÚgetfullargspecÚitemsÚlong_tÚpython_2_unicode_compatibleÚstringÚstring_tÚtext_t)Ú
EX_FAILUREÚEX_OKÚEX_USAGEÚisatty)ÚimportsÚtermÚtext)Ú
dictfilter)Úhost_formatÚnode_format©ÚBunch)ÚOption)ÚErrorÚ
UsageErrorÚ
ExtensionsÚCommandr"   Údaemon_optionsÚonce)é   é   z7
Unrecognized command-line arguments: {0}

Try --help?
zB
Unable to load celery application.
The module {0} was not found.
z(
Unable to load celery application.
{0}
z.+?(--.+?)(?:\s|,|$)z:\w+:`(.+?)`z^\s*\.\. .+?::.+$c                    s    t t ƒ d�‰‡ ‡‡fdd„}|S )N)Úvaluesc                    s   ˆ ˆd | ˆƒ t ˆjˆjƒS ©N)Úgetattrr+   Údest)Úvalue©ÚcallbackÚoptionÚparser© úL/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/bin/base.pyÚ_on_argK   s   z+_optparse_callback_to_type.<locals>._on_argr    )r2   r1   r6   r4   r0   r5   Ú_optparse_callback_to_typeH   s   r7   c                 C   s¤   |st ttttd dœn|}|jrt||jƒ|_|jdkrd |_|jdkr,|j	d u r,d|_	| j
|j|j i t|j| |j|j¡|j|j|j|j|j|j	dœƒ¤Ž d S )N)r   ÚintÚlongÚfloatÚcomplexÚchoicer1   Ú
store_trueF)ÚactionÚtyper.   ÚnargsÚchoicesÚhelpÚmetavarÚdefault)r   r8   r   r:   r;   r1   r7   r?   r>   rD   Úadd_argumentÚ
_long_optsÚ_short_optsr   Úgetr.   r@   rA   rB   rC   )r3   ÚoptÚtypemapr4   r4   r5   Ú_add_optparse_argumentQ   s>   úúú

ÿø
þrK   c                 C   s.   |pdD ]}t |ƒr|| ƒ qt| |ƒ qd S )Nr4   )ÚcallablerK   )r3   Úoptionsr2   r4   r4   r5   Ú_add_compat_optionso   s
   
ürN   c                       s.   e Zd ZdZeZd‡ fdd„	Zdd„ Z‡  ZS )r#   zException raised by commands.Nc                    s0   || _ |d ur	|n| j| _tt| ƒ ||¡ d S r,   )ÚreasonÚstatusÚsuperr#   Ú__init__)ÚselfrO   rP   ©Ú	__class__r4   r5   rR   }   s   zError.__init__c                 C   ó   | j S r,   )rO   ©rS   r4   r4   r5   Ú__str__‚   s   zError.__str__r,   )	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   rP   rR   rX   Ú__classcell__r4   r4   rT   r5   r#   w   s
    r#   c                   @   s   e Zd ZdZeZdS )r$   z)Exception raised for malformed arguments.N)rY   rZ   r[   r\   r   rP   r4   r4   r4   r5   r$   †   s    r$   c                   @   s(   e Zd ZdZdd„ Zdd„ Zdd„ ZdS )	r%   z-Loads extensions from setuptools entrypoints.c                 C   s   g | _ || _|| _d S r,   )ÚnamesÚ	namespaceÚregister)rS   r_   r`   r4   r4   r5   rR   �   s   
zExtensions.__init__c                 C   s   t | j|ƒ | j||d� d S )N)Úname)r   r^   r`   )rS   Úclsra   r4   r4   r5   Úadd”   s   zExtensions.addc                 C   s(   t  | j¡D ]
\}}|  ||¡ q| jS r,   )r   Úload_extension_classesr_   rc   r^   )rS   ra   rb   r4   r4   r5   Úload˜   s   zExtensions.loadN)rY   rZ   r[   r\   rR   rc   re   r4   r4   r4   r5   r%   Œ   s
    r%   c                   @   sH  e Zd ZdZeZeZejZdZ	e
ZdZdZdZdZdZdZdZdZdZdZdZdZdZ			dsdd	„Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdtdd„Zdudd„Z dvdd„Z!dudd„Z"dd„ Z#dd „ Z$d!d"„ Z%d#d$„ Z&d%d&„ Z'd'd(„ Z(d)d*„ Z)dud+d,„Z*dud-d.„Z+d/d0„ Z,d1d2„ Z-d3d4„ Z.dud5d6„Z/e0fd7d8„Z1d9d:„ Z2dud;d<„Z3dud=d>„Z4d?d@„ Z5dAdB„ Z6dCdD„ Z7dEdF„ Z8dGdH„ Z9dIdJ„ Z:dKdL„ Z;e<j=fdMdN„Z>e>Z?dOdP„ Z@dQdR„ ZAdSdT„ ZBdUdV„ ZCdWdX„ ZDdYdZ„ ZEd[d\„ ZFd]d^„ ZGd_d`„ ZHdadb„ ZIdcdd„ ZJdedf„ ZKdgdh„ ZLdidj„ ZMdwdkdl„ZNeOdmdn„ ƒZPePjQdodn„ ƒZPeOdpdq„ ƒZReRjQdrdq„ ƒZRdS )xr&   zÅBase class for command-line applications.

    Arguments:
        app (Celery): The app to use.
        get_app (Callable): Fucntion returning the current app
            when no app provided.
    Ú TNFÚceleryÚargsc	           	      C   sl   || _ |p| j| _|ptj| _|ptj| _d | _|| _|| _| j	s(|  
| j¡| _	|r-|| _|r4|| _d S d S r,   )ÚappÚ_get_default_appÚget_appÚsysÚstdoutÚstderrÚ_coloredÚ	_no_colorÚquietÚdescriptionÚ_strip_restructeredtextr\   Úon_errorÚon_usage_error)	rS   ri   rk   Úno_colorrm   rn   rq   rt   ru   r4   r4   r5   rR   Ø   s   
ÿzCommand.__init__c                 O   s   t dƒ‚)Nzsubclass responsibility)ÚNotImplementedError)rS   rh   rM   r4   r4   r5   Úruné   s   zCommand.runc                 C   s   |   | j d |¡¡¡ d S )Nz
Error: {0})ÚerrorÚcoloredÚredÚformat©rS   Úexcr4   r4   r5   rt   ì   s   zCommand.on_errorc                 C   s   |   |¡ d S r,   )Úhandle_errorr}   r4   r4   r5   ru   ñ   s   zCommand.on_usage_errorc                 C   ó   d S r,   r4   rW   r4   r4   r5   Úon_concurrency_setupö   ó   zCommand.on_concurrency_setupc              
   O   s¢   t  ¡  |  |¡ z| j|i |¤Ž}|d ur|W S tW S  | jy6 } z|  |¡ |jW  Y d }~S d }~w | jyP } z|  	|¡ |jW  Y d }~S d }~ww r,   )
ÚrandomÚseedÚverify_argsrx   r   r$   ru   rP   r#   rt   )rS   rh   ÚkwargsÚretr~   r4   r4   r5   Ú__call__ù   s   

€
€þzCommand.__call__r   c                 C   s‚   t | jƒ}|jr|jd dkrdn|}|j||jrt|jƒ nd … }|t|ƒd … }|r?|  d t t|ƒd¡d 	|¡¡¡‚d S )Nr   rS   é   zMissing required {0}: {1}Úargumentú, )
r   rx   rh   ÚdefaultsÚlenr$   r|   r   Ú	pluralizeÚjoin)rS   ÚgivenÚ_indexÚSÚrequiredÚmissingr4   r4   r5   r…     s   
 þÿzCommand.verify_argsc              
   C   sü   |du r	t tjƒ}|  |¡ |  ¡  |  |¡ z|  |¡}W nK tyG } ztr0|j	 
dd¡}n|j}|  t |¡¡ tW  Y d}~S d}~w tyi } z|jd  ¡ }|  t |¡¡ tW  Y d}~S d}~ww tj |d ¡| _|  | j|dd… ¡S )z¯Execute application from command-line.

        Arguments:
            argv (List[str]): The list of command-line arguments.
                Defaults to ``sys.argv``.
        NzNo module named rf   r   r‰   )Úlistrl   Úargvr
   r�   Úearly_versionÚsetup_app_from_commandlineÚModuleNotFoundErrorr   ÚmessageÚreplacera   rt   Ú#UNABLE_TO_LOAD_APP_MODULE_NOT_FOUNDr|   r   ÚAttributeErrorrh   Ú
capitalizeÚUNABLE_TO_LOAD_APP_APP_MISSINGÚosÚpathÚbasenameÚ	prog_nameÚhandle_argv)rS   r–   ÚeÚpackage_nameÚmsgr4   r4   r5   Úexecute_from_commandline  s,   


€€ýz Command.execute_from_commandlinec                 C   s    |   ||d u rtj|¡S ||¡S r,   )r¤   rl   r–   )rS   r£   r–   Úcommandr4   r4   r5   Úrun_from_argv3  s
   ÿÿzCommand.run_from_argvc                 C   s0   |pt j}|  |¡}|rt|g|¢R Ž  d S d S r,   )rl   r–   Úwith_pool_optionr
   )rS   r–   Úpool_optionr4   r4   r5   r
   7  s
   

ÿzCommand.maybe_patch_concurrencyc                 C   s   dj || d�S )Nz"%(prog)s {0} [options] {self.args}rW   ©r|   )rS   r©   r4   r4   r5   Úusage=  ó   zCommand.usagec                 C   r€   r,   r4   ©rS   r3   r4   r4   r5   Úadd_arguments@  r‚   zCommand.add_argumentsc                 C   rV   r,   )Úoption_listrW   r4   r4   r5   Úget_optionsC  ó   zCommand.get_optionsc                 C   sˆ   |  d¡}|jddd d� |jddd d� |jdd d� |jdd d� |jd	d d� |jd
d d� |jdddd d� |jdddd� d S )NzGlobal Optionsz-Az--app©rD   z-bz--brokerz--result-backendz--loaderz--configz	--workdirz
--no-colorz-Cr=   )r>   rD   z--quietz-q)r>   ©Úadd_argument_grouprE   )rS   r3   Úgroupr4   r4   r5   Úadd_preload_argumentsG  s   
ÿzCommand.add_preload_argumentsc                 C   s   |j dd| jd� d S )Nú	--versionÚversion)r>   r»   )rE   r»   r°   r4   r4   r5   Ú_add_version_argumentS  s   
ÿzCommand._add_version_argumentc                 C   r€   r,   r4   r°   r4   r4   r5   Úprepare_argumentsX  r‚   zCommand.prepare_argumentsc                 C   s   t |tƒrtj |¡S |S r,   )Ú
isinstancer   r    r¡   Ú
expanduser©rS   r/   r4   r4   r5   r¿   [  s   
zCommand.expanduserc                    sb   |}ˆ dur‡ fdd„|D ƒ}d  |¡}d | ¡ |¡}	 t|ƒ ¡ }||v r)|S ˆ dur0	 ˆ S q)a¯  Prompt user to choose from a tuple of string values.

        If a default is not specified the question will be repeated
        until the user gives a valid choice.

        Matching is case insensitive.

        Arguments:
            q (str): the question to ask (don't include questionark)
            choice (Tuple[str]): tuple of possible choices, must be lowercase.
            default (Any): Default value if any.
        Nc                    s$   g | ]}|ˆ kr|  ¡ n| ¡ ‘qS r4   )ÚupperÚlower)Ú.0Úcrµ   r4   r5   Ú
<listcomp>o  s    ÿzCommand.ask.<locals>.<listcomp>ú/z{0} ({1})? )r�   r|   rž   ÚinputrÂ   )rS   ÚqrA   rD   ÚschoicesÚpÚvalr4   rµ   r5   Úask`  s   
ÿ
úzCommand.askc                 C   s&   | j |  |||¡Ž \}}| |i |¤ŽS )ae  Parse arguments from argv and dispatch to :meth:`run`.

        Warning:
            Exits with an error message if :attr:`supports_args` is disabled
            and ``argv`` contains positional arguments.

        Arguments:
            prog_name (str): The program name (``argv[0]``).
            argv (List[str]): Rest of command-line arguments.
        )Úprepare_argsÚparse_options)rS   r£   r–   r©   rM   rh   r4   r4   r5   r¤   |  s   ÿzCommand.handle_argvc                    s>   |r‡ fdd„t |ƒD ƒ}‡ fdd„|D ƒ}ˆ  |¡ ||fS )Nc                    s&   i | ]\}}|  d ¡s|ˆ  |¡“qS )Ú_)Ú
startswithr¿   )rÃ   ÚkÚvrW   r4   r5   Ú
<dictcomp>�  s
    þ
ÿz(Command.prepare_args.<locals>.<dictcomp>c                    s   g | ]}ˆ   |¡‘qS r4   )r¿   ©rÃ   ÚargrW   r4   r5   rÅ   ‘  s    z(Command.prepare_args.<locals>.<listcomp>)r   Ú
check_args)rS   rM   rh   r4   rW   r5   rÍ   ‹  s   
þ
zCommand.prepare_argsc                 C   s.   | j s|r|  t d |¡¡t¡ d S d S d S )Nr‹   )Úsupports_argsÚdieÚARGV_DISABLEDr|   r�   r   ©rS   rh   r4   r4   r5   rÖ   •  s   
ÿzCommand.check_argsc                 C   s   | j || jd� d S )N)Úfh)Úoutrn   ©rS   Úsr4   r4   r5   ry   ™  s   zCommand.errorc                 C   s   t ||p| jd� d S )N©Úfile)Úprintrm   )rS   rÞ   rÛ   r4   r4   r5   rÜ   œ  s   zCommand.outc                 C   s   |   |¡ t |¡ d S r,   )ry   rl   Úexit)rS   r§   rP   r4   r4   r5   rØ   Ÿ  s   
zCommand.diec                 C   s*   d|v rt | j| jd� t d¡ d S d S )Nrº   rß   r   )rá   r»   rm   rl   râ   ©rS   r–   r4   r4   r5   r—   £  s   þzCommand.early_versionc                 C   s4   |   ||¡| _t| j |¡ƒ}|| | jd¡pg fS )zParse the available options.N)Úcreate_parserr3   ÚvarsÚ
parse_argsÚpopÚ	args_name)rS   r£   Ú	argumentsr©   rM   r4   r4   r5   rÎ   ¨  s   zCommand.parse_optionsc                 C   sš   |   |¡ dd¡}| j|||  | j¡tj|  | j¡d�}|  	|¡ |  
|¡ |  |¡ |  ||  ¡ ¡ |  || jjd ¡ | jrH|j| jdd� |  |¡S )Nz%progz%(prog)s)Úprogr®   ÚepilogÚformatter_classrr   ÚpreloadÚ*)r@   )r®   r›   ÚParserÚ_format_epilogrë   ÚargparseÚRawDescriptionHelpFormatterÚ_format_descriptionrr   r¼   r¹   r±   Úadd_compat_optionsr³   ri   Úuser_optionsr×   rE   rè   Úprepare_parser)rS   r£   r©   r®   r3   r4   r4   r5   rä   °  s    

û



zCommand.create_parserc                 C   s   |rd  |¡S dS )Nz
{0}

rf   r­   )rS   rë   r4   r4   r5   rð   Æ  s   
zCommand._format_epilogc                 C   s$   t  d¡j}t t t |¡|¡¡S )Nrê   )rñ   ÚHelpFormatterÚ_widthr   Úensure_newlinesÚfill_paragraphsÚdedent)rS   rr   Úwidthr4   r4   r5   ró   Ë  s   ÿzCommand._format_descriptionc                 C   s   t ||ƒ d S r,   )rN   )rS   r3   rM   r4   r4   r5   rô   Ð  r¯   zCommand.add_compat_optionsc                    s`   ‡ fdd„ˆ j tfD ƒ}|D ]}t|ƒD ]\}}|j| }|d ur,d |¡j|jd�|_qq|S )Nc                    s   g | ]	}|rˆ   |¡‘qS r4   )Ú	parse_doc)rÃ   ÚdocrW   r4   r5   rÅ   Ô  s    z*Command.prepare_parser.<locals>.<listcomp>ú rµ   )rþ   r\   r   Ú_option_string_actionsr�   r|   rD   rB   )rS   r3   Údocsrþ   Úlong_optrB   r2   r4   rW   r5   rö   Ó  s   
€ýzCommand.prepare_parserc                 C   sL  |   |¡}| d¡}|d ur|| _z|d | _W n	 ty!   Y nw | d¡}|r.t |¡ | d¡p;tj d¡p;| j}| d¡}|rH|tjd< |tj d¡pPdf}| d	d ¡}|r_|tjd
< | dd ¡}	|	rl|	tjd< | d¡}
|
rx|
tjd< | j	r™|r„|  
|¡| _n| jd u r�| j|d�| _| jr˜|  |¡}ntg d�| _|  |¡ |S )Nrq   rv   Úworkdirri   Ú
CELERY_APPÚloaderÚCELERY_LOADERrD   ÚbrokerÚCELERY_BROKER_URLÚresult_backendÚCELERY_RESULT_BACKENDÚconfigÚCELERY_CONFIG_MODULE)r  )Úfixups)Úparse_preload_optionsrH   rq   rv   ÚKeyErrorr    ÚchdirÚenvironri   Úrespects_app_optionÚfind_apprk   Úenable_config_from_cmdlineÚprocess_cmdline_configr	   Ú_handle_user_preload_options)rS   r–   Úpreload_optionsrq   r  ri   Úpreload_loaderr  r  r	  r  r4   r4   r5   r˜   Ü  sX   

ÿ



ÿþ

þ





€
z"Command.setup_app_from_commandlinec                 C   s@   t | jjd pdƒ}|r|  ||¡}tjj| | j|d� d S d S )Nrí   r4   )Úsenderri   rM   )Útupleri   rõ   Ú_parse_preload_optionsr   Úuser_preload_optionsÚsend)rS   r–   Úuser_preloadrõ   r4   r4   r5   r  	  s   
ÿþz$Command._handle_user_preload_optionsc                 C   s   ddl m} ||| jd�S )Nr   )r  )Úsymbol_by_name)Úcelery.app.utilsr  r  )rS   ri   r  r4   r4   r5   r    s   zCommand.find_appc                 C   s   t j||d�S )N)Úimp)r   r  )rS   ra   r!  r4   r4   r5   r    r¯   zCommand.symbol_by_namec                 C   sZ   z|  d¡}W n ty   | Y S w |d |… ||d d … }}| jj|| jd� |S )Nz--r‰   )r_   )ÚindexÚ
ValueErrorri   Úconfig_from_cmdliner_   )rS   r–   Úcargs_startÚcargsr4   r4   r5   r    s   ÿzCommand.process_cmdline_configc                 C   s   |   || jg¡S r,   )r  r¹   rÚ   r4   r4   r5   r  "  ó   zCommand.parse_preload_optionsc                 C   s8   dd„ |D ƒ}|   ¡ }|  ||¡ | |¡\}}t|ƒS )Nc                 S   s   g | ]}|d vr|‘qS ))z-hz--helpr4   rÔ   r4   r4   r5   rÅ   &  s    z2Command._parse_preload_options.<locals>.<listcomp>)rï   rô   Úparse_known_argsrå   )rS   rh   rM   r3   r_   rÏ   r4   r4   r5   r  %  s
   zCommand._parse_preload_optionsc                 C   s2   |j pg }|j|vr|||j< ||j  |¡ d S r,   )rD   r.   Úappend)rS   ÚaccrI   r/   rD   r4   r4   r5   Úadd_append_opt,  s   


zCommand.add_append_optc                 C   s�   t tƒd }}| ¡ D ]:}| d¡r(t |¡}|r!| ¡ d  ¡ }|s'J dƒ‚q|rE| d¡rEt |¡sE||  	t
 d| ¡ ¡ dd¡¡ q|S )Nz.. cmdoption::r   zmissing long optz    ú\1ú`rf   )r   r•   Ú
splitlinesrÐ   Úfind_long_optÚmatchÚgroupsÚstripÚfind_rst_declr)  Úfind_rst_refÚsubr›   )rS   rþ   rM   Ú	in_optionÚlineÚmr4   r4   r5   rý   4  s"   


ÿþ€zCommand.parse_docc                 C   s   d  dd„ |pd ¡ D ƒ¡S )NÚ
c                 s   s.   � | ]}t  |¡st d | dd¡¡V  qdS )r,  r-  rf   N)r3  r0  r4  r5  r›   )rÃ   r7  r4   r4   r5   Ú	<genexpr>D  s   € ý
ÿz2Command._strip_restructeredtext.<locals>.<genexpr>rf   )r�   r.  rÝ   r4   r4   r5   rs   C  s   

þzCommand._strip_restructeredtextc                 C   s   dS )a  Return tuple of ``(short_opts, long_opts)``.

        Returns only if the command
        supports a pool argument, and used to monkey patch eventlet/gevent
        environments as early as possible.

        Example:
              >>> has_pool_option = (['-P'], ['--pool'])
        Nr4   rã   r4   r4   r5   r«   J  s    zCommand.with_pool_optionc                 K   s   t ||fi |¤ŽS r,   )r   )rS   rÞ   ÚnodenameÚextrar4   r4   r5   r   U  s   zCommand.node_formatc                 K   s   t |fi |¤ŽS r,   )r   )rS   rÞ   r<  r4   r4   r5   r   X  r'  zCommand.host_formatc                 O   s   ddl m} |ƒ S )Nr   )Úget_current_app)Úcelery._stater=  )rS   rh   r†   r=  r4   r4   r5   rj   [  s   zCommand._get_default_appc                    s&   | j ‰ |sdS d ‡ fdd„|D ƒ¡S )Nz	- empty -r9  c                 3   s,   � | ]}t ˆ  ˆ  d ¡d |¡¡ƒV  qdS )rî   z {0}N)ÚstrÚresetÚwhiter|   )rÃ   Úitem©rÄ   r4   r5   r:  c  s   € 
ÿz&Command.pretty_list.<locals>.<genexpr>)rz   r�   )rS   Únr4   rC  r5   Úpretty_list_  s   ÿzCommand.pretty_listc                 C   sd   | j }z| d¡t |  |d ¡d d¡fW S  ty   Y nw | d¡t |  |d ¡d d¡fS )NÚOKÚokr‰   é   ÚERRORry   )rz   Úgreenr   ÚindentÚprettyr  r{   )rS   rD  rÄ   r4   r4   r5   Úpretty_dict_ok_errorg  s   ÿÿÿzCommand.pretty_dict_ok_errorc                 C   s^   | j }tt|ƒƒ}|| }|  |¡\}}|  d| |d¡| | jr*t |d¡¡ d S d¡ d S )Nz->z: rH  rf   )	rz   ÚnextÚiterrL  Úsay_chatÚcyanÚ
show_replyr   rK  )rS   ÚrepliesrÄ   ÚnodeÚreplyrP   Úpreplyr4   r4   r5   Úsay_remote_command_replyq  s   ÿÿz Command.say_remote_command_replyc                 C   s‚   t | j d¡ƒ}t|tƒr||  |¡fS t|tƒr0d|v s!d|v r&|  |¡S |tj	|ddd�fS t|t
ƒr;|t|ƒfS |t|ƒfS )NrF  rG  ry   TrH  )Ú	sort_keysrK  )r?  rz   rJ  r¾   r•   rE  ÚdictrM  ÚjsonÚdumpsr   r   r   )rS   rD  rF  r4   r4   r5   rL  y  s   



zCommand.prettyc                 C   sh   | j }|dkr| jrd S | j r| | |¡d¡pd}|  | ||¡¡ |r0| jr2|  |¡ d S d S d S )Nz<-rÿ   rf   )rz   rq   ÚboldrA  rÜ   r@  Ú	show_body)rS   Ú	directionÚtitleÚbodyrÄ   Údirstrr4   r4   r5   rP  †  s   
ÿzCommand.say_chatc                 C   s,   | j d u rtjt| jƒo| j d�| _ | j S )N)Úenabled)ro   r   rz   r   rm   rv   rW   r4   r4   r5   rz   �  s
   
ÿzCommand.coloredc                 C   s
   || _ d S r,   )ro   )rS   Úobjr4   r4   r5   rz   –  s   
c                 C   rV   r,   )rp   rW   r4   r4   r5   rv   š  r´   zCommand.no_colorc                 C   s$   || _ | jd ur| j  | j_d S d S r,   )rp   ro   rb  rÀ   r4   r4   r5   rv   ž  s   
ÿ)NNFNNFNN)r   r,   ©NN)rf   )SrY   rZ   r[   r\   r#   r$   rñ   ÚArgumentParserrï   rh   r   r»   r×   r²   rþ   r  r  r_   rë   rr   Úleafr]  rR  r£   rè   rR   rx   rt   ru   r�   rˆ   r…   r¨   rª   r
   r®   r±   r³   r¹   r¼   r½   r¿   rÌ   r¤   rÍ   rÖ   ry   rÜ   r   rØ   r—   rÎ   rä   rð   ró   rô   rö   r˜   r  r  r   Úimport_from_cwdr  Úget_cls_by_namer  r  r  r+  rý   rs   r«   r   r   rj   rE  rM  rW  rL  rP  Úpropertyrz   Úsetterrv   r4   r4   r4   r5   r&   ž   s¤    
þ


"






	-	

	


r&   c                 C   sp   |   d¡}|jdd|d�f |jd|d�f |jddd�f |jddd�f |jd	dd�f |jd
dd�f dS )z&Add daemon options to argparse parser.zDaemonization Optionsz-fz	--logfilerµ   z	--pidfilez--uidNz--gidz--umaskz--executabler¶   )r3   Údefault_pidfileÚdefault_logfiler¸   r4   r4   r5   r'   ¥  s   
r'   r,   rd  )Or\   Ú
__future__r   r   r   rñ   rZ  r    rƒ   Úrerl   ÚwarningsÚcollectionsr   Úheapqr   Úpprintr   rg   r   r	   r
   r   Úcelery.exceptionsr   r   Úcelery.fiver   r   r   r   r   r   r   r   Úcelery.platformsr   r   r   r   Úcelery.utilsr   r   r   Úcelery.utils.functionalr   Úcelery.utils.nodenamesr   r   Úcelery.utils.objectsr!   Úoptparser"   ÚImportErrorÚ	raw_inputrÇ   Ú	NameErrorÚ__all__ÚwarningÚsimplefilterÚversion_infor™   rÙ   rœ   rŸ   Úcompiler/  r4  r3  r7   rK   rN   Ú	Exceptionr#   r$   Úobjectr%   r&   r'   r4   r4   r4   r5   Ú<module>   sl   (ÿÿ




	    