o
    wvXjz  ã                   @   sÄ   d Z ddlmZm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mZ ddlmZ ddlmZmZ dZeeƒZej d	¡Z			ddd„ZG dd„ deƒZddd„Zedkr`eƒ  dS dS )zÐProgram used to daemonize the worker.

Using :func:`os.execv` as forking and multiprocessing
leads to weird issues (it was a long time ago now, but it
could have something to do with the threading mutex bug)
é    )Úabsolute_importÚunicode_literalsN)Údaemon_options)Ú
EX_FAILUREÚdetached)Ú
get_logger)Údefault_nodenameÚnode_format)Údetached_celerydÚdetachÚ
C_FAKEFORKFc              
   C   sä   t |ƒ}t||ƒ}t||ƒ}trdn|}t|||||||dd��H z|
dur(|
} t | | g| ¡ W n, ty^   |	du rEddlm} |}	|	j	j
d||d� tjd	d
 | g| ¡dd� Y nw tW  d  ƒ S 1 skw   Y  dS )zDetach program by argv'.é   F)Úafter_forkersNr   )Úcurrent_appÚERROR)ÚhostnamezCan't exec %rú T)Úexc_info)r   r	   r   r   ÚosÚexecvÚ	ExceptionÚceleryr   ÚlogÚsetup_logging_subsystemÚloggerÚcriticalÚjoinr   )ÚpathÚargvÚlogfileÚpidfileÚuidÚgidÚumaskÚworkdirÚfakeÚappÚ
executabler   r   © r(   úV/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/bin/celeryd_detach.pyr      s0   

ÿÿ
ÿú$òr   c                   @   sv   e Zd ZdZdZejZdZe	j
Ze	j
Zg d¢Zddd„Zdd	„ Zd
d„ Zdd„ Zddd„Zdd„ Zdd„ Zdd„ ZdS )r
   z$Daemonize the celery worker process.z$%(prog)s [options] [celeryd options]zeDetaches Celery worker nodes.  See `celery worker --help` for the list of supported worker arguments.)z-mr   ÚworkerNc                 C   s
   || _ d S ©N©r&   )Úselfr&   r(   r(   r)   Ú__init__>   s   
zdetached_celeryd.__init__c                 C   s,   t j|| j| jd�}|  |¡ |  |¡ |S )N)ÚprogÚusageÚdescription)ÚargparseÚArgumentParserr0   r1   Ú_add_version_argumentÚadd_arguments)r-   Ú	prog_nameÚparserr(   r(   r)   Úcreate_parserA   s   ý

zdetached_celeryd.create_parserc                 C   s   |j dd| jd� d S )Nz	--versionÚversion)Úactionr9   )Úadd_argumentr9   ©r-   r7   r(   r(   r)   r4   K   s   
ÿz&detached_celeryd._add_version_argumentc                 C   sh   |   |¡}| |¡\}}|jr| d |j¡¡ |jr$| d |j¡¡ |jr0| d |j¡¡ ||fS )Nz--logfile={0}z--pidfile={0}z--hostname={0})r8   Úparse_known_argsr   ÚappendÚformatr    r   )r-   r6   r   r7   ÚoptionsÚ	leftoversr(   r(   r)   Úparse_optionsP   s   
zdetached_celeryd.parse_optionsc                 C   sz   |d u rt jn|}tj |d ¡}|  |¡\}}|  ||dd … ¡\}}t  td| j	| j
| j| | dœt|ƒ¤Ž¡ d S )Nr   r   )r&   r   r   r(   )Úsysr   r   r   ÚbasenameÚ_split_command_line_configrB   Úexitr   r&   Ú
execv_pathÚ
execv_argvÚvars)r-   r   r6   Úconfigr@   rA   r(   r(   r)   Úexecute_from_commandline[   s   þýz)detached_celeryd.execute_from_commandlinec                 C   sD   t |  |¡ƒ}z|d | d¡… }W ||fS  ty!   Y ||fS w )Nú--)ÚlistÚ_extract_command_line_configÚindexÚ
ValueError)r-   r   rJ   r(   r(   r)   rE   f   s   þþz+detached_celeryd._split_command_line_configc                 c   s2   � d}|D ]}|r|V  q|dkrd}|V  qd S )Nr   rL   r   r(   )r-   r   Ú
seen_cargsÚargr(   r(   r)   rN   n   s   €€úz-detached_celeryd._extract_command_line_configc                 C   s<   t |dd� |jdd d� | dd¡ |jddd	d
d� d S )Nzceleryd.pid)Údefault_pidfilez	--workdir)Údefaultz-nz
--hostnamez--fakeÚ
store_trueFz#Don't fork (for debugging purposes))r:   rT   Úhelp)r   r;   r<   r(   r(   r)   r5   {   s   
ýzdetached_celeryd.add_argumentsr+   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r0   r   ÚVERSION_BANNERr9   r1   rC   r'   ÚcommandrG   rH   r.   r8   r4   rB   rK   rE   rN   r5   r(   r(   r(   r)   r
   3   s     


r
   c                 C   s   t | ƒ ¡  d S r+   )r
   rK   r,   r(   r(   r)   Úmain†   s   r]   Ú__main__)
NNNNNNFNNNr+   )rZ   Ú
__future__r   r   r2   r   rC   r   Úcelery.bin.baser   Úcelery.platformsr   r   Úcelery.utils.logr   Úcelery.utils.nodenamesr   r	   Ú__all__rW   r   ÚenvironÚgetr   r   Úobjectr
   r]   r(   r(   r(   r)   Ú<module>   s,   
þ
S
ÿ