
    >Tf$c                     V   d dl mZ d dlmZ d dlmZmZ d dlmZ	 d dl
mZmZmZ d dlT d dlT d dlmZ d dlT 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 m!Z!m"Z" d dl#m$Z$m%Z%m&Z&m'Z' d dl(m)Z) d dl*m+Z+m,Z, d dl-m.Z. d dl/m0Z0m1Z1 dZ2 G d dee          Z3 G d dee          Z4 G d de          Z5 G d dee          Z6 G d dee          Z7 G d dee          Z8 G d d e          Z9 G d! d"ee          Z: G d# d$ee          Z; G d% d&ee          Z< G d' d(ee          Z= G d) d*ej>                  Z? G d+ d,e          Z@ G d- d.ejA                  ZB G d/ d0e          ZC G d1 d2ee          ZD G d3 d4e          ZE G d5 d6e          ZF G d7 d8eF          ZGd9S ):    )forms)ContentType)ObjectDoesNotExistValidationError)gettext_lazy)Device	InterfaceSite)*)IPNetworkFormField)NetBoxModelForm)TenancyForm)PermissionsViolation)add_blank_choice)CommentFieldContentTypeChoiceFieldDynamicModelChoiceFieldDynamicModelMultipleChoiceFieldNumericArrayFieldNumericRangeArrayField	SlugField)FieldSetInlineFieldsObjectAttributeTabbedGroups)get_field_value)
DatePicker
HTMXSelect)bettertitle)VirtualMachineVMInterface)AggregateFormASNFormASNRangeFormFHRPGroupFormFHRPGroupAssignmentFormIPAddressAssignFormIPAddressBulkAddFormIPAddressFormIPRangeForm
PrefixFormRIRFormRoleFormRouteTargetFormServiceFormServiceCreateFormServiceTemplateFormVLANFormVLANGroupFormVRFFormc            
          e Zd Z e ed          ej                                        d          Z e ed          ej                                        d          Z	 e
            Z eddddd	 ed
                     edd ed                     edd ed                    fZ G d d          ZdS )r4   zImport targetsFlabelquerysetrequiredzExport targetsnamerdenforce_uniquedescriptiontagsVRFr:   import_targetsexport_targetszRoute Targetstenant_grouptenantTenancyc                   "    e Zd ZeZg dZddiZdS )VRFForm.Meta)
r:   r;   r<   rA   rB   rC   rD   r=   commentsr>   r;   RDN)__name__
__module____qualname__r?   modelfieldslabels     ;/var/www/html/netbox-4.1.3/netbox/ipam/forms/model_forms.pyMetarG   C   s2        
 
 

 $
rQ   rS   N)rJ   rK   rL   r   _RouteTargetobjectsallrA   rB   r   rH   r   	fieldsetsrS   rP   rQ   rR   r4   r4   0   s'       44a !!$((**  N
 54a !!$((**  N
 |~~H 	/QQuXXVVV!#3!!O:L:LMMM)===I
 
 
 
 
 
 
 
 
 
rQ   r4   c                       e Zd Z eddd ed                     edd ed                    fZ e            Z G d	 d
          ZdS )r.   r:   r=   r>   zRoute Targetr@   rC   rD   rE   c                       e Zd ZeZg dZdS )RouteTargetForm.Meta)r:   rC   rD   r=   rH   r>   N)rJ   rK   rL   rU   rM   rN   rP   rQ   rR   rS   r[   U   s$        
 
 
rQ   rS   N)	rJ   rK   rL   r   rT   rX   r   rH   rS   rP   rQ   rR   r.   r.   N   s        QQ~5F5FGGG)===I |~~H
 
 
 
 
 
 
 
 
 
rQ   r.   c            
       r    e Zd Z e            Z eddddd ed                    fZ G d d	          Zd
