
    >Tf[                         d dl 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 dlmZ d dlT d d	lmZ d
Z e j        d          Z G d de          Z G d deeej                  ZdS )    N)GenericForeignKey)modelstransaction)gettext_lazy)	MPTTModel)ChangeActionChoices)ChangeLoggedModel)*)deserialize_object)BranchStagedChangeznetbox.stagingc                       e Zd ZdZ ej         ed          dd          Z ej         ed          dd          Z ej	        d	ej
        dd
          Z G d d          Zd Zd ZdS )r   z0
    A collection of related StagedChanges.
    named   T)verbose_name
max_lengthuniquedescription   )r   r   blankz
users.User)to	on_deleter   nullc                   >    e Zd ZdZ ed          Z ed          ZdS )Branch.Meta)r   branchbranchesN)__name__
__module____qualname__ordering_r   verbose_name_plural     :/var/www/html/netbox-4.1.3/netbox/extras/models/staging.pyMetar   *   s0        q{{a
mmr%   r'   c                 &    | j          d| j         dS )N ())r   pkselfs    r&   __str__zBranch.__str__/   s    )))tw))))r%   c                 N   t                               d|             t          j                    5  | j                                        D ]}|                                 	 d d d            n# 1 swxY w Y   | j                                                                         d S )NzMerging changes in branch )loggerinfor   atomicstaged_changesallapplydelete)r-   changes     r&   mergezBranch.merge2   s    777888!! 	 	-1133  	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!!((*****s   1A//A36A3N)r   r   r    __doc__r   	CharFieldr"   r   r   
ForeignKeySET_NULLuserr'   r.   r8   r$   r%   r&   r   r      s          6QvYY  D
 #&"Q}%%  K
 6/	  D, , , , , , , ,
* * *+ + + + +r%   r   c                   p   e Zd ZdZ ej        eej        d          Z ej	         e
d          de          Z ej        dej        d          Z ej        d	d	
          Z edd          Z ej         e
d          d	d	          Z G d d          Zd Zed             Zd Zd	e_        d ZdS )r   z
    The prepared creation, modification, or deletion of an object to be applied to the active database at a
    future point.
    r3   )r   r   related_nameaction   )r   r   choiceszcontenttypes.ContentType+T)r   r   object_type	object_id)ct_fieldfk_fielddata)r   r   r   c                   b    e Zd ZdZ ej        d          fZ ed          Z ed          Z	dS )StagedChange.Metar+   )rD   rE   )fieldszstaged changezstaged changesN)
r   r   r    r!   r   Indexindexesr"   r   r#   r$   r%   r&   r'   rJ   \   sQ        FL <===
 q))a 011r%   r'   c                     |                                  }| j                                        \  }}| d| d| d| j         dS )N .r)   r*   )get_action_displayrD   natural_keyrE   )r-   r@   	app_label
model_names       r&   r.   zStagedChange.__str__d   sU    ((** $ 0 < < > >	:FF9FFzFFT^FFFFr%   c                 4    | j                                         S N)rD   model_classr,   s    r&   modelzStagedChange.modeli   s    ++---r%   c                 X   | j         t          j        k    rdt          | j        | j        | j                  }t                              d| j        j	        j
         d|            |                                 | j         t          j        k    rdt          | j        | j        | j                  }t                              d| j        j	        j
         d|            |                                 | j         t          j        k    rh| j        j                            | j                  }t                              d| j        j	        j
         d|            |                                 t#          | j        t$                    r | j        j                                         dS dS )zO
        Apply the staged create/update/delete action to the database.
        rK   z	Creating rP   z	Updating z	Deleting N)r@   r   ACTION_CREATEr   rY   rH   rE   r0   r1   _metar   saveACTION_UPDATEACTION_DELETEobjectsgetr6   
issubclassr   rebuild)r-   instances     r&   r5   zStagedChange.applym   sp    ;-;;;)$*diDNSSSHKKNDJ$4$ANNHNNOOOMMOOO;-;;;)$*diDNSSSHKKNDJ$4$ANNHNNOOOMMOOO;-;;;z)---@@HKKNDJ$4$ANNHNNOOOOO dj),, 	)J&&(((((	) 	)r%   c                 J    t           j                            | j                  S rW   )r   colorsra   r@   r,   s    r&   get_action_colorzStagedChange.get_action_color   s    ")--dk:::r%   N)r   r   r    r9   r   r;   r   CASCADEr   r:   r"   r   r@   rD   PositiveBigIntegerFieldrE   r   object	JSONFieldrH   r'   r.   propertyrY   r5   alters_datarg   r$   r%   r&   r   r   :   s         V.%  F
 VQx[[#  F
 $&#%.  K
 /.  I   F 6QvYY  D2 2 2 2 2 2 2 2G G G
 . . X.) ) ). E; ; ; ; ;r%   r   )logging"django.contrib.contenttypes.fieldsr   	django.dbr   r   django.utils.translationr   r"   mptt.modelsr   extras.choicesr   netbox.modelsr	   netbox.models.featuresutilities.serializationr   __all__	getLoggerr0   r   CustomValidationMixinEventRulesMixinModelr   r$   r%   r&   <module>r|      s+    @ @ @ @ @ @ ) ) ) ) ) ) ) ) 6 6 6 6 6 6 ! ! ! ! ! ! . . . . . . + + + + + + $ $ $ $ 6 6 6 6 6 6
 
	+	,	,"+ "+ "+ "+ "+ "+ "+ "+JM; M; M; M; M;(/6< M; M; M; M; M;r%   