
    >Tf                     b   d dl mZ d dlmZmZmZ d dlmZ d dlT d dl	m
Z
 d dlmZmZ d dl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lmZ ddlmZmZ ddlm Z  d Z!d Z"d Z#d Z$ ej%        e#e            ej%        e$e            ej%        e!ej&        j'                    ej%        e"ej&        j'                    ee          d             Z( eee          d             Z) ee          d             Z* ee          d             Z+ eeef          d             Z,dS )    )ContentType)m2m_changed	post_save
pre_delete)receiver)*)
ObjectType)job_end	job_start)process_event_rules)	EventRuleNotificationSubscription)
get_config)registry)
post_clean)AbortRequest   )CustomField
TaggedItem)run_validatorsc                 |    |dk    r5|                      t          j                            |                     dS dS )zo
    Handle the population of default/null values when a CustomField is added to one or more ContentTypes.
    post_addpk__inN)populate_initial_datar   objectsfilterinstanceactionpk_setkwargss       3/var/www/html/netbox-4.1.3/netbox/extras/signals.pyhandle_cf_added_obj_typesr%      sE     &&{':'A'A'A'P'PQQQQQ     c                 |    |dk    r5|                      t          j                            |                     dS dS )zr
    Handle the cleanup of old custom field data when a CustomField is removed from one or more ContentTypes.
    post_remover   N)remove_stale_datar   r   r   r   s       r$   handle_cf_removed_obj_typesr*      sE     "";#6#=#=V#=#L#LMMMMM r&   c                 t    |s3| j         | j        k    r%|                     | j        | j                    dS dS dS )z\
    Handle the renaming of custom field data on objects when a CustomField is renamed.
    )old_namenew_nameN)name_namerename_object_data)r    createdr#   s      r$   handle_cf_renamedr2   &   sP      Ux}66##X^hm#TTTTTU U66r&   c                 ^    |                      | j                                                   dS )zT
    Handle the cleanup of old custom field data when a CustomField is deleted.
    N)r)   object_typesall)r    r#   s     r$   handle_cf_deletedr6   .   s-     x488::;;;;;r&   )senderc                     | j         j         d| j         j         }t                      j                            |g           }t          ||           dS )zP
    Run any custom validation rules for the model prior to calling save().
    .N)_meta	app_label
model_namer   CUSTOM_VALIDATORSgetr   )r7   r    r#   r<   
validatorss        r$   run_save_validatorsr@   ?   sS    
 L*FFV\-DFFJ/33JCCJ8Z(((((r&   c                 $   |dk    rdS t           j                            |          }|j                            |d                              d          D ]8}||j                                        vrt          d| d|j         d          9dS )	zr
    Validate that any Tags being assigned to the instance are not restricted to non-applicable object types.
    pre_addNF)r   object_types__isnullr4   zTag z cannot be assigned to z	 objects.)	r	   r   get_for_modelr   prefetch_relatedr4   r5   r   model)r7   r    r!   rF   r"   r#   cttags           r$   validate_assigned_tagsrI   N   s    
 			)	)(	3	3B}##6#NN__`noo W WS%))++++UcUU"(UUUVVV ,W Wr&   c                     t           j                            t          gd| j                  }| j        r| j        j        nd}t          || j        t          | j        |           dS )z0
    Process event rules for jobs starting.
    Tevent_types__containsenabledr4   Nevent_rulesobject_type
event_typedatausername)	r   r   r   JOB_STARTEDrP   userrS   r   rR   r7   r#   rO   rS   s       r$   process_job_start_event_rulesrW   `   s|    
 #***m' +  K
 (.{<v{##H&[     r&   c                     t           j                            t          gd| j                  }| j        r| j        j        nd}t          || j        t          | j        |           dS )z3
    Process event rules for jobs terminating.
    TrK   NrN   )	r   r   r   JOB_COMPLETEDrP   rU   rS   r   rR   rV   s       r$   process_job_end_event_rulesrZ   t   s|    
 #**,o' +  K
 (.{<v{##H& [     r&   c                 N   |                     d          rd S d|v rt          nt          t          j                                      }|j        t          d         d                              |j        g           vrd S t          j        
                    |j                                      dd          }|sd S t          j        
                    |j        |                                           t          j                            fd	|D                        d S )
Nr1   model_featuresnotifications)rP   	object_idrU   T)flat)rP   r^   user__inc           	      Z    g | ]'}t          |t          j                             (S ))user_idobjectobject_reprrQ   )r   get_object_repr).0rU   rQ   r    s     r$   
<listcomp>z)notify_object_changed.<locals>.<listcomp>   sQ     & & &  	$4X>>!		
 	
 	
& & &r&   )r>   OBJECT_UPDATEDOBJECT_DELETEDr   r   rD   rF   r   r;   r   r   pkvalues_listr   deletebulk_create)r7   r    r#   rG   subscribed_usersrQ   s    `   @r$   notify_object_changedro      sE    zz)  F#

#
 
		*	*8	4	4B	xx 01/BFFr|UWXXXX $+22rX[2YYeeflswexx  B(+P`aahhjjj $$ & & & & & %& & &     r&   N)-"django.contrib.contenttypes.modelsr   django.db.models.signalsr   r   r   django.dispatchr   core.eventscore.modelsr	   core.signalsr
   r   extras.eventsr   extras.modelsr   r   r   netbox.configr   netbox.registryr   netbox.signalsr   utilities.exceptionsr   modelsr   r   utilsr   r%   r*   r2   r6   connectr4   throughr@   rI   rW   rZ   ro    r&   r$   <module>r      s   : : : : : : G G G G G G G G G G $ $ $ $ $ $     " " " " " " + + + + + + + + - - - - - - ? ? ? ? ? ? ? ? ? ? $ $ $ $ $ $ $ $ $ $ $ $ % % % % % % - - - - - - + + + + + + + + ! ! ! ! ! !R R RN N NU U U< < < 	 #K 8 8 8 8 
 $[ 9 9 9 9  -k6N6V W W W W  /8P8X Y Y Y Y 
*) ) ) 
+j)))
W 
W *)
W" 
)  & 
'  . 
9j
!""! ! #"! ! !r&   