S )r,   r:   slug
is_privater=   r>   RIRr@   c                       e Zd ZeZg dZdS )RIRForm.Meta)r:   r]   r^   r=   r>   N)rJ   rK   rL   r_   rM   rN   rP   rQ   rR   rS   ra   c   s$        
 
 
rQ   rS   N	rJ   rK   rL   r   r]   r   rT   rX   rS   rP   rQ   rR   r,   r,   \   sr        9;;D 	}f11U88TTTI
 
 
 
 
 
 
 
 
 
rQ   r,   c            
           e Zd Z eej                                         ed                    Z e	            Z
 eddddd ed          	           ed
d ed          	          fZ G d d          ZdS )r"   r_   r8   r7   prefixrir
date_addedr=   r>   	Aggregater@   rC   rD   rE   c                   2    e Zd ZeZg dZd e            iZdS )AggregateForm.Meta)re   rf   rg   rC   rD   r=   rH   r>   rg   N)rJ   rK   rL   rh   rM   rN   r   widgetsrP   rQ   rR   rS   rj   v   s8        
 
 
 **,,
rQ   rS   N)rJ   rK   rL   r   r_   rV   rW   rT   rf   r   rH   r   rX   rS   rP   rQ   rR   r"   r"   j   s        
!
!""ahh  C |~~H 	5,vAAkNN[[[)===I

 
 
 
 
 
 
 
 
 
rQ   r"   c                       e Zd Z eej                                         ed                    Z e	            Z
 eddddddd	 ed
                     edd ed                    fZ G d d          ZdS )r$   r_   rd   r:   r]   rf   startendr=   r>   z	ASN Ranger@   rC   rD   rE   c                       e Zd ZeZg dZdS )ASNRangeForm.Meta)	r:   r]   rf   rm   rn   rC   rD   r=   r>   N)rJ   rK   rL   ASNRangerM   rN   rP   rQ   rR   rS   rp      s$        
 
 
rQ   rS   N)rJ   rK   rL   r   r_   rV   rW   rT   rf   r   r]   r   rX   rS   rP   rQ   rR   r$   r$      s        
!
!""ahh  C 9;;DvTUTUVaTbTbccc)===I

 
 
 
 
 
 
 
 
 
rQ   r$   c            
       p    e Zd Z eej                                         ed                    Z e	e
j                                         ed          d          Z e            Z edddd	d
 ed                     edd ed                    fZ G d d          Zd fd	Z fdZ xZS )r#   r_   rd   SitesF)r8   r7   r9   asnrf   sitesr=   r>   ASNr@   rC   rD   rE   c                   2    e Zd ZeZg dZd e            iZdS )ASNForm.Meta)rt   rf   ru   rC   rD   r=   rH   r>   rg   N)rJ   rK   rL   rv   rM   rN   r   rk   rP   rQ   rR   rS   rx      s8        
 
 
 **,,
