
    >Tft                         d dl mZ d dlmZmZmZ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Z G d d	e          Z G d
 de          Z G d de          Z G d de          ZdS )    )ContentType)CountFOuterRefQSubqueryValue)RawSQL)Round)count_related)RestrictedQuerySet)ASNRangeQuerySetPrefixQuerySetVLANGroupQuerySetVLANQuerySetc                       e Zd Zd ZdS )r   c                    ddl m} |j                            t	          d          t	          d                                                                        t          d                                        d                              t          d          	                              d
          }|                     t          |                    S )zM
        Annotate the number of ASNs which appear within each range.
           )ASNstartend)asn__gteasn__lte)_r   *)cr   )	asn_count)modelsr   objectsfilterr   order_byannotater	   valuesr   r   )selfr   asnss      3/var/www/html/netbox-4.1.3/netbox/ipam/querysets.pyannotate_asn_countsz$ASNRangeQuerySet.annotate_asn_counts   s     	  {!!g&&e__ " 
 
 (**XXaX))&&++hhsh6L6LVVTW[[ 	
 }}x~~}666    N)__name__
__module____qualname__r'    r(   r&   r   r      s#        7 7 7 7 7r(   r   c                       e Zd Zd ZdS )r   c                 h    |                      t          dd          t          dd                    S )z
        Annotate the depth and number of child prefixes for each Prefix. Cast null VRF values to zero for
        comparison. (NULL != NULL).
        zSELECT COUNT(DISTINCT U0."prefix") AS "c" FROM "ipam_prefix" U0 WHERE (U0."prefix" >> "ipam_prefix"."prefix" AND COALESCE(U0."vrf_id", 0) = COALESCE("ipam_prefix"."vrf_id", 0))r,   zSELECT COUNT(U1."prefix") AS "c" FROM "ipam_prefix" U1 WHERE (U1."prefix" << "ipam_prefix"."prefix" AND COALESCE(U1."vrf_id", 0) = COALESCE("ipam_prefix"."vrf_id", 0)))hierarchy_depthhierarchy_children)r"   r
   )r$   s    r&   annotate_hierarchyz!PrefixQuerySet.annotate_hierarchy%   sQ    
 }}"V    &V      
 
 	
r(   N)r)   r*   r+   r1   r,   r(   r&   r   r   #   s#        
 
 
 
 
r(   r   c                       e Zd Zd ZdS )r   c           	          ddl m} |                     t          |d          t	          t          d          dz  t          d          z  d                    S )	Nr   )VLANgroup
vlan_countg      Y@_total_vlan_ids   )r6   utilization)r   r4   r"   r   r   r   )r$   r4   s     r&   annotate_utilizationz&VLANGroupQuerySet.annotate_utilization>   sb          }}$T733aoo5:K8L8LLaPP  
 
 	
r(   N)r)   r*   r+   r:   r,   r(   r&   r   r   <   s#        
 
 
 
 
r(   r   c                        e Zd Zd Zd Zd ZdS )r   c                    ddl m} t                      }|t          t          j                            dd          |j                  z  }|j        rK|t          t          j                            dd          |j                            d          	          z  }|j	        rK|t          t          j                            dd
          |j	                            d          	          z  }| 
                    t          |j        
                    |                    t          |          z  t          dd          z  t          dd          z            S )z8
        Return all VLANs in the specified site
        r   	VLANGroupdcimsite
scope_typescope_idregionTinclude_selfrB   scope_id__in	sitegroup	group__inr@   group__scope_id__isnullsite__isnullgroup__isnullrO   )r   r>   r   r   r   get_by_natural_keypkrD   get_ancestorsr5   r    )r$   r@   r>   qs       r&   get_for_sitezVLANQuerySet.get_for_siteI   sn    	&%%%%%CC	Q"*==ffMMW
 
 
 	

 ; 	&.AA&(SS![66D6II   A : 	&.AA&+VV!Z5545HH   A
 {{	)00334444LLLd>>>? Dt4445
 
 	
r(   c                    ddl m} t                      }|j        j        rP|t          t
          j                            dd          |j        j                            d                    z  }|j        j	        rP|t          t
          j                            dd          |j        j	                            d                    z  }|t          t
          j                            dd	          |j
        
          z  }|j        rK|t          t
          j                            dd          |j                            d                    z  }|j        r7|t          t
          j                            dd          |j        
          z  }|                     t          |j                            |                    t          |j                  z  t          dd          z  t          dd          z            S )zE
        Return all VLANs available to the specified Device.
        r   r=   r?   rD   TrE   rG   rI   r@   rA   locationrackrJ   rL   rM   rP   )r   r>   r   r@   rD   r   r   rR   rT   r5   site_idrX   rY   rack_idr    )r$   devicer>   rU   s       r&   get_for_devicezVLANQuerySet.get_for_devicef   s    	&%%%%% CC; 	&.AA&(SS#[/==4=PP   A ; 	&.AA&+VV#[.<<$<OO   A 	
Q"*==ffMM^
 
 
 	
 ? 	&.AA&*UU#_:::MM   A ; 	&.AA&&QQ   A {{	)00334446; d>>>? Dt4445
 
 	
r(   c                    ddl m} t                      }|j        p|j        j        }|j        r|t          t
          j                            dd          |j                  z  }|j        j	        r<|t          t
          j                            dd          |j        j
                  z  }|r|t          t
          j                            dd          |j                  z  }|j        rK|t          t
          j                            dd	          |j                            d
                    z  }|j	        rK|t          t
          j                            dd          |j	                            d
                    z  }|j                            |          }t          |          t          d
d
          z  t          d
d
          z  }|r|t          |          z  }|                     |          S )zM
        Return all VLANs available to the specified VirtualMachine.
        r   r=   virtualizationclusterrA   clustergroupr?   r@   rD   TrE   rG   rI   rJ   rM   rP   rL   )r   r>   r   r@   r`   r   r   rR   
cluster_idr5   group_idrS   rD   rT   r    )r$   vmr>   rU   r@   vlan_groupss         r&   get_for_virtualmachinez#VLANQuerySet.get_for_virtualmachine   s&    	&%%%%% CCw)"*/: 
	&.AABRT]^^   A z Q*2EEFVXfggZ0     	&.AA&&QQ   A { Q*2EEfhWW!%!:!:!:!M!M    z Q*2EEfkZZ!%!9!9t!9!L!L     '..q11 $$$d>>>?Dt4445 	

  	A{{1~~r(   N)r)   r*   r+   rV   r]   rf   r,   r(   r&   r   r   G   sB        
 
 
:'
 '
 '
R/ / / / /r(   r   N)"django.contrib.contenttypes.modelsr   django.db.modelsr   r   r   r   r   r	   django.db.models.expressionsr
   django.db.models.functionsr   utilities.queryr   utilities.querysetsr   __all__r   r   r   r   r,   r(   r&   <module>rn      sV   : : : : : : C C C C C C C C C C C C C C C C / / / / / / , , , , , , ) ) ) ) ) ) 2 2 2 2 2 27 7 7 7 7) 7 7 7$
 
 
 
 
' 
 
 
2
 
 
 
 
* 
 
 
w w w w w% w w w w wr(   