
P'^c           @@  s  d  Z  d d l m Z d d l Z d d l 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 m Z d d l m 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 m Z d d l m  Z  d d l! m" Z" m# Z# m$ Z$ m% 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/ d d d g Z0 e1 d g  Z2 e j3 d d f k Z4 e+ e5  Z6 d   Z7 d e8 f d     YZ9 d e: f d     YZ; e; Z< d e; f d     YZ= d e; f d     YZ> d S(   s   
    celery.backends.base
    ~~~~~~~~~~~~~~~~~~~~

    Result backend base classes.

    - :class:`BaseBackend` defines the interface.

    - :class:`KeyValueStoreBackend` is a common base class
      using K/V semantics like _get and _put.

i    (   t   absolute_importN(   t	   timedelta(   t   ExceptionInfo(   t   dumpst   loadst   prepare_accept_contentt   registry(   t   bytes_to_strt   ensure_bytest	   from_utf8(   t   maybe_sanitize_url(   t   states(   t   current_appt   maybe_signature(   t   current_task(   t
   ChordErrort   TimeoutErrort   TaskRevokedError(   t   items(   t   GroupResultt
   ResultBaset   allow_join_resultt   result_from_tuple(   t	   timeutils(   t   LRUCache(   t
   get_logger(   t   get_pickled_exceptiont   get_pickleable_exceptiont   create_exception_clst   BaseBackendt   KeyValueStoreBackendt   DisabledBackendt   picklei   c         C@  s   |  d t  j   | |  S(   s   Return an unpickled backend.t   app(   R   t   _get_current_object(   t   clst   argst   kwargs(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   unpickle_backend6   s    t	   _nulldictc           B@  s   e  Z d    Z e Z Z Z RS(   c         O@  s   d  S(   N(    (   t   selft   at   kw(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   ignore=   s    (   t   __name__t
   __module__R+   t   __setitem__t   updatet
   setdefault(    (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR'   ;   s   	c           B@  sF  e  Z e j Z e j Z e j Z e Z d4 Z e	 Z
 e	 Z e Z i d  d 6d d 6d d 6d d 6Z d4 d4 d4 d4 d  Z e	 d  Z d	   Z d4 d
  Z d4 d4 d  Z d4 d  Z d4 d  Z d4 d4 d  Z d d4 d  Z d4 d  Z d   Z d   Z d   Z d   Z d   Z d   Z d4 d e d4 d  Z d4 d  Z  d4 d  Z! d   Z" d   Z# d4 d4 d  Z$ d   Z% d    Z& d!   Z' d"   Z( d#   Z) d$   Z* e d%  Z+ d&   Z, d'   Z- e d(  Z. e d)  Z/ d*   Z0 d+   Z1 d,   Z2 d-   Z3 d.   Z4 e	 d/  Z5 d4 d d0  Z6 d1   Z7 d4 d2  Z8 d5 i  d3  Z9 RS(6   i   t   max_retriesi    t   interval_starti   t   interval_stept   interval_maxc   	      K@  s   | |  _  |  j  j } | p! | j |  _ t j |  j \ |  _ |  _ |  _ | pU | j	 } | d k rm t
   n t d |  |  _ t | d  k r | j n |  |  _ | |  _ d  S(   Nit   limit(   R!   t   conft   CELERY_RESULT_SERIALIZERt
   serializert   serializer_registryt	   _encoderst   content_typet   content_encodingt   encodert   CELERY_MAX_CACHED_RESULTSR'   R   t   _cacheR   t   Nonet   CELERY_ACCEPT_CONTENTt   acceptt   url(	   R(   R!   R8   t   max_cached_resultsRB   RC   R%   R6   t   cmax(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   __init__`   s    	"'!c         C@  s=   | r |  j  St |  j  p d  } | j d  r9 | d  S| S(   s<   Return the backend as an URI, sanitizing the password or nott    s   :///i(   RC   R
   t   endswith(   R(   t   include_passwordRC   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   as_urip   s    c         K@  s   |  j  | | d t j S(   s   Mark a task as startedt   status(   t   store_resultR   t   STARTED(   R(   t   task_idt   meta(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   mark_as_startedy   s    c         C@  s   |  j  | | d t j d | S(   s#   Mark task as successfully executed.RK   t   request(   RL   R   t   SUCCESS(   R(   RN   t   resultRQ   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   mark_as_done}   s    c      	   C@  s%   |  j  | | d t j d | d | S(   s9   Mark task as executed with failure. Stores the exception.RK   t	   tracebackRQ   (   RL   R   t   FAILURE(   R(   RN   t   excRU   RQ   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   mark_as_failure   s    c         C@  s   d d l  m } |  j } | j | j j } yQ | g  | j j d  pJ g  D] } | j |  ^ qK d | j	 | j
 f  Wn& t k
 r } | j | j
 d | SX| j | j
 d | Sd  S(   Ni    (   t   groupt
   link_errorR!   RW   (   t   celeryRY   R!   t   _taskst   taskt   backendt   optionst   gett	   signaturet   apply_asynct   idt	   Exceptiont   fail_from_current_stack(   R(   t   callbackRW   RY   R!   R^   t   errbackt   eb_exc(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   chord_error_from_stack   s    	1	c         C@  sk   t  j   \ } } } zK | d  k r* | n | } t | | | f  } |  j | | | j  | SWd  ~ Xd  S(   N(   t   syst   exc_infoR@   R   RX   RU   (   R(   RN   RW   t   type_t   real_exct   tbt   ei(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyRe      s    c      	   C@  s%   |  j  | | d t j d | d | S(   sJ   Mark task as being retries. Stores the current
        exception (if any).RK   RU   RQ   (   RL   R   t   RETRY(   R(   RN   RW   RU   RQ   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   mark_as_retry   s    RG   c      	   C@  s+   |  j  | t |  d t j d d  d | S(   NRK   RU   RQ   (   RL   R   R   t   REVOKEDR@   (   R(   RN   t   reasonRQ   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   mark_as_revoked   s    c         C@  sR   | d k r |  j n | } | t k r1 t |  Si t |  j d 6t |  d 6S(   s$   Prepare exception for serialization.t   exc_typet   exc_messageN(   R@   R8   t   EXCEPTION_ABLE_CODECSR   t   typeR,   t   str(   R(   RW   R8   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   prepare_exception   s    
c         C@  s`   | r\ t  | t  s; t t | d  t  | d  } n  |  j t k r\ t |  } q\ n  | S(   s1   Convert serialized exception to Python exception.Ru   Rv   (   t
   isinstancet   BaseExceptionR   R	   R,   R8   Rw   R   (   R(   RW   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   exception_to_python   s    #c         C@  s,   |  j  d k r( t | t  r( | j   S| S(   s   Prepare value for storage.R    (   R8   R{   R   t   as_tuple(   R(   RS   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   prepare_value   s    
c         C@  s"   t  | d |  j \ } } } | S(   NR8   (   R   R8   (   R(   t   datat   _t   payload(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   encode   s    c         C@  s1   | d |  j  k r- |  j | d  | d <n  | S(   NRK   RS   (   t   EXCEPTION_STATESR}   (   R(   RO   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   meta_from_decoded   s    c         C@  s   |  j  |  j |   S(   N(   R   t   decode(   R(   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   decode_result   s    c         C@  s=   t  r | p t |  } t | d |  j d |  j d |  j S(   NR;   R<   RB   (   t   PY3Ry   R   R;   R<   RB   (   R(   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR      s
    			g      ?c         C@  s   d } xr |  j  |  } | d t j k r/ | S| r? |   n  t j |  | | 7} | r	 | | k r	 t d   q	 q	 Wd S(   sJ  Wait for task and return its result.

        If the task raises an exception, this exception
        will be re-raised by :func:`wait_for`.

        If `timeout` is not :const:`None`, this raises the
        :class:`celery.exceptions.TimeoutError` exception if the operation
        takes longer than `timeout` seconds.

        g        RK   s   The operation timed out.N(   t   get_task_metaR   t   READY_STATESt   timet   sleepR   (   R(   RN   t   timeoutt   intervalt   no_ackt   on_intervalt   time_elapsedRO   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   wait_for   s    

c         C@  s_   | d  k r |  j j j } n  t | t  r? t j |  } n  | d  k	 r[ | r[ | |  S| S(   N(   R@   R!   R6   t   CELERY_TASK_RESULT_EXPIRESR{   R   R   t   timedelta_seconds(   R(   t   valueRx   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   prepare_expires   s    
c         C@  s6   | d  k	 r | S|  j j j } | d  k r2 |  j S| S(   N(   R@   R!   R6   t   CELERY_RESULT_PERSISTENTt
   persistent(   R(   t   enabledt   p(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   prepare_persistent   s    c         C@  sW   t  | t  r | j } n  | |  j k rF t  | t  rF |  j |  S|  j |  Sd  S(   N(   R{   R   t	   exceptionR   Rd   Rz   R   (   R(   RS   RK   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   encode_result   s
    c         C@  s   | |  j  k S(   N(   R?   (   R(   RN   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt	   is_cached  s    c         K@  s5   |  j  | |  } |  j | | | | d | | | S(   s   Update task state and result.RQ   (   R   t   _store_result(   R(   RN   RS   RK   RU   RQ   R%   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyRL   
  s    
c         C@  s$   |  j  j | d   |  j |  d  S(   N(   R?   t   popR@   t   _forget(   R(   RN   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   forget  s    c         C@  s   t  d   d  S(   Ns"   backend does not implement forget.(   t   NotImplementedError(   R(   RN   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR     s    c         C@  s   |  j  |  d S(   s   Get the status of a task.RK   (   R   (   R(   RN   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt
   get_status  s    c         C@  s   |  j  |  j d  S(   s$   Get the traceback for a failed task.RU   (   R   R`   (   R(   RN   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   get_traceback  s    c         C@  s   |  j  |  j d  S(   s   Get the result of a task.RS   (   R   R`   (   R(   RN   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt
   get_result!  s    c         C@  s-   y |  j  |  d SWn t k
 r( n Xd S(   s(   Get the list of subtasks sent by a task.t   childrenN(   R   t   KeyError(   R(   RN   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   get_children%  s    c         C@  sm   | r, y |  j  | SWq, t k
 r( q, Xn  |  j |  } | ri | j d  t j k ri | |  j  | <n  | S(   NRK   (   R?   R   t   _get_task_meta_forR`   R   RR   (   R(   RN   t   cacheRO   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR   ,  s    c         C@  s    |  j  | d t |  j | <d S(   s;   Reload task result, even if it has been previously fetched.R   N(   R   t   FalseR?   (   R(   RN   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   reload_task_result8  s    c         C@  s    |  j  | d t |  j | <d S(   s<   Reload group result, even if it has been previously fetched.R   N(   t   get_group_metaR   R?   (   R(   t   group_id(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   reload_group_result<  s    c         C@  sa   | r, y |  j  | SWq, t k
 r( q, Xn  |  j |  } | r] | d  k	 r] | |  j  | <n  | S(   N(   R?   R   t   _restore_groupR@   (   R(   R   R   RO   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR   @  s    c         C@  s'   |  j  | d | } | r# | d Sd S(   s   Get the result for a group.R   RS   N(   R   (   R(   R   R   RO   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   restore_groupL  s    c         C@  s   |  j  | |  S(   s&   Store the result of an executed group.(   t   _save_group(   R(   R   RS   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt
   save_groupR  s    c         C@  s    |  j  j | d   |  j |  S(   N(   R?   R   R@   t   _delete_group(   R(   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   delete_groupV  s    c         C@  s   d S(   sR   Backend cleanup. Is run by
        :class:`celery.task.DeleteExpiredTaskMetaTask`.N(    (   R(   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   cleanupZ  s    c         C@  s   d S(   s:   Cleanup actions to do at the end of a task worker process.N(    (   R(   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   process_cleanup_  s    c         C@  s   i  S(   N(    (   R(   t   producerRN   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   on_task_callc  s    c         C@  s   d  S(   N(    (   R(   R]   t   stateRS   t	   propagate(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   on_chord_part_returnf  s    c         K@  sM   g  | D] } | j    ^ q | d <|  j j d j | | f | d | d  S(   NRS   s   celery.chord_unlockt	   countdown(   R~   R!   t   tasksRb   (   R(   R   t   bodyRS   R   R%   t   r(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   fallback_chord_unlocki  s    #c         K@  s)   | d | |  } |  j  | | |  | S(   NRN   (   R   (   R(   t   headert   partial_argsR   R   R_   RS   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   apply_chordp  s    c         C@  sN   | p t  t   d d   } | rJ g  t  | d g   D] } | j   ^ q4 Sd  S(   NRQ   R   (   t   getattrR   R@   R~   (   R(   RQ   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   current_task_childrenu  s    c         C@  s   t  |  j | | f f S(   N(   R&   t	   __class__(   R(   R$   R%   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt
   __reduce__z  s    N(    (:   R,   R-   R   R   t   UNREADY_STATESR   R   R@   t   subpolling_intervalR   t   supports_native_joint   supports_autoexpiret   TrueR   t   retry_policyRF   RJ   RP   RT   RX   Ri   Re   Rq   Rt   Rz   R}   R   R   R   R   R   R   R   R   R   R   RL   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR   B   st   			
			
	
																						c           B@  s  e  Z e Z d  Z d Z d Z e Z d   Z	 d   Z
 d   Z d   Z d   Z d   Z d	   Z d
   Z d d  Z d d  Z d d  Z d   Z e j d  Z d   Z d d e e j d  Z d   Z d d d  Z d   Z d   Z d   Z  d   Z! d d  Z" d d  Z# RS(   s   celery-task-meta-s   celery-taskset-meta-s   chord-unlock-c         O@  sc   t  |  j d  r$ |  j j |  _ n  |  j   t t |   j | |   |  j r_ |  j |  _	 n  d  S(   Nt   __func__(
   t   hasattrt   key_tR   t   _encode_prefixest   superR   RF   t   implements_incrt   _apply_chord_incrR   (   R(   R$   R%   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyRF     s    
	c         C@  sC   |  j  |  j  |  _ |  j  |  j  |  _ |  j  |  j  |  _ d  S(   N(   R   t   task_keyprefixt   group_keyprefixt   chord_keyprefix(   R(   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR     s    c         C@  s   t  d   d  S(   Ns   Must implement the get method.(   R   (   R(   t   key(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR`     s    c         C@  s   t  d   d  S(   Ns   Does not support get_many(   R   (   R(   t   keys(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   mget  s    c         C@  s   t  d   d  S(   Ns   Must implement the set method.(   R   (   R(   R   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   set  s    c         C@  s   t  d   d  S(   Ns    Must implement the delete method(   R   (   R(   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   delete  s    c         C@  s   t  d   d  S(   Ns   Does not implement incr(   R   (   R(   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   incr  s    c         C@  s   d  S(   N(    (   R(   R   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   expire  s    RG   c         C@  s4   |  j  } | d  j |  j | |  | |  g  S(   s#   Get the cache key for a task by id.RG   (   R   t   joinR   (   R(   RN   R   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   get_key_for_task  s    	c         C@  s4   |  j  } | d  j |  j | |  | |  g  S(   s$   Get the cache key for a group by id.RG   (   R   R   R   (   R(   R   R   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   get_key_for_group  s    	c         C@  s4   |  j  } | d  j |  j | |  | |  g  S(   s?   Get the cache key for the chord waiting on group with given id.RG   (   R   R   R   (   R(   R   R   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   get_key_for_chord  s    	c         C@  sY   |  j  |  } x= |  j |  j f D]) } | j |  r" t | t |   Sq" Wt |  S(   s   Takes bytes, emits string.(   R   R   R   t
   startswithR   t   len(   R(   R   t   prefix(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   _strip_prefix  s
    c         c@  sW   xP | D]H \ } } | d  k	 r |  j |  } | d | k rO | | f VqO q q Wd  S(   NRK   (   R@   R   (   R(   t   valuesR   t   kt   v(    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   _filter_ready  s
    c         @  se   t  | d  r8 t  f d    j t |   D  St   f d    j t |   D  Sd  S(   NR   c         3@  s*   |  ]  \ } }   j  |  | f Vq d  S(   N(   R   (   t   .0R   R   (   R(   (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pys	   <genexpr>  s   c         3@  s+   |  ]! \ } } t    |  | f Vq d  S(   N(   R   (   R   t   iR   (   R   (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pys	   <genexpr>  s   (   R   t   dictR   R   t	   enumerate(   R(   R   R   (    (   R   R(   s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   _mget_to_results  s
    g      ?c         c@  s  | d  k r d n | } t | t  r- | n	 t |  } t   } |  j } xa | D]Y }	 y | |	 }
 Wn t k
 ry qR X|
 d | k rR t |	  |
 f V| j |	  qR qR W| j |  d } x | rt |  } |  j	 |  j
 g  | D] } |  j |  ^ q  |  } | j |  | j t d   | D   x+ t |  D] \ } } t |  | f VqEW| r| | | k rt d j |    n  t j |  | d 7} q Wd  S(   Ng      ?RK   i    c         s@  s   |  ] } t  |  Vq d  S(   N(   R   (   R   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pys	   <genexpr>  s    s   Operation timed out ({0})i   (   R@   R{   R   R?   R   R   t   addt   difference_updatet   listR   R   R   R/   R   R   t   formatR   R   (   R(   t   task_idsR   R   R   R   t   idst
   cached_idsR   RN   t   cachedt
   iterationsR   R   R   R   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   get_many  s4    !			(c         C@  s   |  j  |  j |   d  S(   N(   R   R   (   R(   RN   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR     s    c         K@  sQ   i | d 6| d 6| d 6|  j  |  d 6} |  j |  j |  |  j |   | S(   NRK   RS   RU   R   (   R   R   R   R   (   R(   RN   RS   RK   RU   RQ   R%   RO   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR     s    "c         C@  s3   |  j  |  j |  |  j i | j   d 6  | S(   NRS   (   R   R   R   R~   (   R(   R   RS   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR     s    c         C@  s   |  j  |  j |   d  S(   N(   R   R   (   R(   R   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR     s    c         C@  s@   |  j  |  j |   } | s3 i t j d 6d d 6S|  j |  S(   s#   Get task metadata for a task by id.RK   RS   N(   R`   R   R   t   PENDINGR@   R   (   R(   RN   RO   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR     s    c         C@  sU   |  j  |  j |   } | rQ |  j |  } | d } t | |  j  | d <| Sd S(   s#   Get task metadata for a task by id.RS   N(   R`   R   R   R   R!   (   R(   R   RO   RS   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR     s    
c         K@  s/   |  j  | |  j j | |   | d | |  S(   NRN   (   R   R!   R   (   R(   R   R   R   R   RS   R_   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR     s    c      	   C@  s  |  j  s d  S|  j } | d  k r1 | j j } n  | j j } | sG d  S|  j |  } y t j	 | d | j
 } Wn` t k
 r }	 t | j j d | }
 t j d | |	 d d |  j |
 t d j |	    SX| d  k rWy t |   WqWt k
 rS}	 t | j j d | }
 t j d | |	 d d |  j |
 t d j |    SXn  |  j |  } t |  } | | k rt j d	 |  n| | k r
t | j j d | }
 | j r| j n | j } zy) t    | d
 d d |  } Wd  QXWn t k
 r}	 y( t | j    } d j | |	  } Wn t k
 rUt |	  } n Xt j d | | d d |  j |
 t |   n` Xy |
 j |  WnK t k
 r}	 t j d | |	 d d |  j |
 t d j |	    n XWd  | j    |  j! j  |  Xn |  j" | d  d  S(   NR^   R!   s   Chord %r raised: %rRk   i   s   Cannot restore group: {0!r}s   Chord callback %r raised: %rs    GroupResult {0} no longer existss/   Chord counter incremented too many times for %rR   g      @R   s   Dependency {0.id} raised {1!r}s   Callback error: {0!r}iQ (#   R   R!   R@   R6   t   CELERY_CHORD_PROPAGATESRQ   RY   R   R   t   restoreR^   Rd   R   t   chordt   loggert   errorRi   R   R   t
   ValueErrorR   R   t   warningR   t   join_nativeR   R   t   nextt   _failed_join_reportt   StopIterationt   reprt   delayR   t   clientR   (   R(   R]   R   RS   R   R!   t   gidR   t   depsRW   Rf   t   valt   sizet   jt   rett   culpritRs   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR     st    			
 

N($   R,   R-   R   R   R   R   R   R   R   RF   R   R`   R   R   R   R   R   R   R   R   R   R   R   R   R   R@   R   R   R   R   R   R   R   R   R   R   (    (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR     s:   										
						c           B@  sE   e  Z i  Z d    Z d   Z d   Z e Z Z Z Z	 e Z
 Z RS(   c         O@  s   d  S(   N(    (   R(   R$   R%   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyRL   c  s    c         O@  s   t  d   d  S(   NsQ   No result backend configured.  Please see the documentation for more information.(   R   (   R(   R$   R%   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   _is_disabledf  s    c         O@  s   d S(   Ns   disabled://(    (   R(   R$   R%   (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyRJ   k  s    (   R,   R-   R?   RL   R  RJ   t	   get_stateR   R   R   R   R   (    (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyR   `  s   			(?   t   __doc__t
   __future__R    R   Rj   t   datetimeR   t   billiard.einfoR   t   kombu.serializationR   R   R   R   R9   t   kombu.utils.encodingR   R   R	   t   kombu.utils.urlR
   R[   R   R   R   t
   celery.appR   t   celery.exceptionsR   R   R   t   celery.fiveR   t   celery.resultR   R   R   R   t   celery.utilsR   t   celery.utils.functionalR   t   celery.utils.logR   t   celery.utils.serializationR   R   R   t   __all__t	   frozensetRw   t   version_infoR   R,   R   R&   R   R'   t   objectR   t   BaseDictBackendR   R   (    (    (    s6   /tmp/pip-unpacked-wheel-gV1wwp/celery/backends/base.pyt   <module>   s:   ""	 ;