o
    wvXjb  ã                   @   s¨   d Z ddlmZm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.
é    )Úabsolute_importÚunicode_literals)Úconnect_on_app_finalize)Ú
get_logger© c                    s    ˆ j dddd�‡ fdd„ƒ}|S )zàTask 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   úP/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/app/builtins.pyÚbackend_cleanup   ó   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 u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 )z•Task 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 u r| j }ˆ|ˆƒ}||‡‡ fdd„|D ƒˆd�}
|
jr!|
jn|
j}z|
 ¡ }W n ty> } z| j|||d�‚d }~ww |sH| j||d�‚ˆ|ˆd�}zˆƒ � |ˆjjdd�}W d   ƒ n1 sew   Y  W n? tyª } z3zt	|
 
¡ ƒ}d ||¡}W n tyŽ   t|ƒ}Y nw t d	||¡ ˆj |ˆ|ƒ¡ W Y d }~d S d }~ww z| |¡ W d S  tyÚ } zt d	||¡ ˆjj|ˆd
 |¡ƒd� W Y d }~d S d }~ww )Nc                    ó   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 {0.id} raised {1!r}zChord %r raised: %rzCallback error: {0!r})r+   )r$   Úsupports_native_joinÚjoin_nativeÚjoinÚreadyÚ	ExceptionÚretryÚconfÚresult_chord_join_timeoutÚnextÚ_failed_join_reportÚformatÚStopIterationÚreprÚloggerÚ	exceptionr   Úchord_error_from_stackÚdelay)r   Úgroup_idÚcallbackÚintervalr#   ÚresultÚResultÚGroupResultr"   r   ÚdepsÚjr2   r+   ÚretÚculpritÚreason©r    r!   r   r   ©r"   r   Úunlock_chord2   sb   
ýÿ€ÿþÿ€ÿ €ù	þ€þz+add_unlock_chord_task.<locals>.unlock_chord)Úcelery.canvasr   Úcelery.exceptionsr    Úcelery.resultr!   r"   r   r5   Úresult_chord_retry_intervalÚAsyncResultrE   )r   r"   rM   r   rK   r   Úadd_unlock_chord_task'   s   
ÿý2rS   c                    ó.   ddl m‰ ˆ jdddd�‡ ‡fdd„ƒ}|S )Nr   ©Ú	signaturez
celery.mapFr   c                    ó    ˆˆ ˆd�j ‰ ‡ fdd„|D ƒS )Nr   c                    s   g | ]}ˆ |ƒ‘qS r   r   ©r(   Úitemr   r   r   r*   p   ó    z.add_map_task.<locals>.xmap.<locals>.<listcomp>©Útype©r   Úit©r   rV   r   r   Úxmapm   ó   zadd_map_task.<locals>.xmap©rN   rV   r   )r   r`   r   r_   r   Úadd_map_taski   ó   rc   c                    rT   )Nr   rU   zcelery.starmapFr   c                    rW   )Nr   c                    s   g | ]}ˆ |Ž ‘qS r   r   rX   r   r   r   r*   {   rZ   z6add_starmap_task.<locals>.xstarmap.<locals>.<listcomp>r[   r]   r_   r   r   Úxstarmapx   ra   z"add_starmap_task.<locals>.xstarmaprb   )r   re   r   r_   r   Úadd_starmap_taskt   rd   rf   c                    s,   ddl m‰  | jdddd�‡ fdd„ƒ}|S )Nr   )Úchunkszcelery.chunksFr   c                    s   ˆ   | ||¡S r   )Úapply_chunks)r   r^   Ún©Ú_chunksr   r   rg   ƒ   r   zadd_chunk_task.<locals>.chunks)rN   rg   r   )r   rg   r   rj   r   Úadd_chunk_task   s   rl   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   rL   zcelery.groupTF)r   r   r	   r
   c                    s‚   | j ‰ ˆ|ˆ ƒ}‡ ‡‡fdd„t|ƒD ƒ}ˆ  ¡ �‰‡‡fdd„|D ƒ W d   ƒ n1 s.w   Y  ˆ j}|r?|r?| |¡ |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)r@   ÚproducerÚadd_to_parent)Úapply_async)r(   Ústask)r@   rr   r   r   r*   —   s
    ÿ
ÿz1add_group_task.<locals>.group.<locals>.<listcomp>)r   Ú	enumerateÚproducer_or_acquireÚcurrent_worker_taskÚ	add_trail)r   ÚtasksrC   r@   rp   rs   ÚtaskitÚparent©r   r"   )r   r@   rp   rr   r   Úgroup�   s   
ÿ
ÿÿ
zadd_group_task.<locals>.groupN)T)rN   r   rP   r"   r   )r   r~   r   r}   r   Úadd_group_task‰   s
   r   c                 C   s   | j dddd�dd„ ƒ}|S )rm   zcelery.chainFr   c                  _   s   t dƒ‚)Nzchain is not a real task)ÚNotImplementedError)r   r   r   r   r   Úchain£   s   zadd_chain_task.<locals>.chainr   )r   r�   r   r   r   Úadd_chain_task    s   
r‚   c                    sJ   ddl m‰m‰  ddlm‰ | jdddddd�			d‡ ‡‡fdd„	ƒ}|S )rm   r   )r~   Úchordr   zcelery.chordTF)r   r   r%   r	   r
   r   Né   c                    sl   | j ‰ t|ˆƒr|jn|}	ˆ‡ ‡fdd„|	D ƒ| j d�}ˆ|ˆ d�}ˆ||ƒ}
|
j|||ˆ |||fi |¤ŽS )Nc                    r&   r'   r   )r(   Ús)r   r   r   r   r*   ¶   s    ÿz1add_chord_task.<locals>.chord.<locals>.<listcomp>r   )r   Ú
isinstancerz   Úrun)r   ÚheaderÚbodyrp   rB   r,   r#   Úeagerr   rz   Úch©Ú_chordr~   r   r   r   rƒ   ¯   s   ÿþ
ÿÿzadd_chord_task.<locals>.chord)r   Nr„   NF)Úceleryr~   rƒ   rN   r   r   )r   rƒ   r   rŒ   r   Úadd_chord_task©   s   
ÿÿr�   N)Ú__doc__Ú
__future__r   r   Úcelery._stater   Úcelery.utils.logr   Ú__all__Ú__name__r<   r   r   rS   rc   rf   rl   r   r‚   r�   r   r   r   r   Ú<module>   s0   

	
A




	