rQ   rS   Nc                      t                      j        |||d| | j        rQ| j        j        G| j        j                                                            dd          | j        d         _        d S d S d S )N)datainstanceidT)flatru   )	super__init__r{   pkru   rW   values_listrN   initial)selfrz   r{   argskwargs	__class__s        rR   r   zASNForm.__init__   s    dXGGGGG= 	bT]-9+/=+>+B+B+D+D+P+PQU\`+P+a+aDK (((	b 	b99rQ   c                      t                      j        |i |}|j                            | j        d                    |S )Nru   )r~   saveru   setcleaned_data)r   r   r   r{   r   s       rR   r   zASNForm.save   s@    577<0004,W5666rQ   )NN)rJ   rK   rL   r   r_   rV   rW   rT   rf   r   r
   ru   r   rH   r   rX   rS   r   r   __classcell__r   s   @rR   r#   r#      sA       
!
!""ahh  C ,+!!##ajj  E
 |~~H 	wvAAeHHMMM)===I

 
 
 
 
 
 
 
b b b b b b        rQ   r#   c            
       r    e Zd Z e            Z eddddd ed                    fZ G d d	          Zd
S )r-   r:   r]   weightr=   r>   Roler@   c                       e Zd ZeZg dZdS )RoleForm.Meta)r:   r]   r   r=   r>   N)rJ   rK   rL   r   rM   rN   rP   rQ   rR   rS   r      s$        
 
 
rQ   rS   Nrb   rP   rQ   rR   r-   r-      sr        9;;D 	=&qqyyQQQI
 
 
 
 
 
 
 
 
 
rQ   r-   c                   L   e Zd Z eej                                        d ed                    Z e ed          e	j                                        ddd          Z
 eej                                        dddd	i ed
                    Z e ed          ej                                        d          Z e            Z edddddddd ed          	  	         edd ed                     edd ed                    fZ G d d          Zd S )!r+   Fr?   r8   r9   r7   r
   TNone)r7   r8   r9   selectornull_optionavailable_at_sitez$siteVLAN)r8   r9   r   query_paramsr7   r   r6   re   statusvrfroleis_poolmark_utilizedr=   r>   Prefixr@   sitevlanzSite/VLAN AssignmentrC   rD   rE   c                       e Zd ZeZg dZdS )PrefixForm.Meta)re   r   r   r   r   r   r   r   rC   rD   r=   rH   r>   N)rJ   rK   rL   r   rM   rN   rP   rQ   rR   rS   r      s$        
 
 
rQ   rS   N)rJ   rK   rL   r   r?   rV   rW   rT   r   r
   r   r   r   r   r   r   rH   r   rX   rS   rP   rQ   rR   r+   r+      s       
!
!""ahh  C
 #"aii!!##  D #"!!##
 aii  D #"aii!!##  D
 |~~H 	hvy/=Z`ghghiqgrgr	
 	
 	
 	aa(>&?&?@@@)===I
 
 
 
 
 
 
 
 
 
rQ   r+   c                   \   e Zd Z eej                                        d ed                    Z e ed          e	j                                        d          Z
 e            Z edddd	d
ddd ed          	  	         edd ed                    fZ G d d          ZdS )r*   Fr?   r   r   r6   r   start_addressend_addressr   r   r   r=   r>   zIP Ranger@   rC   rD   rE   c                       e Zd ZeZg dZdS )IPRangeForm.Meta)r   r   r   r   r   rC   rD   r   r=   rH   r>   N)rJ   rK   rL   IPRangerM   rN   rP   rQ   rR   rS   r     s$        
 
 
rQ   rS   N)rJ   rK   rL   r   r?   rV   rW   rT   r   r   r   r   rH   r   rX   rS   rP   rQ   rR   r*   r*      s       
!
!""ahh  C
 #"aii!!##  D
 |~~H 	?M68_Vcek:	
 	
 	
 	)===I
 
 
 
 
 
 
 
 
 
rQ   r*   c                       e Zd Z eej                                        dddid ed                    Z ee	j                                        dddid ed                    Z
 eej                                        dd ed          	          Z eej                                        d ed
                    Z eej                                        dd ed          	          Z ej        d ed                    Z e            Z eddddddd ed                     edd ed                     e e ed ed                     ed ed                     ed ed                              d ed                      ed! ed"                    fZ G d# d$          Z fd%Z fd&Z fd'Z xZS )(r)   FparentdeviceTr	   )r8   r9   contextr   r7   virtual_machine
FHRP Groupr8   r9   r   r7   r?   r   z
IP Addressz*Make this the primary IP for the device/VMr9   r7   addressr   r   r   dns_namer=   r>   r@   rC   rD   rE   	interfacer   vminterfaceVirtual Machine	fhrpgroupprimary_for_parent
Assignment
nat_insidezNAT IP (Inside)c                       e Zd ZeZg dZdS )IPAddressForm.Meta)r   r   r   r   r   r   r   rC   rD   r=   rH   r>   NrJ   rK   rL   	IPAddressrM   rN   rP   rQ   rR   rS   r   H  s$        
 
 
rQ   rS   c                    |                     d          }|                     di                                           }|rqt          |j                  t          u r|j        |d<   nKt          |j                  t
          u r|j        |d<   n%t          |j                  t          u r
