
    >Tf                        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 d d
lmZ d dlmZ d dlmZ d dlmZ dZd Z G d de	j                  Z G d de          Z G d de	j                  Z dS )    )cached_property)settings)GenericForeignKey)ValidationError)modelsreverse)gettext_lazy)
ObjectType)NotificationQuerySet)ChangeLoggedModel)registry)User)RestrictedQuerySet)NotificationNotificationGroupSubscriptionc                  T    d t           d                                         D             S )zC
    Compile a list of choices from all registered event types
    c                 &    g | ]\  }}||j         fS  )text).0nameevents      @/var/www/html/netbox-4.1.3/netbox/extras/models/notifications.py
<listcomp>z*get_event_type_choices.<locals>.<listcomp>   s3       D% 
uz      event_types)r   itemsr   r   r   get_event_type_choicesr       s4     #M288::   r   c                       e Zd ZdZ ej         ed          d          Z ej         ed          dd          Z ej	        e
j        ej        d          Z ej	        d	ej        
          Z ej                    Z edd          Z ej        dd          Z ej         ed          de          Z ej                    Z G d d          Zd Zd Z fdZ fdZe d             Z!e"d             Z# xZ$S )r   zT
    A notification message for a User relating to a specific object in NetBox.
    createdTverbose_nameauto_now_addread)r$   nullblanknotificationsto	on_deleterelated_namecontenttypes.ContentTyper+   r,   object_type	object_idct_fieldfk_field   F)
max_lengtheditabler   2   )r$   r6   choicesc                       e Zd ZdZ ej        d          fZ ej        dd          fZ e	d          Z
 e	d          Zd	S )
Notification.Meta)-createdpkr0   r1   fieldsr0   r1   user2%(app_label)s_%(class)s_unique_per_object_and_userr@   r   notificationr)   N__name__
__module____qualname__orderingr   IndexindexesUniqueConstraintconstraints_r$   verbose_name_pluralr   r   r   Metar;   I   sv        %FL <===
 $F#;I  
 q((a00r   rQ   c                     | j         S N)object_reprselfs    r   __str__zNotification.__str__W   s    r   c                      t          d          S )Nzaccount:notificationsr   rU   s    r   get_absolute_urlzNotification.get_absolute_urlZ       .///r   c                     t                                                       | j        t          j                            d          vr5t          t          d                              | j                            d S Nr)   z;Objects of this type ({type}) do not support notifications.)type	supercleanr0   r   objectswith_featurer   rO   formatrV   	__class__s    r   r`   zNotification.clean]   q     :#5#B#B?#S#SSS!OPPWW]a]mWnn   TSr   c                     | j         r|                     | j                   | _         t                      j        |i | d S rS   )objectget_object_reprrT   r_   save)rV   argskwargsre   s      r   rj   zNotification.savef   sG    ; 	A#33DK@@Dd%f%%%%%r   c                 L    t           d                             | j                  S )zQ
        Returns the registered Event which triggered this Notification.
        r   )r   get
event_typerU   s    r   r   zNotification.eventm   s    
 &**4?;;;r   c                 0    t          |          d d         S )Nr5   )str)clsobjs     r   ri   zNotification.get_object_reprt   s    3xx~r   )%rG   rH   rI   __doc__r   DateTimeFieldrO   r"   r&   
