
    hV                         d Z ddlZddl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 	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 dd	Zd
efdZ G d de	      Zd Zy)zUseful mocks for unit testing.    N)datetime	timedelta)AnyMappingSequence)Mock)Celery)	Signaturec	                 
   |si n|}ddl m}
 ddlm} |xs  |       }t	        d|       }|| |d|_        |||d}|j
                  j                  |	        |
|||fd	      \  |_        |_        |_	        |||f|_
        |S )
z)Create task message in protocol 2 format.r   dumpsuuidTaskMessage-name)idtaskshadow)	callbackserrbackschainjson)
serializer)kombu.serializationr   celeryr   r   headersupdatecontent_typecontent_encodingbodypayload)r   r   argskwargsr   r   r   r   utcoptionsr   r   messageembeds                 X/var/www/Befach/backend/env/lib/python3.12/site-packages/celery/contrib/testing/mocks.pyTaskMessager*      s     R6F)	tvB,rd+,GGO
 $EJEOO7#CH	vu&D@G'2GL VU+GON    c                    |si n|}ddl m} ddlm}	 |xs  |	       }t	        d|       }
i |
_        | |||||d|
_        |
j                  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'   s              r)   TaskMessage1r-   -   s     R6F)	tvB,rd+,GGOGO OO7#CHD@G'2GL Nr+   Tc                 |   |j                          |j                  j                  dd      }|j                  j                  dd      }|j                  j                  dd      }|r| j                         t	        |      z   }n|j                  j                  dd      }|r t        |t              r|j                         }|j                  j                  dd      }|r7t        |t        j                        r| j                         t	        |      z   }|r t        |t              r|j                         } ||j                  f|j                  |j                  |j                  |r|D 	cg c]  }	t        |	       c}	nd|r|D 	cg c]  }	t        |	       c}	nd|||d|j                  S c c}	w c c}	w )	zCreate 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expires)r   r#   r$   r   r   r3   r4   r%   )freezer&   popnowr   
isinstancer   	isoformatnumbersRealr   r   r#   r$   dict)
appsigr%   r*   r   r   r1   r3   r4   ss
             r)   task_message_from_sigr@   O   sW    JJL-I{{|T2HT2Iggi)I66kkooeT*
z#x(mmokkooi.G:gw||4'')i88:gx0##%	VV#((zz2;I.q47.088,a$q',d	 ++	 	 /,s   /F4F9c                       e Zd ZdZd Zd Zy)_ContextMockzDummy class implementing __enter__ and __exit__.

    The :keyword:`with` statement requires these to be implemented
    in the class, not just the instance.
    c                     | S N )selfs    r)   	__enter__z_ContextMock.__enter__y   s    r+   c                      y rD   rE   )rF   exc_infos     r)   __exit__z_ContextMock.__exit__|   s    r+   N)__name__
__module____qualname____doc__rG   rJ   rE   r+   r)   rB   rB   r   s    r+   rB   c                      t        | i |}|j                  t               d       |j                  t               d       ||j                  _        d|j                  _        |S )z3Mock that mocks :keyword:`with` statement contexts.rG   rJ   N)rB   attach_mockrG   return_valuerJ   )r#   r$   objs      r)   ContextMockrS      sP    

'
'COOLNK0OOLNJ/!$CMM !%CLLJr+   )NrE   NNNNNN)NrE   NNNN)rN   r:   r   r   typingr   r   r   unittest.mockr   r   r	   celery.canvasr
   r*   r-   r@   rB   rS   rE   r+   r)   <module>rW      su    $  ( ) )   #
 	
H 	
D )-+  F4 	r+   