|j        |d<   ||d<    t                      j        |i | | j	        j
        r+| j	        j        rt          | j	        j        dd           }|r^| j	        j        j        dk    r|j        | j	        j
        k    s*| j	        j        j        dk    r|j        | j	        j
        k    r
d	| j        d
<   t          |j                  t          u r7| j        d         j                            d|j        j        j
        i           nQt          |j                  t
          u r6| j        d         j                            d|j        j        j
        i           | j                             d
          r8d	| j        d         _        d	| j        d         _        d	| j        d         _        d S d S )Nr{   r   r   r   r   parent_object      Tr   	device_idvirtual_machine_id)getcopytypeassigned_objectr	   r!   	FHRPGroupr~   r   r{   r   getattrr   versionprimary_ip4_idprimary_ip6_idr   rN   widgetadd_query_paramsr   r   disabled)r   r   r   r{   r   r   r   s         rR   r   zIPAddressForm.__init__O  s^    ::j))**Y++0022 	@H,--::'/'?$$h.//;>>)1)A&&h.//9<<'/'?$#y$)&))) = 	 = 	T]:OTRRF :%-22v7LPTP]P`7`7`%-22v7LPTP]P`7`7`5912H,--::K(/@@!9!@!CB     h.//;>>M*1BB((*B*R*UD   
 <011 	504DK$-26DK&/04DK$---	5 	5rQ   c                     t                                                        fddD             }t          |          dk    r)t          j        |d         t          d          i          |rq j        |d                  } j        j        rE j        j	        r9 j        d         r,| j        j	        k    rt	          t          d                    | j        _	        nd  j        _	         j        
                    d          p j        
                    d	          } j        
                    d          r'|s'                     dt          d
                     d S d S d S )Nc                 .    g | ]}j         |         |S rP   r   ).0fieldr   s     rR   
<listcomp>z'IPAddressForm.clean.<locals>.<listcomp>{  s7     
 
 
DL]^cLd

 
 
