
    	]j&#                         d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZ d d	lmZmZ d
dlmZ ddddiidddZ G d de	j.                        Z G d de	j.                        Zy)    )	load_func)JSONSchemaValidator)settings)ValidationError)models)gettext_lazy)	LabelLink)Project)
AnnotationTask   )OnlyIDWebhookSerializerobjectz^[a-zA-Z0-9-_]+$typestring
   F)r   patternPropertiesmaxPropertiesadditionalPropertiesc                   n   e Zd ZdZ ej
                  dej                  d      Z ej
                  ddej                  dd      Z ej                   e
d	      d
 e
d	            Z ej                   e
d      dd      Z ej                   e
d      dd      Z ej                   e
d       ee      ged      Z ej                   e
d      dd      Z ej*                   e
d      d e
d      d      Z ej*                   e
d      d e
d      d      Zd Zd Zd Zd Z G d  d!      Zy)"WebhookzZModel of webhooks.

    If webhook has not null project field -- it's project webhook
    zorganizations.Organizationwebhooks	on_deleterelated_namezprojects.ProjectTN)nullr   r   defaultzURL of webhooki   )
max_length	help_textzdoes webhook send the payloadz"If value is False send only action)r   r   zUse webhook for all actionsz<If value is False - used only for actions from WebhookActionz request extra headers of webhookzKey Value Json of headers)
validatorsr   r   zis webhook activez)If value is False the webhook is disabledz
created atzCreation time)auto_now_addr   db_indexz
updated atzLast update time)auto_nowr   r"   c                 d    t         j                  j                  |       j                  dd      S )N)webhookactionT)flat)WebhookActionobjectsfiltervalues_list)selfs    F/root/env/lib/python3.12/site-packages/label_studio/webhooks/models.pyget_actionszWebhook.get_actionsD   s-    $$++D+9EEhUYEZZ    c                     |D cg c]  }t         j                  |    }}| j                  rt        d |D              rt	        d      |S c c}w )Nc              3   >   K   | ]  }|j                  d         yw)organization-onlyN)get).0metas     r-   	<genexpr>z+Webhook.validate_actions.<locals>.<genexpr>I   s      X4*=!> Xs   z7Project webhook can't contain organization-only action.)r(   ACTIONSprojectanyr   )r,   actionsr&   actions_metas       r-   validate_actionszWebhook.validate_actionsG   sK    DKL&--f5LL<<C X< XY!"[\\ Ms   Ac                 0   |s
t               }t        |      }t        | j                               }t        ||z
        D ]#  }t        j                  j                  | |       % t        j                  j                  | ||z
        j                          y )N)r%   r&   )r%   
action__in)setr.   listr(   r)   creater*   delete)r,   r:   old_actions
new_actions       r-   set_actionszWebhook.set_actionsM   s    eGg,$**,-w45 	JJ!!((j(I	J 	$$T{W?T$V]]_r/   c                 Z    | j                   |_         | j                  j                  |      S )N)r8   organizationhas_user)r,   users     r-   has_permissionzWebhook.has_permissionX   s$    ||  ))$//r/   c                       e Zd ZdZy)Webhook.Metar%   N)__name__
__module____qualname__db_table r/   r-   MetarL   \   s    r/   rR   )rM   rN   rO   __doc__r   
ForeignKeyCASCADErG   r8   URLField_urlBooleanFieldsend_payloadsend_for_all_actions	JSONFieldr   HEADERS_SCHEMAdictheaders	is_activeDateTimeField
created_at
updated_atr.   r<   rE   rJ   rR   rQ   r/   r-   r   r      si   
 %6$$%AV^^jtuLfjbfG &//!,-$!L\J]
^C&6&&	
)*7L /6..	
'(P f	
,-'78-	G $##	
>I &%%aoDTUVeTfquvJ%%%aoPQRdPeptuJ[	`0 r/   r   c            #       F   e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZe ed       ed      dde eej&                  d         dde ed       ed      dde eej&                  d         dde ed       ed      ddeedde ed       ed      dde eej&                  d         dde ed       ed      ddeedde ed       ed      dde eej&                  d         dd eej&                  d         dddide	 ed       ed      dde eej&                  d         dd eej&                  d         dddide
 ed        ed      dde eej&                  d         dd eej&                  d         dddide ed!       ed      d"deedde ed#       ed      d$de eej&                  d$         dde ed%       ed      d$de eej&                  d$         dd&dd& eej&                  d&         d'ide ed(       ed      d$deeddiZ ej4                  eej8                  d)*      Z ej<                   ed+      ej?                         D  cg c]  \  }}||d,   g c}}} d-d ed.      /      Z  G d0 d1      Z!y2c c}}} w )3r(   PROJECT_CREATEDPROJECT_UPDATEDPROJECT_DELETEDTASKS_CREATEDTASKS_DELETEDANNOTATION_CREATEDANNOTATIONS_CREATEDANNOTATION_UPDATEDANNOTATIONS_DELETEDLABEL_LINK_CREATEDLABEL_LINK_UPDATEDLABEL_LINK_DELETEDzProject created r8   FT)namedescriptionkeymanymodel
serializerr2   zProject updated__self__)rr   rs   rt   ru   rv   rw   project-fieldzProject deletedzTask createdtaskstaskzTask deletedzAnnotation created
annotation)rw   ru   field)rr   rs   rt   ru   rv   rw   ry   znested-fieldszAnnotations createdzAnnotation updatedzAnnotation deletedannotationszLabel link created
label_linkzLabel link updatedlabel)ru   r}   rw   zLabel link deletedr:   r   zaction of webhookrr      zAction value)choicesr   r"   r   c                       e Zd ZdZddggZy)WebhookAction.Metawebhook_actionr%   r&   N)rM   rN   rO   rP   unique_togetherrQ   r/   r-   rR   r     s    #%x01r/   rR   N)"rM   rN   rO   re   rf   rg   rh   ri   rj   rk   rl   rm   rn   ro   rp   rW   r
   r   r   WEBHOOK_SERIALIZERSr   r   r   r	   r7   r   rT   r   rU   r%   	CharFielditemsr&   rR   )r4   rt   values   000r-   r(   r(   `   s   'O'O'O#M#M-/-/--- 	'(R5#H$@$@$KL!%
 	'(R5#H$@$@$KL'
 	'(R51!%
 	n%R5#H$@$@$HI&
 	n%R51&
 	*+R5#H$@$@$NO&"+H,H,H,P"Q!#
  	+,R5#H$@$@$NO&"+H,H,H,P"Q #
  	*+R5#H$@$@$NO&"+H,H,H,P"Q!#
  	*+R5 1&
 	*+R5#H$@$@$NO&
 	*+R5#H$@$@$NO&!$"+H,H,H,Q"R
  	*+R51&
AIGV  f6>>PYZGV	
8?HH*#u#uV}%HN#F2 2 Is   -Jr(   N)core.utils.commonr   core.validatorsr   django.confr   django.core.exceptionsr   	django.dbr   django.utils.translationr   rW   labels_manager.modelsr	   projects.modelsr
   tasks.modelsr   r   serializers_for_hooksr   r]   Modelr   r(   rQ   r/   r-   <module>r      sm    ' /   2  6 + # )
 VX. !Cfll CLh2FLL h2r/   