
    >Tfґ                        d dl Z d dl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mZmZmZmZ d dlmZmZmZ d dlmZ d dlm Z m!Z!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z' d dl(m)Z) ddl*T ddl+T dZ, G d dee          Z- G d dee          Z. G d de          Z/ G d dee          Z0 G d dee          Z1 G d dee          Z2 G d d e          Z3 G d! d"ee          Z4 G d# d$ee          Z5 G d% d&ee          Z6 G d' d(e          Z7 G d) d*e          Z8 G d+ d,e          Z9 G d- d.ee          Z: G d/ d0e          Z; G d1 d2e          Z< G d3 d4e j=                  Z>dS )5    N)ContentType)ValidationError)Q)gettext)OpenApiTypes)extend_schema_field)AddrFormatError)Provider)Device	InterfaceRegionSite	SiteGroup)ChangeLoggedModelFilterSetOrganizationalModelFilterSetNetBoxModelFilterSet)TenancyFilterSet)ContentTypeFilterMultiValueCharFilterMultiValueNumberFilterNumericArrayFilterTreeNodeMultipleChoiceFilter)VirtualMachineVMInterface)L2VPN   )*)AggregateFilterSetASNFilterSetASNRangeFilterSetFHRPGroupAssignmentFilterSetFHRPGroupFilterSetIPAddressFilterSetIPRangeFilterSetPrefixFilterSetPrimaryIPFilterSetRIRFilterSetRoleFilterSetRouteTargetFilterSetServiceFilterSetServiceTemplateFilterSetVLANFilterSetVLANGroupFilterSetVRFFilterSetc                      e Zd Z ej        dej                                         ed                    Z	 ej        dej                                        d ed                    Z
 ej        dej                                         ed	                    Z ej        d