rQ   )r   r   r      z6An IP address can only be assigned to a single object.r   r   zYCannot reassign IP address while it is designated as the primary IP for the parent objectr   r   zLOnly IP addresses assigned to an interface can be designated as primary IPs.)r~   cleanlenr   r   rT   r   r{   r   r   r   	add_error)r   selected_objectsr   r   r   s   `   rR   r   zIPAddressForm.cleanw  s   
 
 
 
H
 
 
   1$$' #Q'_%`%`)     	1"/0@0CDO} DM$A dFWXlFm   sB  FJ  FS  Fc  sc  sc%qrr   -<DM)),0DM) %))+66^$:K:O:OP]:^:^	  !566 	y 	NN$a(v&w&w    	 	 	 	rQ   c                     t                      j        |i |}| j        j        }t	          |          t
          t          fv r|j        }|                                 | j	        d         r4|j
        j        dk    r||_        n||_        |                                 nm|j
        j        dk    r'|j        |k    rd |_        |                                 n6|j
        j        dk    r&|j        |k    rd |_        |                                 |S )Nr   r   r   )r~   r   r{   r   r   r	   r!   r   snapshotr   r   r   primary_ip4primary_ip6)r   r   r   	ipaddressr   r   r   s         rR   r   zIPAddressForm.save  s	    EGGL$1&11	 M1		??y+666,FOO !56 $,11)2F&&)2F&"*a//F4F)4S4S%)""*a//F4F)4S4S%)"rQ   )rJ   rK   rL   r   r	   rV   rW   rT   r   r!   r   r   r   r?   r   r   r   r   BooleanFieldr   r   rH   r   r   rX   rS   r   r   r   r   r   s   @rR   r)   r)     s       ''"&&((h
 ann  I *)$((**'
 ann  K ('"&&((aoo	  I "
!""ahh  C
 )("&&((aoo	  J ,+a<==   |~~H 	HfeZPV]^]^_k]l]lmmm)===L11X;;777QQ/@-A-ABBB11\??;;; 
 !qq	
 	
 	
 	AA&7$8$8999I
 
 
 
 
 
 
 
&5 &5 &5 &5 &5P    8        rQ   r)   c                       e Zd Z eej                                        d ed                    Z G d d          Z	dS )r(   Fr?   r   c                       e Zd ZeZg dZdS )IPAddressBulkAddForm.Meta)	r   r   r   r   r   r=   rC   rD   r>   Nr   rP   rQ   rR   rS   r     $        
 
 
rQ   rS   N)
rJ   rK   rL   r   r?   rV   rW   rT   r   rS   rP   rQ   rR   r(   r(     sp        
!
!""ahh  C
 
 
 
 
 
 
 
 
 
rQ   r(   c                       e Zd Z eej                                        d ed                    Z e	j
        d ed                    ZdS )r'   Fr?   r   Searchr   N)rJ   rK   rL   r   r?   rV   rW   rT   vrf_idr   	CharFieldqrP   rQ   rR   r'   r'     sj        $$""ahh  F
 	akk	 	 	AAArQ   r'   c            
           e Zd Z eej                                        d ed                    Z e	d ed                    Z
 ej         ee          d ed                    Z e            Z edd	d
dd ed                     edd ed                     eddd ed                    fZ G d d          Z fdZ fdZ xZS )r%   Fr?   r   Addressr   Status)choicesr9   r7   protocolgroup_idr:   r=   r>   r   r@   	auth_typeauth_keyAuthenticationip_vrf
ip_address	ip_statuszVirtual IP Addressc                       e Zd ZeZdZdS )FHRPGroupForm.Meta)r   r   r   r   r:   r   r   r   r=   rH   r>   N)rJ   rK   rL   r   rM   rN   rP   rQ   rR   rS   r     s        
rQ   rS   c           	      X    t                      j        |i |}t          |dd           }| j                            d          rt          | j        d         | j        d         | j        d         t                              | j        d         t          j                  |          }|	                                 |                                 t
          j
                            |d                              |j                                                  st                      |S )	N_userr   r   r   r   )r   r   r   r   r   addr   )r~   r   r   r   r   r   FHRP_PROTOCOL_ROLE_MAPPINGSIPAddressRoleChoicesROLE_VIPpopulate_custom_field_defaultsrV   restrictfilterr   firstr   )r   r   r   r{   userr   r   s         rR   r   zFHRPGroupForm.save  s   577<000x$//   .. 	-!%h/),7(5044T5Fz5RThTqrr (  I 44666NN $--dE::AAY\ARRXXZZ -*,,,rQ   c                    t                                                       | j                            d          }| j                            d          }| j                            d          }|rdt	          |||d          }|                                s?| j                            d |j                                        D                        d S d S d S )Nr   r   r   )r   r   r   c                      i | ]\  }}d | |S )ip_rP   )r   r   errors      rR   
<dictcomp>z'FHRPGroupForm.clean.<locals>.<dictcomp>	  s1     $ $ $-9UEM%MM5$ $ $rQ   )	r~   r   r   r   r)   is_validerrorsupdateitems)r   r   r   r   ip_formr   s        rR   r   zFHRPGroupForm.clean  s    "&&x00&**<88
%))+66	 		#%#% %  G
 ##%% "" $ $=D^=Q=Q=S=S$ $ $     		 		 rQ   )rJ   rK   rL   r   r?   rV   rW   rT   r   r   r   r   ChoiceFieldr   IPAddressStatusChoicesr   r   rH   r   rX   rS   r   r   r   r   s   @rR   r%   r%     s        %$""ahh  F
 $#a	ll  J "!  !788akk  I
 |~~H 	ZQQ|__]]]jqq1A/B/BCCC<11=Q;R;RSSSI
 
 
 
 
 
 
 
    ,        rQ   r%   c                        e Zd Z e ed          ej                                                  Z e	 e
d          dd          fZ G d d          Z fdZd	 Z xZS )
r&   Group)r7   r8   r   grouppriorityc                       e Zd ZeZdZdS )FHRPGroupAssignmentForm.Meta)r  r  N)rJ   rK   rL   FHRPGroupAssignmentrM   rN   rP   rQ   rR   rS   r    s        #&rQ   rS   c                      t                      j        |i | | j        j        j                                        }|D ]-}| j        d         j                            d|j	                   .d S )Nr  
related_ip)
r~   r   r{   r   ip_addressesrW   rN   r   add_query_paramr   )r   r   r   ipaddressesr   r   s        rR   r   z FHRPGroupAssignmentForm.__init__  sz    $)&)))m-:>>@@$ 	T 	TIK '77ilSSSS	T 	TrQ   c                 N   | j         d         }t          j                            | j        j        | j        j        |          }| j        j        r |                    | j        j                  }|	                                r!t          j        t          d                    |S )Nr  )interface_typeinterface_idr  )r|   zAssignment already exists)r   r  rV   r  r{   r  r  r|   excludeexistsr   r   rT   )r   r  conflicting_assignmentss      rR   clean_groupz#FHRPGroupAssignmentForm.clean_group#  s    !'*"5"="D"D=73 #E #
 #

 = 	[&=&E&EIY&E&Z&Z#"))++ 	'-..   rQ   )rJ   rK   rL   r   rT   r   rV   rW   r  r   r   rX   rS   r   r#  r   r   s   @rR   r&   r&     s        ##ajj"&&((  E 	--w
CCI' ' ' ' ' ' ' 'T T T T T      rQ   r&   c            	           e Zd Z e            Z e ed                    Z ee	j
                            e           e            d ed                    Z e ed          ej
                                        ddd	          Z ed
ddd ed                     ed ed                     edd ed                    fZ G d d          Z fdZ fdZ xZS )r3   zVLAN IDsr7   )	model__inFz
Scope type)r8   r   r9   r7   ScopeT)r7   r8   r9   r   r   r:   r]   r=   r>   
VLAN Groupr@   
vid_rangeszChild VLANs
scope_typescopec                       e Zd ZeZg dZdS )VLANGroupForm.Meta)r:   r]   r=   r)  r*  r+  r>   N)rJ   rK   rL   	VLANGrouprM   rN   rP   rQ   rR   rS   r-  O  r   rQ   rS   c                    |                     d          }|                     di           }||j        r|j        |d<   ||d<    t                      j        |i | t	          | d          x}r	 t
          j                             |          }|                                }|j                                        | j	        d         _
        |j        j        | j	        d         j        j        d<   d| j	        d         _        t!          t#          |j        j                            | j	        d         _        n# t(          $ r Y nw xY w| j        r|| j        j        k    rd | j        d<   d S d S d S d S )Nr{   r   r+  r*  r   r   F)r   r+  r~   r   r   r   rV   model_classrW   rN   r8   _metalabel_lowerr   attrsr   rT   r   verbose_namer7   r   r{   scope_type_idr   )	r   r   r   r{   r   r5  r*  rM   r   s	           rR   r   zVLANGroupForm.__init__U  s   ::j))**Y++HN'~GG 'F9$)&)))+D,???= 	-(0444FF
"..00050A0A0C0CG$-@E@WG$+1*=05G$--.{5;;S/T/T-U-UG$**%    } -$-2M!M!M(,W%%%	- 	-- -!M!Ms   1C	D; ;
EEc                     t                                                       | j                            d          | j        _        d S )Nr+  )r~   r   r   r   r{   r+  )r   r   s    rR   r   zVLANGroupForm.cleanm  s7     #/33G<<rQ   )rJ   rK   rL   r   r]   r   rT   r)  r   r   rV   r  VLANGROUP_SCOPE_TYPESr   r*  r   r
   noner+  r   rX   rS   r   r   r   r   s   @rR   r3   r3   6  s       9;;D''a
mm  J ('$++6K+LLz||aoo	  J $#ajj""$$  E 	QQ|__MMMAAm$4$4555wQQwZZ888I
 
 
 
 
 
 
 
- - - - -0= = = = = = = = =rQ   r3   c                   V   e Zd Z eej                                        dd ed                    Z e ed          e	j                                        ddd          Z
 e ed          ej                                        d	          Z e            Z G d
 d          ZdS )r2   FTr(  r   r
   r   )r7   r8   r9   r   r   r   r6   c                       e Zd ZeZg dZdS )VLANForm.Meta)r   r  vidr:   r   r   rC   rD   r=   rH   r>   N)rJ   rK   rL   r   rM   rN   rP   rQ   rR   rS   r;    s$        
 
 
rQ   rS   N)rJ   rK   rL   r   r.  rV   rW   rT   r  r
   r   r   r   r   rH   rS   rP   rQ   rR   r2   r2   t  s        ##"&&((aoo	  E #"aii!!##  D #"aii!!##  D
 |~~H
 
 
 
 
 
 
 
 
 
rQ   r2   c            
           e Zd Z e ed           ej        ee           ed                    Z	 e
            Z eddddd	 ed
                    fZ G d d          ZdS )r1   Ports	min_value	max_valueZComma-separated list of one or more port numbers. A range may be specified using a hyphen.r7   
base_field	help_textr:   r   portsr=   r>   zService Templater@   c                       e Zd ZeZdZdS )ServiceTemplateForm.Meta)r:   r   rF  r=   rH   r>   N)rJ   rK   rL   ServiceTemplaterM   rN   rP   rQ   rR   rS   rH    s        QrQ   rS   N)rJ   rK   rL   r   rT   r   IntegerFieldSERVICE_PORT_MINSERVICE_PORT_MAXrF  r   rH   r   rX   rS   rP   rQ   rR   r1   r1     s        ajj%5%&&
 
 
 !pqq  E |~~H 	WmV!!L^J_J_```IR R R R R R R R R RrQ   r1   c                      e Zd Z e ed          ej                                        dd          Z e ed          e	j                                        dd          Z
 e ed           ej        ee           ed          	          Z eej                                        d ed
          ddd          Z e            Z e e ed ed                     ed ed                              d edd ed                    ddd ed                    fZ G d d          ZdS )r/   r   FT)r7   r8   r9   r   zVirtual machiner>  r?  rB  rC  zIP Addressesz$devicez$virtual_machine)r   r   )r8   r9   r7   r   r   r@   r   r   r:   r   rF  zPort(s)r%  r  r=   r>   Servicec                       e Zd ZeZg dZdS )ServiceForm.Meta)	r   r   r:   r   rF  r  r=   rH   r>   N)rJ   rK   rL   rN  rM   rN   rP   rQ   rR   rS   rP    s$        
 
 
