
    AHjf                        d dl mZ d dl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mZ erddlmZ  ej$                  d	      Ze G d
 d             Zy)    )annotationsN)asdict	dataclass)TYPE_CHECKINGAnyLiteral)urlparse)Requesturlopen   )Jobz
rq.webhookc                      e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   dddd	 	 	 	 	 	 	 	 	 	 	 ddZddZedd       ZddddZ	ddddZ
y)WebhookaC  A pure-data description of an HTTP request to perform when a job
    reaches a terminal state (``finished`` or ``failed``).

    Unlike callbacks, webhooks are JSON-serializable and don't require an
    importable function. Send failures are logged and never raised, so an
    unreachable endpoint cannot fail the job.
    strurlLiteral['finished', 'failed']
job_statusLiteral['GET', 'POST']methoddict[str, str] | NoneheadersinttimeoutGETN
   r   r   r   c                  t        |t              rt        |      nd }||j                  dvs|j                  st        d|      |dvrt        d|      |dvrt        d|      |r1t        |t              s!t        dt        |      j                         t        |t              r|dk  rt        d	|      || _        || _        || _        || _        || _        y )
N)httphttpsz,url must be an http:// or https:// URL, got )finishedfailedz/job_status must be 'finished' or 'failed', got )r   POSTz$method must be 'GET' or 'POST', got z$headers must be a dict or None, got r   z(timeout must be a positive integer, got )
isinstancer   r	   schemenetloc
ValueErrordict	TypeErrortype__name__r   r   r   r   r   r   )selfr   r   r   r   r   parseds          B/root/tools/cai/cai_env/lib/python3.12/site-packages/rq/webhook.py__init__zWebhook.__init__    s     #-S#"6#D>V]]2CC6==KC7STT33Nzn]^^(CF:NOO:gt4B4=CYCYBZ[\\'3'7a<G{STT$    c                    t        |       S )N)r   )r+   s    r-   to_dictzWebhook.to_dict?   s    d|r/   c           
          | |d   |d   |j                  dd      |j                  d      |j                  dd            S )	Nr   r   r   r   r   r   r   r   )get)clsdatas     r-   	from_dictzWebhook.from_dictB   sF    K88He,HHY'HHY+
 	
r/   
exc_stringc                  |j                   |j                  | j                  |j                  r|j                  j	                         nd |j
                  r|j
                  j	                         nd d}| j                  dk(  r||d<   |S )N)job_id	func_namestatusenqueued_atended_atr!   exc_info)idr;   r   r=   	isoformatr>   )r+   jobr8   payloads       r-   get_payloadzWebhook.get_payloadL   sk    ffoo:=//3??446t47LL..0d#
 ??h&",GJr/   c                  	 | j                   dk(  r't        | j                  | j                  xs i d      }nbt	        j
                  | j                  ||            j                  d      }ddi| j                  xs i }t        | j                  ||d      }t        || j                  	      5  	 d
d
d
       y
# 1 sw Y   y
xY w# t        $ r0 t        j                  d| j                  |j                  d       Y y
w xY w)z;Performs the HTTP request. Errors are logged, never raised.r   )r   r   r7   zutf-8zContent-Typezapplication/jsonr"   )r5   r   r   )r   Nz'Failed to send webhook to %s for job %sT)r?   )r   r
   r   r   jsondumpsrD   encoder   r   	Exceptionloggerwarningr@   )r+   rB   r8   requestbodyr   s         r-   sendzWebhook.sendX   s    
	g{{e#!$((DLL4FBuUzz$"2"23:"2"NOVVW^_)+=V$,,BTRTV!$((wvV$,,7    	gNNDdhhPSPVPVaeNf	gs0   B/C 1B<3C <CC C 6D D)r   r   r   r   r   r   r   r   r   r   returnNone)rO   dict[str, Any])r5   rQ   rO   r   )rB   r   r8   
str | NonerO   rQ   )rB   r   r8   rR   rO   rP   )r*   
__module____qualname____doc____annotations__r.   r1   classmethodr6   rD   rN    r/   r-   r   r      s     
H--""""L */)- 2
 ' '  
> 
 
 AE 
 :> gr/   r   )
__future__r   rF   loggingdataclassesr   r   typingr   r   r   urllib.parser	   urllib.requestr
   r   rB   r   	getLoggerrJ   r   rX   r/   r-   <module>r`      sT    "   ) . . ! +			<	( Sg Sg Sgr/   