ej                                        d ed                    Zd Z G d d          ZdS )r.   import_targetszImport target
field_namequerysetlabelimport_targets__namenamezImport target (name)r2   r3   to_field_namer4   export_targetszExport targetexport_targets__namezExport target (name)c                     |                                 s|S |                    t          |          t          |          z  t          |          z            S )Nname__icontains)rd__icontainsdescription__icontainsstripfilterr   selfr3   r6   values       4/var/www/html/netbox-4.1.3/netbox/ipam/filtersets.pysearchzVRFFilterSet.searchD   sa    {{}} 	Oe$$$E"""#U+++,
 
 	
    c                       e Zd ZeZdZdS )VRFFilterSet.Meta)idr6   rdenforce_uniquedescriptionN)__name__
__module____qualname__VRFmodelfields rI   rG   MetarK   M   s        FrI   rW   N)rP   rQ   rR   django_filtersModelMultipleChoiceFilterRouteTargetobjectsall_import_target_idimport_targetexport_target_idexport_targetrH   rW   rV   rI   rG   r.   r.   ,   sR       ?~?#$((**a    
 =N<)$((**a&''	  M @~?#$((**a    
 =N<)$((**a&''	  M
 
 
G G G G G G G G G GrI   r.   c                   f   e Zd Z ej        dej                                         ed                    Z	 ej        dej                                        d ed                    Z
 ej        dej                                         ed	                    Z ej        d
ej                                        d ed                    Z ej        dej                                         ed                    Z ej        dej                                        d ed                    Z ej        dej                                         ed                    Z ej        dej                                        d ed                    Zd Z G d d          ZdS )r)   importing_vrfszImporting VRFr1   importing_vrfs__rdrM   zImport VRF (RD)r7   exporting_vrfszExporting VRFexporting_vrfs__rdzExport VRF (RD)importing_l2vpnszImporting L2VPNimporting_l2vpns__identifier
identifierzImporting L2VPN (identifier)exporting_l2vpnszExporting L2VPNexporting_l2vpns__identifierzExporting L2VPN (identifier)c                     |                                 s|S |                    t          |          t          |          z            S Nr<   r?   rA   rD   s       rG   rH   zRouteTargetFilterSet.search   sN    {{}} 	Oe$$$U+++,
 
 	
rI   c                       e Zd ZeZdZdS )RouteTargetFilterSet.Meta)rL   r6   rO   N)rP   rQ   rR   rZ   rT   rU   rV   rI   rG   rW   ro      s        .rI   rW   N)rP   rQ   rR   rX   rY   rS   r[   r\   r]   importing_vrf_idimporting_vrfexporting_vrf_idexporting_vrfr   importing_l2vpn_idimporting_l2vpnexporting_l2vpn_idexporting_l2vpnrH   rW   rV   rI   rG   r)   r)   R   s:       ?~?#""a    
 =N<'""a!""	  M @~?#""a    
 =N<'""a!""	  M BA%""$$a!""  
 ?n>1""$$"a.//	  O BA%""$$a!""  
 ?n>1""$$"a.//	  O
 
 
/ / / / / / / / / /rI   r)   c                   (    e Zd Z G d d          ZdS )r'   c                       e Zd ZeZdZdS )RIRFilterSet.Meta)rL   r6   slug
is_privaterO   N)rP   rQ   rR   RIRrT   rU   rV   rI   rG   rW   rz      s        DrI   rW   NrP   rQ   rR   rW   rV   rI   rG   r'   r'      sF        E E E E E E E E E ErI   r'   c                   Z   e Zd Z ej        dd          Z ej        d ed                    Z ej	        e
j                                         ed                    Z ej	        d	e
j                                        d
 ed                    Z G d d          Zd Zd ZdS )r   prefixfamilyr2   lookup_exprfilter_prefixPrefixmethodr4   RIR (ID)r3   r4   	rir__slugr{   
RIR (slug)r7   c                       e Zd ZeZdZdS )AggregateFilterSet.Meta)rL   
date_addedrO   N)rP   rQ   rR   	AggregaterT   rU   rV   rI   rG   rW   r      s        4rI   rW   c                    |                                 s|S t          |          }|t          |                                           z  }	 t          t          j        |                                           j                  }|t          |          z  }|t          |                                           z  }n# t          t          f$ r Y nw xY w|                    |          S Nr?   )prefix__containsprefix__net_contains_or_equals	rB   r   strnetaddr	IPNetworkcidrr	   
ValueErrorrC   rE   r3   r6   rF   	qs_filterr   s         rG   rH   zAggregateFilterSet.search       {{}} 	OU333	Q6666		*5;;==99>??F&AAAAIEKKMM::::II, 	 	 	D	y)))   A0B> >CCc                     |                                 s|S 	 t          t          j        |          j                  }|                    |          S # t          t          f$ r |                                cY S w xY w)N)r   	rB   r   r   r   r   rC   r	   r   nonerE   r3   r6   rF   querys        rG   r   z AggregateFilterSet.filter_prefix   s    {{}} 	O	#)%00566E??%?000, 	# 	# 	#==??"""	#s   ;A %A<;A<N)rP   rQ   rR   rX   NumberFilterr   
CharFilterr]   r   rY   r}   r[   r\   rir_idrirrW   rH   r   rV   rI   rG   r   r      s       (^(  F '^&akk  F 6^5""a
mm  F 3.
2""aoo	  C5 5 5 5 5 5 5 5* * *# # # # #rI   r   c                       e Zd Z ej        ej                                         ed                    Z	 ej        dej                                        d ed                    Z
 G d d          Zd	 Zd
S )r    r   r   r   r{   r   r7   c                       e Zd ZeZdZdS )ASNRangeFilterSet.Meta)rL   r6   r{   startendrO   N)rP   rQ   rR   ASNRangerT   rU   rV   rI   rG   rW   r      s        FrI   rW   c                 x    |                                 s|S t          |          }|                    |          S )Nr?   rB   r   rC   rE   r3   r6   rF   r   s        rG   rH   zASNRangeFilterSet.search   s9    {{}} 	OU333	y)))rI   N)rP   rQ   rR   rX   rY   r}   r[   r\   r]   r   r   rW   rH   rV   rI   rG   r    r       s        5^5""a
mm  F 3.
2""aoo	  CG G G G G G G G* * * * *rI   r    c                      e Zd Z ej        ej                                         ed                    Z	 ej        dej                                        d ed                    Z
 ej        dej                                         ed          	          Z ej        d
ej                                        d ed                    Z ej        dej                                         ed          	          Z ej        dej                                        d ed                    Z G d d          Zd ZdS )r   r   r   r   r{   r   r7   sites	Site (ID)r1   sites__slugSite (slug)	providerszProvider (ID)providers__slugzProvider (slug)c                       e Zd ZeZdZdS )ASNFilterSet.Meta)rL   asnrO   N)rP   rQ   rR   ASNrT   rU   rV   rI   rG   rW   r      s        -rI   rW   c                     |                                 s|S t          |          }	 |t          t          |                    z  }n# t          $ r Y nw xY w|                    |          S )Nr?   )r   rB   r   intr   rC   r   s        rG   rH   zASNFilterSet.search   s{    {{}} 	OU333		s5zz****II 	 	 	D	y)))s    A	 	
AAN)rP   rQ   rR   rX   rY   r}   r[   r\   r]   r   r   r   site_idsiter
   provider_idproviderrW   rH   rV   rI   rG   r   r      s       5^5""a