rQ   rS   N)rJ   rK   rL   r   rT   r   rV   rW   r   r    r   r   r   rJ  rK  rL  rF  r   r   r  r   rH   r   r   r   rX   rS   rP   rQ   rR   r/   r/     s       $$akk##%%	  F .-a!""'++--	  O ajj%5%&&
 
 
 !pqq  E 21"&&((a""4
 
	  K |~~H 	L(444*3D1E1EFFF  LWAAiLLAAA=&qq||	
 	
 	

I
 
 
 
 
 
 
 
 
 
rQ   r/   c                       e Zd Z e ed          ej                                        d          Z e	 e
 e	d ed                     e	d ed                               e
 e	d	 ed
                     e	ddd ed                              ddd ed                    fZ G d dej                  Z fdZ fdZ xZS )r0   zService templateFr6   r   r   r@   r   r   service_templatezFrom Templater:   r   rF  Customr  r=   r>   rN  c                       e Zd Zg dZdS )ServiceCreateForm.Meta)
r   r   rR  r:   r   rF  r  r=   rH   r>   N)rJ   rK   rL   rN   rP   rQ   rR   rS   rU    s        
 
 
rQ   rS   c                 h     t                      j        |i | dD ]}d| j        |         _        d S )Nr:   r   rF  F)r~   r   rN   r9   )r   r   r   r   r   s       rR   r   zServiceCreateForm.__init__  sL    $)&))) 3 	0 	0E*/DK''	0 	0rQ   c                     t                                                        j        d         rZ j        d         }|j         j        d<   |j         j        d<   |j         j        d<    j        d         s|j         j        d<   d S d S t           fddD                       s!t          j	        t          d                    d S )	NrR  r:   r   rF  r=   c              3   2   K   | ]}j         |         V  d S )Nr   )r   fr   s     rR   	<genexpr>z*ServiceCreateForm.clean.<locals>.<genexpr>  s+      QQaT&q)QQQQQQrQ   rW  zIMust specify name, protocol, and port(s) if not using a service template.)r~   r   r   r:   r   rF  r=   rW   r   r   rT   )r   rR  r   s   ` rR   r   zServiceCreateForm.clean  s    /0 		x#01CD(8(=Df%,<,EDj))9)?Dg&$]3 P3C3O!-000P PQQQQ3PQQQQQ 	x'*u(v(vwww	x 	xrQ   )rJ   rK   rL   r   rT   rI  rV   rW   rR  r   r   rX   r/   rS   r   r   r   r   s   @rR   r0   r0     s       ..a"## (,,..   	L(444*3D1E1EFFF  L+!!O2D2DEEEW11X;;GGG  =&qq||
	
 
	
 
	
I
 
 
 
 
{ 
 
 
0 0 0 0 0x x x x x x x x xrQ   r0   N)Hdjangor   "django.contrib.contenttypes.modelsr   django.core.exceptionsr   r   django.utils.translationr   rT   dcim.modelsr   r	   r
   ipam.choicesipam.constantsipam.formfieldsr   ipam.modelsnetbox.formsr   tenancy.formsr   utilities.exceptionsr   utilities.formsr   utilities.forms.fieldsr   r   r   r   r   r   r   utilities.forms.renderingr   r   r   r   utilities.forms.utilsr   utilities.forms.widgetsr   r   'utilities.templatetags.builtins.filtersr   virtualization.modelsr    r!   __all__r4   r.   r,   r"   r$   r#   r-   r+   r*   r)   r(   Formr'   r%   	ModelFormr&   r3   r2   r1   r/   r0   rP   rQ   rR   <module>rr     s4         : : : : : : F F F F F F F F 6 6 6 6 6 6 / / / / / / / / / /         . . . . . .     ( ( ( ( ( ( % % % % % % 5 5 5 5 5 5 , , , , , ,                  \ [ [ [ [ [ [ [ [ [ [ [ 1 1 1 1 1 1 : : : : : : : : ? ? ? ? ? ? = = = = = = = =.
 
 
 
 
k? 
 
 
<
 
 
 
 
k? 
 
 

 
 
 
 
o 
 
 

 
 
 
 
K 
 
 
,
 
 
 
 
; 
 
 
$# # # # #k? # # #L
 
 
 
 
 
 
 
*
 *
 *
 *
 *
o *
 *
 *
Z
 
 
 
 
+ 
 
 
:X X X X XK X X Xv
 
 
 
 
; 
 
 
	 	 	 	 	%* 	 	 	F F F F FO F F FR% % % % %eo % % %P;= ;= ;= ;= ;=O ;= ;= ;=|
 
 
 
 
{O 
 
 
:R R R R R/ R R R(0
 0
 0
 0
 0
/ 0
 0
 0
f-x -x -x -x -x -x -x -x -x -xrQ   