U
    d                     @   s   d Z ddlmZ ddlmZ dZeeZedd Zedd Z	ed	d
 Z
edd Zedd Zedd Zedd Zedd Zedd ZdS )zOBuilt-in Tasks.

The built-in tasks are always available in all app instances.
    )connect_on_app_finalize)
get_logger c                    s     j dddd fdd}|S )zTask used to clean up expired results.

    If the configured backend requires periodic cleanup this task is also
    automatically configured to run every day at 4am (requires
    :program:`celery beat` to be running).
    zcelery.backend_cleanupFnamesharedlazyc                      s    j   d S N)backendcleanupr   appr   7/tmp/pip-unpacked-wheel-9cz4377o/celery/app/builtins.pybackend_cleanup   s    z1add_backend_cleanup_task.<locals>.backend_cleanuptask)r   r   r   r   r   add_backend_cleanup_task   s    r   c                 C   s   | j ddddddd }|S )z9Task used by Task.replace when replacing task with group.Tzcelery.accumulateF)bindr   r   r   c                 _   s   | d}|d k	r|| S |S )Nindex)get)selfargskwargsr   r   r   r   
accumulate   s    
z'add_accumulate_task.<locals>.accumulater   )r   r   r   r   r   add_accumulate_task   s    
r   c              	      sl   ddl m ddlm  ddlmm} jdddjj	dddd	dddj
j|f fd
d	}|S )zTask used by result backends without native chord support.

    Will joins chord by creating a task chain polling the header
    for completion.
    r   maybe_signature)
ChordError)allow_join_resultresult_from_tuplezcelery.chord_unlockNFT)r   max_retriesr   default_retry_delayignore_resultr   r   c	                    s  |d kr| j }|}|| fdd|D d}
|
jrB|
jn|
j}z|
 }W n2 tk
r } z| j|||dW 5 d }~X Y nX |s| j||d|d}z&  |jjdd}W 5 Q R X W n tk
rR } zfz"t	|

 }d|j d	|}W n tk
r    t|}Y nX td
|| j|| W 5 d }~X Y n^X z|| W nL tk
r } z,td
|| jj|d|d W 5 d }~X Y nX d S )Nc                    s   g | ]}| d qS r   r   ).0r)r   r   r   r   
<listcomp><   s     z?add_unlock_chord_task.<locals>.unlock_chord.<locals>.<listcomp>r   )exc	countdownr    )r(   r    T)timeout	propagatezDependency z raised zChord %r raised: %rzCallback error: )r'   )r!   Zsupports_native_joinZjoin_nativejoinready	ExceptionretryconfZresult_chord_join_timeoutnextZ_failed_join_reportidStopIterationreprlogger	exceptionr
   Zchord_error_from_stackdelay)r   group_idcallbackintervalr    resultZResultGroupResultr   r   depsjr,   r'   retZculpritreasonr   r   r   r   r   r   unlock_chord/   sT    
  $z+add_unlock_chord_task.<locals>.unlock_chord)celery.canvasr   Zcelery.exceptionsr   celery.resultr   r   r   r/   Zresult_chord_retry_intervalZAsyncResultr;   )r   r   rB   r   r@   r   add_unlock_chord_task$   s"    
     2rE   c                    s.   ddl m  jdddd fdd}|S )Nr   	signaturez
celery.mapFr   c                    s     dj   fdd|D S )Nr   c                    s   g | ]} |qS r   r   r$   itemr   r   r   r&   m   s     z.add_map_task.<locals>.xmap.<locals>.<listcomp>typer   itr   rG   r   r   xmapj   s    zadd_map_task.<locals>.xmaprC   rG   r   )r   rO   r   rN   r   add_map_taskf   s    rQ   c                    s.   ddl m  jdddd fdd}|S )Nr   rF   zcelery.starmapFr   c                    s     dj   fdd|D S )Nr   c                    s   g | ]} | qS r   r   rH   r   r   r   r&   x   s     z6add_starmap_task.<locals>.xstarmap.<locals>.<listcomp>rJ   rL   rN   r   r   xstarmapu   s    z"add_starmap_task.<locals>.xstarmaprP   )r   rR   r   rN   r   add_starmap_taskq   s    rS   c                    s,   ddl m  | jdddd fdd}|S )Nr   )chunkszcelery.chunksFr   c                    s     | ||S r	   )Zapply_chunks)r   rM   n_chunksr   r   rT      s    zadd_chunk_task.<locals>.chunks)rC   rT   r   )r   rT   r   rV   r   add_chunk_task|   s    rX   c                    s>   ddl m  ddlm | jdddddd
 fdd		}|S )5No longer used, but here for backwards compatibility.r   r   rA   zcelery.groupTF)r   r   r   r   c              	      sn   | j  | } fddt|D }  fdd|D  W 5 Q R X  j}|rj|rj|| |S )Nc                 3   s$   | ]\}}| d  V  qdS )r   N)clone)r$   ir   )r   r   partial_argsr   r   	<genexpr>   s   z0add_group_task.<locals>.group.<locals>.<genexpr>c                    s   g | ]}|j  d dqS )F)r7   produceradd_to_parent)Zapply_async)r$   Zstask)r7   r^   r   r   r&      s   z1add_group_task.<locals>.group.<locals>.<listcomp>)r   	enumerateZproducer_or_acquireZcurrent_worker_taskZ	add_trail)r   tasksr:   r7   r\   r_   Ztaskitparentr   r   )r   r7   r\   r^   r   group   s    


zadd_group_task.<locals>.group)T)rC   r   rD   r   r   )r   rd   r   rc   r   add_group_task   s
    re   c                 C   s   | j dddddd }|S )rY   zcelery.chainFr   c                  _   s   t dd S )Nzchain is not a real task)NotImplementedError)r   r   r   r   r   chain   s    zadd_chain_task.<locals>.chainr   )r   rg   r   r   r   add_chain_task   s    
rh   c                    sN   ddl m  ddl m ddlm | jddddddd fdd	}|S )rY   r   )chord)rd   r   zcelery.chordTF)r   r   r"   r   r   r   N   c                    sh   | j  t|r|jn|}	 fdd|	D | j d}| d}||}
|
j||| |||f|S )Nc                    s   g | ]}| d qS r#   r   )r$   s)r   r   r   r   r&      s    z1add_chord_task.<locals>.chord.<locals>.<listcomp>r   )r   
isinstancera   run)r   headerbodyr\   r9   r(   r    eagerr   ra   chZ_chordrd   r   r   r   ri      s    
 zadd_chord_task.<locals>.chord)r   Nrj   NF)Zceleryri   rd   rC   r   r   )r   ri   r   rr   r   add_chord_task   s    
       rs   N)__doc__Zcelery._stater   Zcelery.utils.logr   __all____name__r4   r   r   rE   rQ   rS   rX   re   rh   rs   r   r   r   r   <module>   s,   

	
A




	