mm  F 3.
2""aoo	  C 7n6!!##ann  G
 4>3 !!##a	  D ;.:!%%''a    K
 8~7$!%%''a!""	  H. . . . . . . .* * * * *rI   r   c                   (    e Zd Z G d d          ZdS )r(   c                       e Zd ZeZdZdS )RoleFilterSet.Meta)rL   r6   r{   rO   weightN)rP   rQ   rR   RolerT   rU   rV   rI   rG   rW   r     s        @rI   rW   Nr~   rV   rI   rG   r(   r(     sF        A A A A A A A A A ArI   r(   c            	       |   e Zd Z ej        dd          Z ed ed                    Z ej	        d ed                    Z
 ej	        d	 ed
                    Z ej	        d ed                    Z ed          Z ed          Z edd ed                    Z ej        dd          Z ej        dd          Z ej        ej                                         ed                    Z ej        dej                                        d ed                    Z ej        ej                                        d ed                    Z ej        ej                                        dd ed                    Z eej                                        dd ed           !          Z eej                                        ddd" ed#          $          Z ee j                                        d%d ed&          !          Z! ee j                                        d%dd" ed'          $          Z" ej        e#j                                         ed(                    Z$ ej        d)e#j                                        d" ed*                    Z% ej        e&j                                         ed+                    Z' ej        d, ed-          .          Z( ej        e)j                                         ed/                    Z* ej        d0e)j                                        d" ed1                    Z+ ej,        e-d23          Z. G d4 d5          Z/d6 Z0d7 Z1d8 Z2d9 Z3d: Z4 e5e6j7                  d;             Z8d2S )<r%   r   r   r   r   r   r   search_withinzWithin prefixsearch_within_includezWithin and including prefixsearch_containsz(Prefixes which contain this prefix or IP_depth)r2   	_childrennet_mask_lengthMask lengthr2   r   r4   net_mask_length__gtenet_mask_length__lterS   r   vrf__rdrM   VRF (RD)r7   filter_present_in_vrfr3   r   r4   r3   r   r8   r4   site__regioninRegion (ID)r3   r2   r   r4   r{   Region (slug)r3   r2   r   r8   r4   site__groupSite group (ID)Site group (slug)r   
site__slugr   z	VLAN (ID)	vlan__vidzVLAN number (1-4094))r2   r4   	Role (ID)
role__slugRole (slug)Nchoices
null_valuec                       e Zd ZeZdZdS )PrefixFilterSet.Meta)rL   is_poolmark_utilizedrO   N)rP   rQ   rR   r   rT   rU   rV   rI   rG   rW   r     s        BrI   rW   c                    |                                 s|S t          |          }|t          |                                           z  }	 t          t          j        |                                           j                  }|t          |          z  }|t          |                                           z  }n# t          t          f$ r Y nw xY w|                    |          S r   r   r   s         rG   rH   zPrefixFilterSet.search  r   r   c                     g }|D ]A}	 |                     t          j        |                     +# t          t          f$ r Y >w xY w|                    |          S )N)
prefix__in)appendr   r   r	   r   rC   )rE   r3   r6   rF   query_valuesvs         rG   r   zPrefixFilterSet.filter_prefix  sv     	 	A##G$5a$8$89999#Z0   ,777s   '0AAc                    |                                 }|s|S 	 t          t          j        |          j                  }|                    |          S # t          t          f$ r |                                cY S w xY w)N)prefix__net_containedr   r   s        rG   r   zPrefixFilterSet.search_within  s     	O	#)%00566E??????, 	# 	# 	#==??"""	#   ;A %A>=A>c                    |                                 }|s|S 	 t          t          j        |          j                  }|                    |          S # t          t          f$ r |                                cY S w xY w)N)prefix__net_contained_or_equalr   r   s        rG   r   z%PrefixFilterSet.search_within_include  s     	O	#)%00566E??%?HHH, 	# 	# 	#==??"""	#r   c                 p   |                                 }|s|S 	 d|v r:|                    t          t          j        |          j                            S |                    t          t          j        |                              S # t          t          f$ r |	                                cY S w xY w)N/r   )prefix__net_contains)
rB   rC   r   r   r   r   	IPAddressr	   r   r   rD   s       rG   r   zPrefixFilterSet.search_contains  s     	O	#e||c'J[\aJbJbJgFhFhiii  C@QRW@X@X<Y<YZZZ, 	# 	# 	#==??"""	#s   =B 4B %B54B5c                     ||j         S |                    t          |          t          |j                                                  z                                            S N)vrf)vrf__export_targets__inr   rC   r   r0   r\   distinctrE   r3   r6   r   s       rG   r   z%PrefixFilterSet.filter_present_in_vrf  ^    ;= #JJJc&8&<&<&>&>???@
 
 (**	rI   )9rP   rQ   rR   rX   r   r   r   r]   r   r   withinwithin_includecontainsr   depthchildrenmask_lengthmask_length__gtemask_length__lterY   rS   r[   r\   vrf_idr   ModelChoiceFilterpresent_in_vrf_idpresent_in_vrfr   r   	region_idregionr   site_group_id
site_groupr   r   r   VLANvlan_idvlan_vidr   role_idroleMultipleChoiceFilterPrefixStatusChoicesstatusrW   rH   r   r   r   r   r   r   STRr   rV   rI   rG   r%   r%     s|       (^(  F "!akk  F '^&a    F /^.&a-..  N )~( a:;;  H #"  E &%  H )(%a  K
 3~2*   3~2*   6^5""ahh  F 3.
2""a
mm	  C 98""&ahh  
 6^5""&a
mm	  N -,##%%!a	  I *)##%%!a    F 10"&&(( a!""	  M .-"&&(( a#$$  J 7n6!!##ann  G 4>3!!##a	  D 7n6!!##ann  G +~*a&''  H 7n6!!##ann  G 4>3!!##a	  D 1^0#  F
C C C C C C C C* * *8 8 8# # ## # ## # # )**  +*  rI   r%   c                      e Zd Z ej        dd          Z ed ed                    Z ed ed                    Z	 ej
        d ed                    Z ej        ej                                         ed	          
          Z ej        dej                                        d ed                    Z ej        ej                                         ed          
          Z ej        dej                                        d ed                    Z ej        ed          Z ed ed                    Z G d d          Zd Zd Zd Zd ZdS )r$   start_addressr   r   filter_addressAddressr   r   z&Ranges which contain this prefix or IPrS   r   r   rM   r   r7   r   r   r{   r   Nr   search_by_parentParent prefixc                       e Zd ZeZdZdS )IPRangeFilterSet.Meta)rL   r   sizerO   N)rP   rQ   rR   IPRangerT   rU   rV   rI   rG   rW   r$    s        ?rI   rW   c                    |                                 s|S t          |          t          |          z  t          |          z  }	 t          t          j        |                                                     }|t          |          z  }|t          |          z  }n# t
          t          f$ r Y nw xY w|                    |          S )Nr?   )start_address__contains)end_address__contains)r  )end_address)rB   r   r   r   r   r	   r   rC   )rE   r3   r6   rF   r   	ipaddresss         rG   rH   zIPRangeFilterSet.search  s    {{}} 	OU333aPU6V6V6VVYZqvYwYwYww		G-ekkmm<<==I3333Iy1111II, 	 	 	D	y)))s   