ForeignKeyr   AUTH_USER_MODELCASCADErB   PROTECTr0   PositiveBigIntegerFieldr1   r   rh   	CharFieldrT   r    ro   r   
as_managerra   rQ   rW   rY   r`   rj   r   r   classmethodri   __classcell__re   s   @r   r   r   "   s         #f"Qy\\  G  6QvYY  D
 6#.$  D
 $&#%.  K /.00I  F #&"  K "!QwZZ&  J ."-//G1 1 1 1 1 1 1 1     0 0 0    & & & & & < < _<   [    r   r   c                   d   e Zd ZdZ ej         ed          dd          Z ej         ed          dd          Z ej	        d	 ed
          dd          Z
 ej	        d ed          dd          Z ej                    Z G d d          Zd Zd Zed             Zd Zde_        dS )r   zW
    A collection of users and/or groups to be informed for certain notifications.
    r   d   T)r$   r6   uniquedescriptionr5   )r$   r6   r(   zusers.Groupgroupsnotification_groups)r+   r$   r(   r-   z
users.Userusersc                   >    e Zd ZdZ ed          Z ed          ZdS )NotificationGroup.Metar   znotification groupznotification groupsN)rG   rH   rI   rJ   rO   r$   rP   r   r   r   rQ   r      s6        q-..a 566r   rQ   c                     | j         S rS   r   rU   s    r   rW   zNotificationGroup.__str__   s
    yr   c                 0    t          d| j        g          S )Nzextras:notificationgroup)rk   )r	   r=   rU   s    r   rY   z"NotificationGroup.get_absolute_url   s    1	BBBBr   c                     | j                             t          j                            | j                                                                                d          S )zI
        Return all Users who belong to this notification group.
        )
groups__inusername)r   unionr   ra   filterr   allorder_byrU   s    r   memberszNotificationGroup.members   sM    
 zL4;??+<+<==
 

(:

	r   c                 h    t           j                            fd| j        D                        dS )zJ
        Bulk-create Notifications for all members of this group.
        c                 ,    g | ]}t          dd |iS )rB   r   )r   )r   memberrl   s     r   r   z,NotificationGroup.notify.<locals>.<listcomp>   s<     *
 *
 *
 //f///*
 *
 *
r   N)r   ra   bulk_creater   )rV   rl   s    `r   notifyzNotificationGroup.notify   sR     	(( *
 *
 *
 *
,*
 *
 *
 	 	 	 	 	r   N)rG   rH   rI   rt   r   r{   rO   r   r   ManyToManyFieldr   r   r   r|   ra   rQ   rW   rY   r   r   r   alters_datar   r   r   r   r   y   sb         6QvYY  D
 #&"Q}%%  K
 $V#Qx[[*	  F #F"QwZZ*	  E , +--G7 7 7 7 7 7 7 7
  C C C   _   Fr   r   c                   @    e Zd ZdZ ej         ed          d          Z ej        e	j
        ej        d          Z ej        dej                  Z ej                    Z ed	d
          Z ej                    Z G d d          Z fdZd Z fdZ xZS )r   zR
    A User's subscription to a particular object, to be notified of changes.
    r"   Tr#   subscriptionsr*   r.   r/   r0   r1   r2   c                       e Zd ZdZ ej        d          fZ ej        dd          fZ e	d          Z
 e	d          Zd	S )
Subscription.Meta)r<   rB   r>   r?   rA   rC   rD   subscriptionr   NrF   r   r   r   rQ   r      sv        'FL <===
 $F#;I  
 q((a00r   rQ   c                 z    | j         rt          | j                   S t                                                      S rS   )rh   rq   r_   rW   rd   s    r   rW   zSubscription.__str__   s1    ; 	$t{###ww   r   c                      t          d          S )Nzaccount:subscriptionsr   rU   s    r   rY   zSubscription.get_absolute_url   rZ   r   c                     t                                                       | j        t          j                            d          vr5t          t          d                              | j                            d S r\   r^   rd   s    r   r`   zSubscription.clean   rf   r   )rG   rH   rI   rt   r   ru   rO   r"   rv   r   rw   rx   rB   ry   r0   rz   r1   r   rh   r   r|   ra   rQ   rW   rY   r`   r~   r   s   @r   r   r      sI         #f"Qy\\  G 6#.$  D
 $&#%.  K /.00I  F
 , +--G1 1 1 1 1 1 1 1! ! ! ! !
0 0 0        r   r   N)!	functoolsr   django.confr   "django.contrib.contenttypes.fieldsr   django.core.exceptionsr   	django.dbr   django.urlsr	   django.utils.translationr
   rO   core.modelsr   extras.querysetsr   netbox.modelsr   netbox.registryr   users.modelsr   utilities.querysetsr   __all__r    Modelr   r   r   r   r   r   <module>r      s   % % % % % %             @ @ @ @ @ @ 2 2 2 2 2 2             6 6 6 6 6 6 " " " " " " 1 1 1 1 1 1 + + + + + + $ $ $ $ $ $       2 2 2 2 2 2  T T T T T6< T T Tn9 9 9 9 9) 9 9 9x6 6 6 6 66< 6 6 6 6 6r   