
    >Tf                         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Z G d de          Z G d	 d
e          Z G d de          ZdS )    )JSONBAgg)OuterRefSubqueryQ)
TaggedItem)EmptyGroupByJSONBAgg)RestrictedQuerySet)ConfigContextModelQuerySetConfigContextQuerySetNotificationQuerySetc                       e Zd ZddZdS )r   Fc                 
   |j         }t          |dd          }t          |dd          }t          |dd          }t          |dd          }t          |dd          }|j        r|j        j        nd}	t          |j        dd          }
|
r|
                    d	          ng }t          |j        dd          }|r|                    d	          ng }|                     t          |
          t          d          z  t          |          t          d          z  t          |j                  t          d          z  t          |          t          d          z  t          |          t          d          z  t          |          t          d          z  t          |j                  t          d          z  t          |          t          d          z  t          |          t          d          z  t          |          t          d          z  t          |	          t          d          z  t          |j                  t          d          z  t          |j	        
                                          t          d          z  d                              dd                                          }|r-|                    t          dddg                    d          S |S )!z
        Return all applicable ConfigContexts for a given object. Only active ConfigContexts will be included.

        Args:
          aggregate_data: If True, use the JSONBAgg aggregate function to return only the list of JSON data objects
        device_typeNlocationclustertypegroupregionT)include_self)regions__inregions)site_groups__insite_groupssites	locationsdevice_typesroles	platformscluster_typescluster_groupsclusterstenant_groupstenants)tags__slug__intags	is_activeweightnamedataorderingconfig_context_datar;   )rolegetattrtenantr   siteget_ancestorsfilterr   platformr2   slugsorder_bydistinct	aggregater   )selfobjaggregate_datar<   r   r   r   cluster_typecluster_grouptenant_groupr   r   	sitegroup
sitegroupsquerysets                  5/var/www/html/netbox-4.1.3/netbox/extras/querysets.pyget_for_objectz$ConfigContextQuerySet.get_for_object   s    x c=$773
D11 #y$//w55$77 ,/:?sz''4 8T22=CK&&&D&999 CHgt44	CLTY,,$,???RT
;;'"""Qt___4j)))A$,?,?,??CH-!!!A$5$5$55;'''!*>*>*>>DMMMADMMM)%%%D(9(9(99L)))AD,A,A,AA]+++at.D.D.DDw!T"2"2"22L)))AD,A,A,AAcj!!!AdOOO3SX^^--...=  
 
 (8V
$
$XXZZ 	"  	%%%$,Vx>P$Q$Q$Q &  #% %     N)F)__name__
__module____qualname__rQ    rR   rP   r   r      s(        4 4 4 4 4 4rR   r   c                       e Zd ZdZd Zd ZdS )r
   a  
    QuerySet manager used by models which support ConfigContext (device and virtual machine).

    Includes a method which appends an annotation of aggregated config context JSON data objects. This is
    implemented as a subquery which performs all the joins necessary to filter relevant config context objects.
    This offers a substantial performance gain over ConfigContextQuerySet.get_for_object() when dealing with
    multiple objects. This allows the annotation to be entirely optional.
    c                 `   ddl m} |                     t          |j                            |                                                               t          dddg                                        d          	                                          	          
                                S )
zE
        Attach the subquery annotation to the base queryset
        r   )ConfigContextr7   r5   r6   r8   )_datarZ   r:   )extras.modelsrY   annotater   objectsrA   _get_config_context_filtersr   valuesrD   rE   )rG   rY   s     rP   annotate_config_context_dataz7ConfigContextModelQuerySet.annotate_config_context_dataQ   s     	0/////}} (%,,4466 (.v6@RSSS   &//((**! !  
 
 (**	rR   c                 T   t          t          d                    | j        j        j        | j        j        j        d}t          t          t          d                    t          d           z  t          t          d                    t          d           z  t          t          d                    t          d           z  t          t          d	          
          t          d 
          z  t          t          d                    t          d           z  t          t          d                    t          d           z  t          t          t          j        j	        d+i |
                    dd                              t          d           z  d          }| j        j        j        dk    r|                    t          t          d                    t          d           z  t
          j                   |                    t          t          d                    t          d           z  t
          j                   nC| j        j        j        dk    r.|                    t          d           t
          j                   |                    t          t          d                    t          d           z  t
          j                   |                    t          t          d                    t          d           z  t
          j                   |                    t          t          d          t          d           t          d!          t          d"          #          t          d $          z  t
          j                   |                    t          t          d%          t          d&          t          d'          t          d(          )          t          d *          z  t
          j                   |S ),Npk)	object_idcontent_type__app_labelcontent_type__modelrB   r$   cluster__typer&   cluster__groupr(   r   r*   tenant__groupr,   r>   r.   tag_idT)flat)tags__pk__inr1   r3   devicer   r   r   r    virtualmachiner<   r"   r?   r   site__region__tree_idsite__region__levelsite__region__lftsite__region__rght)regions__tree_idregions__level__lteregions__lft__lteregions__rght__gter   site__group__tree_idsite__group__levelsite__group__lftsite__group__rght)site_groups__tree_idsite_groups__level__ltesite_groups__lft__ltesite_groups__rght__gter   rV   )r   model_meta	app_label
model_namer   r   r   r]   rA   values_listaddAND)rG   tag_query_filters
base_querys      rP   r^   z6ConfigContextModelQuerySet._get_config_context_filters`   s    "(4..11'+z'7'A#':#3#>
 

 ,,---D0A0A0AAH_556669N9N9NNX&6778881D;Q;Q;QQx	**+++a.>.>.>>H_556669N9N9NNhx(()))AdOOO;%&-  + !k ! "   	 	 	 t	 #
 
 

( :&(22NNA(<(<===D@Q@Q@QQTUTYZZZNNA8M+B+BCCCaUYFZFZFZZ]^]bccccZ(,<<<NN1$///777 0 0111ADMMMAAEJJJ 0 0111ADMMMAAEJJJ!)*A!B!B$,-B$C$C"*+>"?"?#+,@#A#A	  
 $  E	
 	
 	
 	%-.D%E%E(01E(F(F&./A&B&B'/0C'D'D	  
 d###$ E	
 	
 	
 rR   N)rS   rT   rU   __doc__r`   r^   rV   rR   rP   r
   r
   H   s<           9 9 9 9 9rR   r
   c                       e Zd Zd ZdS )r   c                 .    |                      d          S )z3
        Return only unread notifications.
        T)read__isnull)rA   )rG   s    rP   unreadzNotificationQuerySet.unread   s     {{{---rR   N)rS   rT   rU   r   rV   rR   rP   r   r      s#        . . . . .rR   r   N)"django.contrib.postgres.aggregatesr   django.db.modelsr   r   r   extras.models.tagsr   utilities.query_functionsr   utilities.querysetsr	   __all__r   r
   r   rV   rR   rP   <module>r      s   7 7 7 7 7 7 2 2 2 2 2 2 2 2 2 2 ) ) ) ) ) ) : : : : : : 2 2 2 2 2 26 6 6 6 6. 6 6 6rQ Q Q Q Q!3 Q Q Qh. . . . .- . . . . .rR   