AB$ $B87B8c                     |                                 }|s|S 	 t          j        |          }|                    ||          S # t          t
          f$ r |                                cY S w xY w)N)start_address__lteend_address__gte)rB   r   r   rC   r	   r   r   )rE   r3   r6   rF   r+  s        rG   r   z IPRangeFilterSet.search_contains  s|     	O	#)%00I??iR[?\\\, 	# 	# 	#==??"""	#s   *A %A-,A-c                 p    	  |j         di | d|iS # t          $ r |                                cY S w xY w)N__net_inrV   )rC   r   r   rD   s       rG   r  zIPRangeFilterSet.filter_address  s\    	#"8?@@&7&7&7%?@@@ 	# 	# 	#==??"""	#s    55c                 N   |s|S t                      }|D ]|}	 t          t          j        |                                          j                  }|t          ||          z  }P# t          t          f$ r |                                cY c S w xY w|	                    |          S )N)!start_address__net_host_containedend_address__net_host_contained
r   r   r   r   rB   r   r	   r   r   rC   rE   r3   r6   rF   qr   r   s          rG   r!  z!IPRangeFilterSet.search_by_parent  s     	OCC 	' 	'F'G-fllnn==BCCQ`effff#Z0 ' ' '}}&&&&&'q!!!s   AA%%%BB)rP   rQ   rR   rX   r   r   r   r]   r  r*  r   r  rY   rS   r[   r\   r  r   r   r  r  r  IPRangeStatusChoicesr  parentrW   rH   r   r  r!  rV   rI   rG   r$   r$     sI       (^("  F )(a	ll  M '&a	ll  K )~( a899  H 6^5""ahh  F 3.
2""a
mm	  C 7n6!!##ann  G 4>3!!##a	  D 1^0$  F "!!a    F
@ @ @ @ @ @ @ @
* 
* 
*	# 	# 	## # #
" 
" 
" 
" 
"rI   r$   c                   N   e Zd Z ej        dd          Z ed ed                    Z ed ed                    Z	 e
dd	 ed
                    Z ej        dd          Z ej        dd          Z ej        ej                                         ed                    Z ej        dej                                        d ed                    Z ej        ej                                        d ed                    Z ej        ej                                        dd ed                    Z edd ed                    Z e
dd ed                    Z edd ed                    Z e
dd ed                    Z ej        d ej                                        d ed!                    Z ej        d"ej                                         ed#          $          Z ej        d%ej                                        d ed&                    Z ej        d'ej                                         ed(          $          Z  ej        d)e!j                                         ed*          $          Z" ej#        d+ ed,                    Z$ ej#        d- ed.                    Z% ej&        e'd/0          Z( ej&        e)1          Z* ej        d2e+j                                         ed3          $          Z, ej        d4e-j                                         ed5          $          Z. G d6 d7          Z/d8 Z0d9 Z1d: Z2d; Z3 e4e5j6                  d<             Z7d= Z8d> Z9d? Z:d@ Z;d/S )Ar#   addressr   r   r!  r"  r   r  r   r   r   r   r   r   rS   r   r   rM   r   r7   r   r   r   filter_devicer6   Device (name)r   r2   r4   pkDevice (ID)filter_virtual_machineVirtual machine (name)Virtual machine (ID)interface__namezInterface (name)	interfacezInterface (ID)r1   vminterface__namezVM interface (name)vminterfacezVM interface (ID)	fhrpgroupzFHRP group (ID)_assigned_to_interfacezIs assigned to an interface	_assignedzIs assignedNr   r   serviceszService (ID)
nat_insidezNAT inside IP address (ID)c                       e Zd ZeZdZdS )IPAddressFilterSet.Meta)rL   dns_namerO   assigned_object_typeassigned_object_idN)rP   rQ   rR   r   rT   rU   rV   rI   rG   rW   rN    s        `rI   rW   c                     |                                 s|S t          |          t          |          z  t          |          z  }|                    |          S )N)dns_name__icontainsr?   )address__istartswithr   r   s        rG   rH   zIPAddressFilterSet.search  sd    {{}} 	O%(((U+++,5)))* 	
 y)))rI   c                 L   |s|S t                      }|D ]{}	 t          t          j        |                                          j                  }|t          |          z  }O# t          t          f$ r |                                cY c S w xY w|	                    |          S )N)address__net_host_containedr4  r5  s          rG   r!  z#IPAddressFilterSet.search_by_parent  s     	OCC 	' 	'F'G-fllnn==BCCQ59999#Z0 ' ' '}}&&&&&'q!!!s   AA$$%BBc                 ,   g }|D ]}t          j        |          st          j        |          r|                    |           @	 t          j        |          }|                    t          |                     x# t          t          f$ r Y w xY w|S )z
        Parse networks or IP addresses and cast to a format
        acceptable by the Postgres inet type.

        Skips invalid values.
        )r   
valid_ipv4
valid_ipv6r   r   r   r	   r   )rE   rF   parsedaddrnetworks        rG   parse_inet_addressesz'IPAddressFilterSet.parse_inet_addresses  s      	 	D!$'' 7+=d+C+C d###!+D11c'll++++#Z0   s   6A==BBc                     |                      |          }t          |          dk    r|                                S 	 |                    |          S # t          $ r |                                cY S w xY w)Nr   )address__net_in)r]  lenr   rC   r   rD   s       rG   r  z!IPAddressFilterSet.filter_address  s|     ))%00JJ!OO==??"	#??5?999 	# 	# 	#==??"""	#s   A A54A5c                     ||j         S |                    t          |          t          |j                                                  z                                            S r   r   r  s       rG   r   z(IPAddressFilterSet.filter_present_in_vrf  r  rI   c                 Z   t          j        j        di d                    |          |i}|                                s|                                S g }|D ]>}|                    |                                                    dd                     ?|                    |          S )N{}__inrL   Tflat)interface__inrV   )	r   r[   rC   formatexistsr   extendvc_interfacesvalues_listrE   r3   r6   rF   devicesinterface_idsdevices          rG   r;  z IPAddressFilterSet.filter_device  s    .'II8??4+@+@%*HII~~ 	#==??" 	V 	VF  !5!5!7!7!C!CDt!C!T!TUUUU'  
 
 	
rI   c                 @   t          j        j        di d                    |          |i}|                                s|                                S g }|D ]1}|                    |j                            dd                     2|                    |          S )Nrc  rL   Trd  )vminterface__inrV   )	r   r[   rC   rg  rh  r   ri  
interfacesrk  rE   r3   r6   rF   virtual_machinesrn  vms          rG   r@  z)IPAddressFilterSet.filter_virtual_machine  s    )18ZZHOOD<Q<QSX;YZZ&&(( 	#==??"" 	M 	MB  !:!:4d!:!K!KLLLL)  
 
 	
rI   c                     t           j                            t          t                                                    }|r|                    |d          S |                    |d          S )NF)assigned_object_type__inassigned_object_id__isnull)r   r[   get_for_modelsr   r   valuesrC   exclude)rE   r3   r6   rF   content_typess        rG   rH  z)IPAddressFilterSet._assigned_to_interface  st    #+::9kRRYY[[ 		??)6+0 #   
 ##)6+0 $   rI   c                 b    |r|                     dd          S |                    dd          S )NT)assigned_object_type__isnullrx  )r{  rC   rD   s       rG   rI  zIPAddressFilterSet._assigned
  sP     		##-1+/ $   
 ??-1+/ #   rI   )<rP   rQ   rR   rX   r   r   r   r]   r8  r:  r   r	  r
  r  rY   rS   r[   r\   r  r   r  r  r  ro  	device_idvirtual_machinevirtual_machine_idr   rD  interface_idr   rF  vminterface_id	FHRPGroupfhrpgroup_idBooleanFilterassigned_to_interfaceassignedr  IPAddressStatusChoicesr  IPAddressRoleChoicesr  Service
service_idr   nat_inside_idrW   rH   r!  r]  r  r   r   r  r   r;  r@  rH  rI  rV   rI   rG   r#   r#   ,  s       (^(  F "!!a    F #"a	ll  G )(%a  K
 3~2*   3~2*   6^5""ahh  F 3.
2""a
mm	  C 98""&ahh  
 6^5""&a
mm	  N "!a    F
 '&a  I
 +*'a())  O
 0/'a&''  
 98$"&&((a"##	  I <>;"&&((a !!  L
 ;.:&$((**a%&&	  K >^= $((**a#$$  N
 <>;"&&((a!""  L
 9N8'a-..   ,~+a  H 1^0&  F />.$  D :9$$&&a  J
 =N<"&&((a,--  Ma a a a a a a a* * *
" 
" 
"  &# # # )**  +*	
 	
 	
	
 	
 	
  
 
 
 
 
rI   r#   c                       e Zd Z ej        e          Z ej        e          Z ej	        e
j                                        d          Z G d d          Zd Z eej                  d             ZdS )	r"   rJ  filter_related_ipr3   r   c                       e Zd ZeZdZdS )FHRPGroupFilterSet.Meta)rL   group_idr6   auth_keyrO   N)rP   rQ   rR   r  rT   rU   rV   rI   rG   rW   r  #  s        FrI   rW   c                     |                                 s|S |                    t          |          t          |          z            S )Nr?   r<   rA   rD   s       rG   rH   zFHRPGroupFilterSet.search'  sN    {{}} 	OU+++e$$$%
 
 	
rI   c                     t                      }|D ]@}|j        rt          |j        |j                  }nt          |j        d          }||z  }A|                    |          S )zB
        Filter by VRF & prefix of assigned IP addresses.
        )-ip_addresses__address__net_contained_or_equalip_addresses__vrfT)r  ip_addresses__vrf__isnull)r   r   r:  rC   )rE   r3   r6   rF   	ip_filterr+  r6  s          rG   r  z$FHRPGroupFilterSet.filter_related_ip/  s    
 CC	 	 	I} 	BKBS&/m  
 BKBS.2   NIIy)))rI   N)rP   rQ   rR   rX   r  FHRPGroupProtocolChoicesprotocolFHRPGroupAuthTypeChoices	auth_typerY   r   r[   r\   
related_iprW   rH   r   r   r  r  rV   rI   rG   r"   r"     s        2~2(  H 43(  I :9"&&(("  J
G G G G G G G G
 
 
 )*** * +** * *rI   r"   c                   d   e Zd Z e            Z ej        ej        	                                 e
d                    Z edd e
d                    Z edd e
d                    Z ed	d e
d
                    Z ed	d e
d                    Z G d d          Zd Zd ZdS )r!   
Group (ID)r   r;  r6   r<  r=  r>  r?  r@  rA  rB  c                       e Zd ZeZdZdS )!FHRPGroupAssignmentFilterSet.Meta)rL   r  interface_typer  priorityN)rP   rQ   rR   FHRPGroupAssignmentrT   rU   rV   rI   rG   rW   r  `  s        #QrI   rW   c                    t          j        j        di | d|i}|                                s|                                S g }|D ]>}|                    |                                                    dd                     ?|                    t          t          j        
                    t                    |                    S N__inrL   Trd  )r  interface_id__inrV   )r   r[   rC   rh  r   ri  rj  rk  r   r   get_for_modelr   rl  s          rG   r;  z*FHRPGroupAssignmentFilterSet.filter_deviced  s    .'AAd===%*@AA~~ 	#==??" 	V 	VF  !5!5!7!7!C!CDt!C!T!TUUUU[0>>yII\ijjj
 
 	
rI   c                    t          j        j        di | d|i}|                                s|                                S g }|D ]1}|                    |j                            dd                     2|                    t          t          j        
                    t                    |                    S r  )r   r[   rC   rh  r   ri  rr  rk  r   r   r  r   rs  s          rG   r@  z3FHRPGroupAssignmentFilterSet.filter_virtual_machineo  s    )18RRtMMM5;QRR&&(( 	#==??"" 	M 	MB  !:!:4d!:!K!KLLLL[0>>{KK^klll
 
 	
rI   N)rP   rQ   rR   r   r  rX   rY   r  r[   r\   r]   r  r   ro  r   r  r  r  rW   r;  r@  rV   rI   rG   r!   r!   E  sY       &&((N7~7"&&((aoo  H "!a    F
 '&a  I
 +*'a())  O
 0/'a&''  R R R R R R R R	
 	
 	
	
 	
 	
 	
 	
rI   r!   c                   ^   e Zd Z e            Z ej        d          Z ej        d          Z ej        d          Z	 ej        d          Z
 ej        d          Z ej        d          Z ej        d          Z ej        d          Z G d d          Zd Zd Zd Zd	S )
r-   filter_scope)r   filter_contains_vidc                       e Zd ZeZdZdS )VLANGroupFilterSet.Meta)rL   r6   r{   rO   scope_idN)rP   rQ   rR   	VLANGrouprT   rU   rV   rI   rG   rW   r    s        BrI   rW   c                     |                                 s|S t          |          t          |          z  }|                    |          S rm   r   r   s        rG   rH   zVLANGroupFilterSet.search  Q    {{}} 	Oe$$$U+++, 	 y)))rI   c                     |                     dd          }|                    t          j                            |          |          S )Nr]    )rT   )
scope_typer  )replacerC   r   r[   get)rE   r3   r6   rF   
model_names        rG   r  zVLANGroupFilterSet.filter_scope  sJ    \\#r**
"*..Z.@@  
 
 	
rI   c                     t           j        j        }t           j                            d| d|f          }|                    d |D                       S )zH
        Return all VLANGroups which contain the given VLAN ID.
        zSELECT id FROM z4, unnest(vid_ranges) vid_range WHERE %s <@ vid_range)paramsc                     g | ]	}|j         
