ó
P'—^c           @@  sJ  d  Z  d d l 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
 m
 Z
 d d l m Z d d l m Z d d l 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 m Z m Z d g Z e a  d Z! e! d Z" d e# f d „  ƒ  YZ$ d d „ Z% d „  Z& d S(   sJ   
    celery.loaders.base
    ~~~~~~~~~~~~~~~~~~~

    Loader base class.

i    (   t   absolute_importN(   t   datetime(   t   cached_property(   t   safe_str(   t   signals(   t   DictAttributet   force_mapping(   t   reraiset   string_t(   t
   maybe_list(   t   import_from_cwdt   symbol_by_namet   NotAPackaget   find_modulet
   BaseLoadersP   Error: Module '{module}' doesn't exist, or it's not a valid Python module name.
s   Did you mean '{suggest}'?
c           B@  s€  e  Z d  Z e ƒ  Z e Z i  Z e Z d" Z
 d „  Z e d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d" d	 „ Z d" d" d
 „ Z d „  Z d „  Z d „  Z d „  Z e d „ Z d" d „ Z d „  Z d „  Z d e j d ƒ i e  j! d 6i d d 6d d 6d d 6d „ Z" e d" d" d" d" d" d" d" e e d d „ Z# d d „ Z$ d d „ Z% e& d  „  ƒ Z' e( d! „  ƒ Z) RS(#   s­  The base class for loaders.

    Loaders handles,

        * Reading celery client/worker configurations.

        * What happens when a task starts?
            See :meth:`on_task_init`.

        * What happens when the worker starts?
            See :meth:`on_worker_init`.

        * What happens when the worker shuts down?
            See :meth:`on_worker_shutdown`.

        * What modules are imported to find tasks?

    c         K@  s   | |  _  t ƒ  |  _ d  S(   N(   t   appt   sett   task_modules(   t   selfR   t   kwargs(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   __init__F   s    	c         C@  s   | r t  j ƒ  St  j ƒ  S(   N(   R   t   utcnowt   now(   R   t   utc(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyR   J   s    
c         C@  s   d S(   s0   This method is called before a task is executed.N(    (   R   t   task_idt   task(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   on_task_initO   s    c         C@  s   d S(   s/   This method is called after a task is executed.N(    (   R   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   on_process_cleanupS   s    c         C@  s   d S(   sP   This method is called when the worker (:program:`celery worker`)
        starts.N(    (   R   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   on_worker_initW   s    c         C@  s   d S(   sT   This method is called when the worker (:program:`celery worker`)
        shuts down.N(    (   R   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   on_worker_shutdown\   s    c         C@  s   d S(   s2   This method is called when a child process starts.N(    (   R   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   on_worker_process_inita   s    c         C@  s   |  j  j | ƒ |  j | ƒ S(   N(   R   t   addR
   (   R   t   module(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   import_task_modulee   s    c         C@  s   t  j | d | ƒS(   Nt   package(   t	   importlibt   import_module(   R   R    R"   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyR$   i   s    c         C@  s(   t  | | d  k r |  j n | d | ƒS(   NR"   (   R
   t   NoneR$   (   R   R    t   impR"   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyR
   l   s    c         C@  sq   t  j j d |  j ƒ g  t |  j ƒ t t |  j j j ƒ ƒ t t |  j j j	 ƒ ƒ D] } |  j
 | ƒ ^ qX S(   Nt   sender(   R   t   import_modulest   sendR   t   tuplet   builtin_modulesR	   t   conft   CELERY_IMPORTSt   CELERY_INCLUDER!   (   R   t   m(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   import_default_moduless   s    %c         C@  s-   |  j  s) t |  _  |  j ƒ  |  j ƒ  n  d  S(   N(   t   worker_initializedt   TrueR0   R   (   R   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   init_worker}   s    		
c         C@  s   |  j  ƒ  d  S(   N(   R   (   R   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   shutdown_workerƒ   s    c         C@  s   |  j  ƒ  d  S(   N(   R   (   R   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   init_worker_process†   s    c         C@  sh   t  | t ƒ rU y |  j | d |  j ƒ} WqU t t f k
 rQ | rK t S‚  qU Xn  t | ƒ |  _ t	 S(   NR&   (
   t
   isinstanceR   t   _smart_importR
   t   ImportErrort   AttributeErrort   FalseR   t   _confR2   (   R   t   objt   silent(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   config_from_object‰   s    
c         C@  sj   | d  k r |  j n | } d | k r7 t | d | ƒSy | | ƒ SWn t k
 re t | d | ƒSXd  S(   Nt   :R&   (   R%   R$   R   R8   (   R   t   pathR&   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyR7   ”   s    c      	   C@  sª   y |  j  | ƒ Wn… t k
 r˜ | j d ƒ ri t t t t j d | d | d  ƒ ƒ t j ƒ  d ƒ n  t t t t j d | ƒ ƒ t j ƒ  d ƒ n X|  j	 | ƒ Sd  S(   Ns   .pyR    t   suggestiýÿÿÿi   (
   R   R   t   endswithR   t   CONFIG_WITH_SUFFIXt   formatt   syst   exc_infot   CONFIG_INVALID_NAMER
   (   R   t   name(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   _import_config_module£   s    'c         C@  s
   t  | ƒ S(   N(   R   (   R   R    (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyR   ¯   s    t   celerys	   \((\w+)\)t   jsonR*   t   listt   dictc         @  si   d d l  m } m ‰  ˆ j ƒ  ‰ t | j |  ‰ ‡  ‡ ‡ ‡ ‡ f d †  ‰ t ‡ f d †  | Dƒ ƒ S(   Ni    (   t   Optiont
   NAMESPACESc         @  s9  |  j  d d ƒ \ } } | j ƒ  j d d ƒ } | d d k rT ˆ | d } } n | j  d d ƒ \ } } | r| | d p d | } ˆ j | ƒ } | ræ | j ƒ  d } ˆ j | | ƒ } | t | j ƒ  ƒ } ˆ | | ƒ } nI y ˆ  | | j | ƒ } Wn+ t	 k
 r.} t	 d j
 | | ƒ ƒ ‚ n X| | f S(   sJ   Parse a single configuration definition from
            the command-line.t   =i   t   .t   _i    t    s
   {0!r}: {1}(   t   splitt   uppert   replacet   matcht   groupst   gett   lent   groupt	   to_pythont
   ValueErrorRD   (   t   argt   keyt   valuet   nst   ns_keyt   castt   type_t   exc(   RO   t	   namespacet   override_typest   re_typet   typemap(    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   getarg½   s"    c         3@  s   |  ] } ˆ  | ƒ Vq d  S(   N(    (   t   .0R^   (   Rj   (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pys	   <genexpr>Þ   s    (   t   celery.app.defaultsRN   RO   RU   RM   Ri   (   R   t   argsRf   Rh   t   extra_typesRg   RN   (    (   RO   Rj   Rf   Rg   Rh   Ri   s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   cmdline_config_parser²   s
    !s   utf-8c         C@  s‰   |  j  j d | d | d t | ƒ d t | ƒ d | ƒ } |  j  j d | d | d | d	 |	 d
 |
 d | d | ƒ } | j | d | ƒd  S(   NR'   t   tot   subjectt   bodyt   charsett   hostt   portt   usert   passwordt   timeoutt   use_sslt   use_tlst   fail_silently(   t   mailt   MessageR   t   MailerR)   (   R   Rq   Rr   R{   R'   Rp   Rt   Ru   Rv   Rw   Rx   Ry   Rz   Rs   t   messaget   mailer(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   mail_adminsà   s    		t   CELERY_CONFIG_MODULEc         C@  sH   y t  j | } Wn t k
 r$ n  X| rD |  j | ƒ } t | ƒ Si  S(   N(   t   ost   environt   KeyErrorRI   R   (   R   t   envt   custom_configt   usercfg(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   read_configurationî   s    
t   tasksc         C@  s-   |  j  j d „  t | p d | ƒ Dƒ ƒ d  S(   Nc         s@  s   |  ] } | r | j  Vq d  S(   N(   t   __name__(   Rk   t   mod(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pys	   <genexpr>û   s    (    (   R   t   updatet   autodiscover_tasks(   R   t   packagest   related_name(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyRŽ   ù   s    	c         C@  s(   |  j  d k r! |  j ƒ  |  _  n  |  j  S(   s   Loader configuration.N(   R;   R%   R‰   (   R   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyR,   þ   s    c         C@  s   |  j  d ƒ S(   Ns   celery.utils.mail(   R$   (   R   (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyR|     s    N(*   R‹   t
   __module__t   __doc__t	   frozensetR+   R:   t
   configuredt   override_backendsR1   R%   R;   R   R2   R   R   R   R   R   R   R!   R$   R
   R0   R3   R4   R5   R>   R7   RI   R   t   ret   compilet   anyjsont   loadsRo   R   R‰   RŽ   t   propertyR,   R   R|   (    (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyR   ,   sL   									
					
(	RŠ   c         C@  sB   t  r
 d St a  z$ g  |  D] } t | | ƒ ^ q SWd  t a  Xd  S(   N(    (   t   _RACE_PROTECTIONR2   t   find_related_moduleR:   (   R   R   t   pkg(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyRŽ   
  s    $c         C@  sª   y t  j |  ƒ Wn) t k
 r< |  j d ƒ \ }  } } n Xy t  j |  ƒ j } Wn t k
 rg d SXy t j | | ƒ Wn t k
 r d SXt  j d j |  | ƒ ƒ S(   sF   Given a package name and a module name, tries to find that
    module.RQ   Ns   {0}.{1}(	   R#   R$   R8   t
   rpartitiont   __path__R9   t   _impR   RD   (   R"   R   RR   t   pkg_path(    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyRœ     s    ('   R’   t
   __future__R    R˜   R&   R    R#   Rƒ   R–   RE   R   t   kombu.utilsR   t   kombu.utils.encodingR   RJ   R   t   celery.datastructuresR   R   t   celery.fiveR   R   t   celery.utils.functionalR	   t   celery.utils.importsR
   R   R   R   t   __all__R:   R›   RG   RC   t   objectR   RŽ   Rœ   (    (    (    s5   /tmp/pip-unpacked-wheel-gV1wwp/celery/loaders/base.pyt   <module>   s.   "	Þ