
    >Tf                     &   d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	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T 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l%m&Z& ddl'm(Z( dZ) e            Z* e            Z+ e            Z, e            Z- e            Z. ee	ef          d             Z/ ee
          d             Z0 ee.          d             Z1 ee-          d             Z2 ee	e(          d             Z3dS )    N)ContentType)ValidationError)ManyToManyRel)m2m_changed	post_save
pre_delete)receiverSignal)gettext_lazy)model_deletesmodel_insertsmodel_updates)ObjectChangeActionChoices)*)ObjectChange)enqueue_event)run_validators)
get_config)current_requestevents_queue)ChangeLoggingMixin)AbortRequest   )ConfigRevision)clear_eventsjob_end	job_start	post_syncpre_syncc                    d}t          |d          sdS t          j                    }|dS |                    d          rt          }n7d|v rt          }n+|                    d          dv r|d         r
d}t          }ndS t          t
          j        t          t
          j        t          t
          j	        i|         }|
                    |          }|r~t          j                            t          j                            |          |j        |j        	                                          x}r!|j        |_        |                                 n5|r3|j        r,|j        |_        |j        |_        |                                 |r|                                 t3          j                    }	t5          |	||j        |j        |           t3          j        |	           |t          k    r2t9          j        |j        j                                                    dS |t          k    r2tC          j        |j        j                                                    dS dS )
z5
    Fires when an object is created or updated.
    Fto_objectchangeNcreatedaction)post_addpost_removepk_setT)changed_object_typechanged_object_id
request_id)"hasattrr   getOBJECT_CREATEDOBJECT_UPDATEDr   ACTION_CREATEACTION_UPDATEOBJECT_DELETEDACTION_DELETEr!   r   objectsfilterr   get_for_modelpkidfirstpostchange_datasavehas_changesuserr)   refresh_from_dbr   r   setr   labels_meta
model_nameincr   )
senderinstancekwargsr   request
event_typer#   objectchangeprev_changequeues
             1/var/www/html/netbox-4.1.3/netbox/core/signals.pyhandle_changed_objectrK   .   s[   
 K8.//  !##G zz) 	#

	f		#

	H		!<	<	<AQ	<#

 	1?1?1? 	F
 ++F33L  #+22 + 3 A A( K K&kz 3 
 
 %''		 '3&B#	 ,2 #L")*  #  """ E%7<ZHHHU ^##X^677;;=====	~	%	%X^677;;===== 
&	%    c                    | j         j         d| j         j         }t                      j                            |g           }	 t          ||           nB# t          $ r5}t          t          d          
                    |                    d}~ww xY wt          j                    }|dS t          |d          rt          |d          r%t          |dd          s|                                 |                    t           j                  }|j        |_        |j        |_        |                                 |j         j        D ]}t/          |          t0          ur|j        }	|j        j        }
t9          |	t:                    sB |	j        j        di |
|j         iD ]9}|                                 t          ||
          !                    |           :tE          j                    }tG          |||j        |j        tH                     tE          j%        |           tM          j'        |j         j                  (                                 dS )	z*
    Fires when an object is deleted.
    .z5Deletion is prevented by a protection rule: {message})messageNr!   snapshot_prechange_snapshot ))r?   	app_labelr@   r   PROTECTION_RULESr+   r   r   r   _formatr   r*   getattrrP   r!   r   r1   r;   r6   r)   r9   related_objectstyper   related_modelremote_fieldname
issubclassr   r2   r3   r5   remover   r   r0   r=   r   r>   rA   )rB   rC   rD   r@   
validatorserE   rG   relationrZ   related_field_nameobjrI   s                rJ   handle_deleted_objectrd   p   se    L*FFV\-DFFJ.22:rBBJ
x,,,, 
 
 
EFFMMVWMXX
 
 	

 !##G x*++ 8Z(( 	 CXZ^1_1_ 	 //0I0WXX#L")* N2 > >>>.. .%27-);<< 	 /=(/TT3Ex{2STT 	> 	>CLLNNNC+,,33H====	>
 E%7<^LLLU 2337799999s   A 
B0BBc                     t          j        d          }|                    dt          t	          j                               d|  d           t	          j        i            dS )zP
    Delete any queued events (e.g. because of an aborted bulk transaction)
    eventsz	Clearing z queued events ()N)logging	getLoggerinfolenr   r+   r=   )rB   rD   loggers      rJ   clear_events_queuerm      sb    
 x((F
KKNC 0 2 233NNVNNNOOORrL   c                     ddl m} |j                            |                               d          D ]}|j                            d           dS )zh
    Automatically synchronize any DataFiles with AutoSyncRecords after synchronizing a DataSource.
    r   )AutoSyncRecord)datafile__sourceobjectT)r9   N)modelsro   r2   r3   prefetch_relatedrq   sync)rC   rD   ro   autosyncs       rJ   	auto_syncrv      sn    
 '&&&&&"*1181LL]]^fgg ( ($''''( (rL   )rB   c                 .    |                                  dS )zV
    Update the cached NetBox configuration when a new ConfigRevision is created.
    N)activate)rB   rC   rD   s      rJ   update_configry      s    
 rL   )4rh   "django.contrib.contenttypes.modelsr   django.core.exceptionsr   'django.db.models.fields.reverse_relatedr   django.db.models.signalsr   r   r   django.dispatchr	   r
   django.utils.translationr   rU   django_prometheus.modelsr   r   r   core.choicesr   core.eventscore.modelsr   extras.eventsr   extras.utilsr   netbox.configr   netbox.contextr   r   netbox.models.featuresr   utilities.exceptionsr   rr   r   __all__r   r   r   r   r   rK   rd   rm   rv   ry   rR   rL   rJ   <module>r      sv    : : : : : : 2 2 2 2 2 2 A A A A A A G G G G G G G G G G , , , , , , , , 6 6 6 6 6 6 P P P P P P P P P P 2 2 2 2 2 2     $ $ $ $ $ $ ' ' ' ' ' ' ' ' ' ' ' ' $ $ $ $ $ $ 8 8 8 8 8 8 8 8 5 5 5 5 5 5 - - - - - - " " " " " " FHH	
&(( 688FHH	 vxx 
9k
"##>> >> $#>>B 
*7: 7: 7:t 
,   
)( ( ( 
)N+++  ,+  rL   