S rV   )rL   ).0gs     rG   
<listcomp>z:VLANGroupFilterSet.filter_contains_vid.<locals>.<listcomp>  s    )))QAD)))rI   )pk__in)r  _metadb_tabler[   rawrC   )rE   r3   r6   rF   
table_namegroupss         rG   r  z&VLANGroupFilterSet.filter_contains_vid  sn     _-
 "&&^j^^^8 ' 
 
 ))&)))  
 
 	
rI   N)rP   rQ   rR   r   r  rX   r   r  r  r   locationrackcluster_groupclustercontains_vidrW   rH   r  r  rV   rI   rG   r-   r-   {  sm       ""$$J(^(  F -,  J '>&  D +~*  H '>&  D 0N/  M *n)  G />.$  LC C C C C C C C* * *
 
 

 
 
 
 
rI   r-   c            	          e Zd Z eej                                        dd ed                    Z eej                                        ddd ed                    Z	 ee
j                                        dd ed	                    Z ee
j                                        ddd ed
                    Z ej        ej                                         ed                    Z ej        dej                                        d ed                    Z ej        ej                                         ed                    Z ej        dej                                        d ed                    Z ej        ej                                         ed                    Z ej        dej                                        d ed                    Z ej        ed          Z ej        ej                                        d          Z ej        ej                                        d          Z ej        ej                                        d          Z  ej        de!j                                         ed                    Z" ej        de!j                                        d  ed!                    Z# G d" d#          Z$d$ Z% e&e'j(                  d%             Z) e&e'j(                  d&             Z* e&e'j(                  d'             Z+dS )(r,   r   r   r   r   r{   r   r   r   r   r   r   r   r   r   r7   r  group__slugGroupr   r   r   Nr   get_for_siter  get_for_deviceget_for_virtualmachinel2vpn_terminations__l2vpnz
L2VPN (ID)r1   %l2vpn_terminations__l2vpn__identifierri   r   c                       e Zd ZeZdZdS )VLANFilterSet.Meta)rL   vidr6   rO   N)rP   rQ   rR   r  rT   rU   rV   rI   rG   rW   r    s        5rI   rW   c                 "   |                                 s|S t          |          t          |          z  }	 |t          t          |                                                     z  }n# t          $ r Y nw xY w|                    |          S )Nr<   r?   )r  r   r   s        rG   rH   zVLANFilterSet.search  s    {{}} 	Oe,,,q/N/N/NN		s5;;==112222II 	 	 	D	y)))s   2A, ,
A98A9c                 ,    |                     |          S N)r  rD   s       rG   r  zVLANFilterSet.get_for_site  s    $$U+++rI   c                 ,    |                     |          S r  )r  rD   s       rG   r  zVLANFilterSet.get_for_device!  s    &&u---rI   c                 ,    |                     |          S r  )r  rD   s       rG   r  z$VLANFilterSet.get_for_virtualmachine%  s    ..u555rI   ),rP   rQ   rR   r   r   r[   r\   r]   r  r  r   r  r  rX   rY   r   r   r   r  r  groupr   r  r  r  VLANStatusChoicesr  r  available_at_siter   available_on_devicer   available_on_virtualmachiner   l2vpn_idl2vpnrW   rH   r   r   r  r  r  r  rV   rI   rG   r,   r,     sQ       ,,##%%!a	  I *)##%%!a    F 10"&&(( a!""	  M .-"&&(( a#$$  J 7n6!!##ann  G 4>3!!##a	  D 8~7"&&((aoo  H 5N4 "&&((ajj	  E 7n6!!##ann  G 4>3!!##a	  D 1^0!  F 98!!##   ;.:##%%   #C."B'++--'# # # 8~7.""$$aoo  H
 5N4:""$$"ajj	  E6 6 6 6 6 6 6 6* * * )**, , +*, )**. . +*. )**6 6 +*6 6 6rI   r,   c                   H    e Zd Z edd          Z G d d          Zd ZdS )r+   portsr  r   c                       e Zd ZeZdZdS )ServiceTemplateFilterSet.MetarL   r6   r  rO   N)rP   rQ   rR   ServiceTemplaterT   rU   rV   rI   rG   rW   r  0  s        :rI   rW   c                     |                                 s|S t          |          t          |          z  }|                    |          S rm   r   r   s        rG   rH   zServiceTemplateFilterSet.search4  r  rI   N)rP   rQ   rR   r   portrW   rH   rV   rI   rG   r+   r+   *  sh          D
