o
    wvXj/  ã                   @   s®   d Z ddlmZmZ ddlZddlmZmZ zddlmZ W n! e	y?   zddl
mZ W n e	y<   ddlmZ Y nw Y nw 		ddd„Z		dd	d
„Zdefdd„ZdS )zUseful mocks for unit testing.é    )Úabsolute_importÚunicode_literalsN)ÚdatetimeÚ	timedelta)ÚMock© c	                 K   s’   |si n|}ddl m}
 ddlm} |p|
ƒ }td |¡d�}|| |dœ|_|||dœ}|j |	¡ ||||fdd	�\|_|_	|_
|||f|_|S )
z)Create task message in protocol 2 format.r   ©Úuuid©ÚdumpsúTaskMessage-{0}©Úname)ÚidÚtaskÚshadow)Ú	callbacksÚerrbacksÚchainÚjson)Ú
serializer)Úceleryr	   Úkombu.serializationr   r   ÚformatÚheadersÚupdateÚcontent_typeÚcontent_encodingÚbodyÚpayload)r   r   ÚargsÚkwargsr   r   r   r   ÚutcÚoptionsr	   r   ÚmessageÚembedr   r   úY/var/www/html/myproject/venv/lib/python3.10/site-packages/celery/contrib/testing/mocks.pyÚTaskMessage   s    
ý
ÿr'   c                 K   s~   |si n|}ddl m} ddlm}	 |p|ƒ }td |¡d�}
i |
_| |||||dœ|
_|
j |¡ |	|
jƒ\|
_	|
_
|
_|
S )z)Create task message in protocol 1 format.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    r!   r   r   r   r#   r	   r   r$   r   r   r&   ÚTaskMessage1)   s$   
úÿr(   Tc           	      C   s  |  ¡  |j dd¡}|j dd¡}|j dd¡}|r%|  ¡ t|d� }n|j dd¡}|r7t|tƒr7| ¡ }|j dd¡}|rOt|tj	ƒrO|  ¡ t|d� }|rZt|tƒrZ| ¡ }||j
f|j|j|j|rmdd	„ |D ƒnd|rwd
d	„ |D ƒnd|||dœ|j¤ŽS )zÊCreate task message from :class:`celery.Signature`.

    Example:
        >>> m = task_message_from_sig(app, add.s(2, 2))
        >>> amqp_client.basic_publish(m, exchange='ex', routing_key='rkey')
    ÚlinkNÚ
link_errorÚ	countdown)ÚsecondsÚetaÚexpiresc                 S   ó   g | ]}t |ƒ‘qS r   ©Údict©Ú.0Úsr   r   r&   Ú
<listcomp>]   ó    z)task_message_from_sig.<locals>.<listcomp>c                 S   r/   r   r0   r2   r   r   r&   r5   ^   r6   )r   r    r!   r   r   r-   r.   r"   )Úfreezer#   ÚpopÚnowr   Ú
isinstancer   Ú	isoformatÚnumbersÚRealr   r   r    r!   )	ÚappÚsigr"   r'   r   r   r+   r-   r.   r   r   r&   Útask_message_from_sigC   s6   ÿùør@   )Nr   NNNNNN)Nr   NNNN)Ú__doc__Ú
__future__r   r   r<   r   r   Úcaser   ÚImportErrorÚunittest.mockÚmockr'   r(   r@   r   r   r   r&   Ú<module>   s*    ÿ€ý
ÿ
ÿ