σ
P'^c           @@  s  d  Z  d d l m Z d d l Z d d l Z d d l Z d d l m Z m Z d d l	 m
 Z
 m Z d d l m Z m Z d d l m Z d d l m Z m Z d	 d
 g Z e e  Z e j j d  Z e d d  e d d d d d e d d  e d d e d d d d d d f Z d d d d d d e d d d d 
 Z d e f d     YZ d	 e f d     YZ  d d  Z! e d k re!   n  d S(    s#  
    celery.bin.celeryd_detach
    ~~~~~~~~~~~~~~~~~~~~~~~~~

    Program used to daemonize the worker

    Using :func:`os.execv` because 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)

i    (   t   absolute_importN(   t   OptionParsert   BadOptionError(   t
   EX_FAILUREt   detached(   t   default_nodenamet   node_format(   t
   get_logger(   t   daemon_optionst   Optiont   detached_celerydt   detacht
   C_FAKEFORKt   default_pidfiles   celeryd.pids	   --workdirt   defaultt   destt   working_directorys   -ns
   --hostnames   --faket   actiont
   store_truet   faket   helps#   Don't fork (for debugging purposes)c      
   C@  s  t  |  } t | |  } t | |  } t r6 d n | } t | | | | | | | d t ± y0 |
 d  k	 ry |
 }  n  t j |  |  g |  Wnu t k
 r|	 d  k rΖ d d l	 m
 } | }	 n  |	 j j d | d | t j d d j |  g |  d	 t n Xt SWd  QXd  S(
   Ni   t   after_forkersi    (   t   current_appt   ERRORt   hostnames   Can't exec %rt    t   exc_info(   R   R   R   R   t   Falset   Nonet   ost   execvt	   Exceptiont   celeryR   t   logt   setup_logging_subsystemt   loggert   criticalt   joint   TrueR   (   t   patht   argvt   logfilet   pidfilet   uidt   gidt   umaskR   R   t   appt
   executableR   R   (    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyR   *   s&    
			t   PartialOptionParserc           B@  s#   e  Z d    Z d   Z d   Z RS(   c         O@  s    g  |  _  t j |  | |  d  S(   N(   t	   leftoversR   t   __init__(   t   selft   argst   kwargs(    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyR2   D   s    	c   
      C@  s  | j  d  } d | k rL | j d d  \ } } | j d |  t } n | } t } y% |  j |  } |  j j |  } Wn t k
 r d  } n X| r| j
   rC| j } t |  | k  r| d k rι |  j d j |   q@|  j d j | |   qh| d k r#| j  d  }	 qht | d | ! }	 | d | 5n% | rb|  j d j |   n d  }	 | j | |	 | |   n |  j j |  d  S(   Ni    t   =i   s   {0} requires an arguments   {0} requires {1} argumentss    {0} option does not take a value(   t   popt   splitt   insertR&   R   t   _match_long_optt	   _long_optt   getR   R   t   takes_valuet   nargst   lent   errort   formatt   tuplet   processR1   t   append(
   R3   t   rargst   valuest   argt   optt   next_argt   had_explicit_valuet   optionR>   t   value(    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyt   _process_long_optH   s:    	
	c         C@  s   | d } y t  j |  | |  WnX t k
 r{ |  j j |  | r| | d d d k r| |  j j | j d   q| n Xd  S(   Ni    t   -(   R   t   _process_short_optsR   R1   RD   R7   (   R3   RE   RF   RG   (    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyRO   p   s    
(   t   __name__t
   __module__R2   RM   RO   (    (    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyR0   B   s   		(c           B@  s   e  Z e Z d  Z e j Z d Z e	 j
 Z e	 j
 Z e	 j d k  rT d d d g Z n d d d g Z d d  Z d	   Z d
   Z d d  Z RS(   s!   %prog [options] [celeryd options]se   Detaches Celery worker nodes.  See `celery worker --help` for the list of supported worker arguments.i   i   s   -ms   celery.__main__t   workerR    c         C@  s   | |  _  d  S(   N(   R.   (   R3   R.   (    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyR2      s    c         C@  s1   t  d | d |  j d |  j d |  j d |  j  S(   Nt   progt   option_listt   usaget   descriptiont   version(   R0   RT   RU   RV   RW   (   R3   t	   prog_name(    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyt   Parser   s
    			c         C@  s¬   |  j  |  } | j |  \ } } | j rL | j j d j | j   n  | j rt | j j d j | j   n  | j r | j j d j | j   n  | | | j f S(   Ns   --logfile={0}s   --pidfile={0}s   --hostname={0}(   RY   t
   parse_argsR)   R1   RD   RA   R*   R   (   R3   RX   R(   t   parsert   optionsRF   (    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyt   parse_options   s    			c   	   
   C@  sβ   | d  k r t j } n  g  } d } xF | D]> } | rG | j |  q+ | d k r+ d } | j |  q+ q+ Wt j j | d  } |  j | | d  \ } } } t j t	 d |  j
 d |  j d |  j | | t |    d  S(   Ni    s   --i   R.   R'   R(   (   R   t   sysR(   RD   R   R'   t   basenameR]   t   exitR   R.   t
   execv_patht
   execv_argvt   vars(	   R3   R(   t   configt
   seen_cargsRG   RX   R\   RF   R1   (    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyt   execute_from_commandline   s     (   i   i   N(   RP   RQ   t   OPTION_LISTRT   RU   R    t   VERSION_BANNERRW   RV   R^   R/   t   commandRa   t   version_infoRb   R   R2   RY   R]   Rf   (    (    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyR
   z   s   					c         C@  s   t  |   j   d  S(   N(   R
   Rf   (   R.   (    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyt   main±   s    t   __main__("   t   __doc__t
   __future__R    R    R   R^   t   optparseR   R   t   celery.platformsR   R   t   celery.utilsR   R   t   celery.utils.logR   t   celery.bin.baseR   R	   t   __all__RP   R#   t   environR<   R   R   R   Rg   R   R0   t   objectR
   Rk   (    (    (    s;   /tmp/pip-unpacked-wheel-gV1wwp/celery/bin/celeryd_detach.pyt   <module>   s4   		87