; ; ; ; ; ; ; ;* * * * *rI   r+   c                      e Zd Z ej        ej                                         ed                    Z	 ej        dej                                        d ed                    Z
 ej        ej                                         ed                    Z ej        dej                                        d ed	                    Z ej        d
ej                                         ed                    Z ej        dej                                        d ed                    Z edd          Z G d d          Zd ZdS )r*   r?  r   device__namer6   r<  r7   rB  virtual_machine__namerA  ipaddresseszIP address (ID)r1   ipaddresses__addressr:  z
IP addressr  r  r   c                       e Zd ZeZdZdS )ServiceFilterSet.Metar  N)rP   rQ   rR   r  rT   rU   rV   rI   rG   rW   r  c  s        :rI   rW   c                     |                                 s|S t          |          t          |          z  }|                    |          S rm   r   r   s        rG   rH   zServiceFilterSet.searchg  sI    {{}} 	Oe,,,q/N/N/NN	y)))rI   N)rP   rQ   rR   rX   rY   r   r[   r\   r]   r  ro  r   r  r  r   ip_address_id
ip_addressr   r  rW   rH   rV   rI   rG   r*   r*   >  s       88##%%a  I 6^5!##%%a  	  F BA'++--a&''   ?n>*'++--a())	  O =N< "&&((a!""  M
 :9)"&&((aoo	  J   D
; ; ; ; ; ; ; ;* * * * *rI   r*   c                       e Zd ZdZ ej        dej                                         e	d                    Z
 ej        dej                                         e	d                    ZdS )r&   zR
    An inheritable FilterSet for models which support primary IP assignment.
    primary_ip4zPrimary IPv4 (ID)r1   primary_ip6zPrimary IPv6 (ID)N)rP   rQ   rR   __doc__rX   rY   r   r[   r\   r]   primary_ip4_idprimary_ip6_idrV   rI   rG   r&   r&   n  s          >^= "&&((a#$$  N
 >^= "&&((a#$$  NNNrI   r&   )?rX   r   "django.contrib.contenttypes.modelsr   django.core.exceptionsr   django.db.modelsr   django.utils.translationr   r]   drf_spectacular.typesr   drf_spectacular.utilsr   netaddr.corer	   circuits.modelsr
   dcim.modelsr   r   r   r   r   netbox.filtersetsr   r   r   tenancy.filtersetsr   utilities.filtersr   r   r   r   r   virtualization.modelsr   r   
vpn.modelsr   r   models__all__r.   r)   r'   r   r    r   r(   r%   r$   r#   r"   r!   r-   r,   r+   r*   	FilterSetr&   rV   rI   rG   <module>r     s        : : : : : : 2 2 2 2 2 2       1 1 1 1 1 1 . . . . . . 5 5 5 5 5 5 ( ( ( ( ( ( $ $ $ $ $ $ B B B B B B B B B B B B B B l l l l l l l l l l / / / / / /              > = = = = = = =              *#G #G #G #G #G')9 #G #G #GL8/ 8/ 8/ 8/ 8//1A 8/ 8/ 8/vE E E E E/ E E E,# ,# ,# ,# ,#-/? ,# ,# ,#^* * * * *46F * * *..* .* .* .* .*/1A .* .* .*bA A A A A0 A A A{ { { { {*,< { { {|Y" Y" Y" Y" Y"')= Y" Y" Y"xh h h h h-/? h h hV+* +* +* +* +*- +* +* +*\3
 3
 3
 3
 3
#= 3
 3
 3
l<
 <
 <
 <
 <
5 <
 <
 <
~m6 m6 m6 m6 m6(*: m6 m6 m6`* * * * *3 * * *(-* -* -* -* -*+ -* -* -*`    1     rI   