
    >Tf;                        d dl mZ d dlmZ d dlT 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j                  Z G d deej                  Z G d deej                  Z G d deej                  Z G d deej                  Z G d deej                  Z G d deej                  Z  G d deej!                  Z" G d deej#                  Z$ G d deej%                  Z& G d d eej'                  Z( G d! d"eej)                  Z* G d# d$eej+                  Z, G d% d&eej-                  Z. G d' d(eej/                  Z0 G d) d*eej1                  Z2 G d+ d,eej3                  Z4 G d- d.eej5                  Z6 G d/ d0eej7                  Z8 G d1 d2eej9                  Z: G d3 d4eej;                  Z< G d5 d6e          Z=d7S )8    )forms)gettext_lazy)*)NetBoxModelForm)DynamicModelChoiceFieldDynamicModelMultipleChoiceFieldExpandableNameField)FieldSet)	APISelect   )model_forms)ComponentCreateFormConsolePortCreateFormConsolePortTemplateCreateFormConsoleServerPortCreateForm#ConsoleServerPortTemplateCreateFormDeviceBayCreateFormDeviceBayTemplateCreateFormFrontPortCreateFormFrontPortTemplateCreateFormInterfaceCreateFormInterfaceTemplateCreateFormInventoryItemCreateFormInventoryItemTemplateCreateFormModuleBayCreateFormModuleBayTemplateCreateFormPowerOutletCreateFormPowerOutletTemplateCreateFormPowerPortCreateFormPowerPortTemplateCreateFormRearPortCreateFormRearPortTemplateCreateFormVirtualChassisCreateFormc                        e Zd ZdZ e ed                    Z e ed          d ed                    ZdZ fd	Z	 xZ
S )
r   z
    Subclass this form when facilitating the creation of one or more component or component template objects based on
    a name pattern.
    Name)labelLabelFTAlphanumeric ranges are supported. (Must match the number of objects being created.)r&   required	help_textnamer&   c                    t                                                       | j                            | j        d                   x}sd S t          |          }| j        D ]i}t          | j        |                   }| j        |         r@||k    r:t          j        |t          d          	                    ||          id          jd S )Nr   zVThe provided pattern specifies {value_count} values, but {pattern_count} are expected.)value_countpattern_countlabel_pattern_mismatch)code)
supercleancleaned_datagetreplication_fieldslenr   ValidationError_format)selfpatternsr0   
field_namer/   	__class__s        =/var/www/html/netbox-4.1.3/netbox/dcim/forms/object_create.pyr4   zComponentCreateForm.clean7   s     !-11$2I!2LMMM 	FH1 	2 	2Jd/
;<<K , 21M1M+p! !fMfRR- 1	2 2 2 2	2 	2    )__name__
__module____qualname____doc__r	   r:   r-   r&   r7   r4   __classcell__r?   s   @r@   r   r   %   s          aii  D  ajj!jkk  E +2 2 2 2 2 2 2 2 2rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS )"ConsolePortTemplateCreateForm.Metar,   NrB   rC   rD   exclude rA   r@   MetarJ   O           #rA   rN   N)rB   rC   rD   r   ConsolePortTemplateFormrN   rM   rA   r@   r   r   M   D        $ $ $ $ ${27 $ $ $ $ $rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS )(ConsoleServerPortTemplateCreateForm.Metar,   NrK   rM   rA   r@   rN   rT   U   rO   rA   rN   N)rB   rC   rD   r   ConsoleServerPortTemplateFormrN   rM   rA   r@   r   r   S   sD        $ $ $ $ ${8= $ $ $ $ $rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r    c                       e Zd ZdZdS ) PowerPortTemplateCreateForm.Metar,   NrK   rM   rA   r@   rN   rX   [   rO   rA   rN   N)rB   rC   rD   r   PowerPortTemplateFormrN   rM   rA   r@   r    r    Y   D        $ $ $ $ ${05 $ $ $ $ $rA   r    c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS )"PowerOutletTemplateCreateForm.Metar,   NrK   rM   rA   r@   rN   r]   a   rO   rA   rN   N)rB   rC   rD   r   PowerOutletTemplateFormrN   rM   rA   r@   r   r   _   rQ   rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS ) InterfaceTemplateCreateForm.Metar,   NrK   rM   rA   r@   rN   ra   g   rO   rA   rN   N)rB   rC   rD   r   InterfaceTemplateFormrN   rM   rA   r@   r   r   e   rZ   rA   r   c            
            e Zd Z ej        g  ed           ed           ej        ddi                    Z eddd	d
dddd          fZ	 G d de
j        j                  Z fdZd Zd Z xZS )r   
Rear portsBSelect one rear port assignment for each front port being created.size   attrschoicesr&   r+   widgetdevice_typemodule_typer-   r&   typecolor	rear_portdescriptionc                       e Zd ZdZdS ) FrontPortTemplateCreateForm.Metar-   r&   rq   rear_port_positionNrK   rM   rA   r@   rN   rt   x           FrA   rN   c           	          t                      j        |i | d| j        v s| j                            d          rSt
          j                            | j                            d          p| j                            d                    }nxd| j        v s| j                            d          rSt          j                            | j                            d          p| j                            d                    }nd S d |j        	                                D             }g }|j
        	                                }|D ]q}t          d|j        dz             D ]V}|j        |f|vrI|                    d                    |j        |          d                    |j        |          f           Wr|| j        d         _        d S )Nrm   pkrn   c                 *    g | ]}|j         |j        fS rM   rear_port_idrv   .0
front_ports     r@   
<listcomp>z8FrontPortTemplateCreateForm.__init__.<locals>.<listcomp>   3     #
 #
 #
 $j&CD#
 #
 #
rA   r   {}:{}rq   )r3   __init__initialdatar6   
DeviceTypeobjects
ModuleTypefrontporttemplatesallrearporttemplatesrange	positionsrz   appendr;   r-   fieldsrk   )
r<   argskwargsparentoccupied_port_positionsrk   
rear_portsrq   ir?   s
            r@   r   z$FrontPortTemplateCreateForm.__init__{   s   $)&))) DL((DIMM-,H,H('++<##M22RdimmM6R6R ,  FF dl**dimmM.J.J*'++<##M22RdimmM6R6R ,  FF F#
 #
$7;;==#
 #
 #
 -1133
# 	 	I1i1A566  L!$,CCCNN 	a88'..YZ:[:[\  
 ,3K (((rA   c                     t          | j        d                   }t          | j        d                   }||k    r8t          j        dt	          d                              ||          i          d S )Nr-   rq   zThe number of front port templates to be created ({frontport_count}) must match the selected number of rear port positions ({rearport_count}).frontport_countrearport_countr8   r5   r   r9   r:   r;   r<   r   r   s      r@   r4   z!FrontPortTemplateCreateForm.clean   s     d/788T.{;<<n,,'QH  &$3#1   	)    -,rA   c                     | j         d         |                             d          \  }}t          |          t          |          dS Nrq   :)rq   rv   r5   splitintr<   	iterationrq   positions       r@   get_iterative_dataz.FrontPortTemplateCreateForm.get_iterative_data   L     #/<YGMMcRR	8 Y"%h--
 
 	
rA   )rB   rC   rD   r   MultipleChoiceFieldr:   SelectMultiplerq   r
   	fieldsetsr   FrontPortTemplateFormrN   r   r4   r   rF   rG   s   @r@   r   r   k   s       ))aoo!XYY#u#61+666	  I 	vwQ\^kllIG G G G G{05 G G G3 3 3 3 3@  "
 
 
 
 
 
 
rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r"   c                       e Zd ZdZdS )RearPortTemplateCreateForm.Metar,   NrK   rM   rA   r@   rN   r      rO   rA   rN   N)rB   rC   rD   r   RearPortTemplateFormrN   rM   rA   r@   r"   r"      sD        $ $ $ $ ${/4 $ $ $ $ $rA   r"   c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS ) DeviceBayTemplateCreateForm.Metar,   NrK   rM   rA   r@   rN   r      rO   rA   rN   N)rB   rC   rD   r   DeviceBayTemplateFormrN   rM   rA   r@   r   r      rZ   rA   r   c                       e Zd Z e ed          d ed                    ZdZ G d dej        j	                  Z	dS )	r   PositionFr(   r)   r-   r&   r   c                       e Zd ZdZdS ) ModuleBayTemplateCreateForm.Metar   NrK   rM   rA   r@   rN   r              /rA   rN   N)
rB   rC   rD   r	   r:   r   r7   r   ModuleBayTemplateFormrN   rM   rA   r@   r   r      s        ""a
mm!jkk  H
 70 0 0 0 0{05 0 0 0 0 0rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS )$InventoryItemTemplateCreateForm.Metar,   NrK   rM   rA   r@   rN   r      rO   rA   rN   N)rB   rC   rD   r   InventoryItemTemplateFormrN   rM   rA   r@   r   r      sD        $ $ $ $ ${49 $ $ $ $ $rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS )ConsolePortCreateForm.Metar,   NrK   rM   rA   r@   rN   r      rO   rA   rN   N)rB   rC   rD   r   ConsolePortFormrN   rM   rA   r@   r   r      D        $ $ $ $ ${*/ $ $ $ $ $rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS ) ConsoleServerPortCreateForm.Metar,   NrK   rM   rA   r@   rN   r      rO   rA   rN   N)rB   rC   rD   r   ConsoleServerPortFormrN   rM   rA   r@   r   r      rZ   rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS )PowerPortCreateForm.Metar,   NrK   rM   rA   r@   rN   r      rO   rA   rN   N)rB   rC   rD   r   PowerPortFormrN   rM   rA   r@   r   r      D        $ $ $ $ ${(- $ $ $ $ $rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS )PowerOutletCreateForm.Metar,   NrK   rM   rA   r@   rN   r      rO   rA   rN   N)rB   rC   rD   r   PowerOutletFormrN   rM   rA   r@   r   r      r   rA   r   c                   N     e Zd Z G d dej        j                  Z fdZ xZS )r   c                       e Zd ZdZdS )InterfaceCreateForm.Metar,   NrK   rM   rA   r@   rN   r      rO   rA   rN   c                      t                      j        |i | d| j        v r*| j        d         xj        t	          d          z  c_        d S d S )Nmoduler-   zcThe string <code>{module}</code> will be replaced with the position of the assigned module, if any.)r3   r   r   r+   r:   )r<   r   r   r?   s      r@   r   zInterfaceCreateForm.__init__   sd    $)&)))t{""K))Qu. . )))) #"rA   )rB   rC   rD   r   InterfaceFormrN   r   rF   rG   s   @r@   r   r      sh        $ $ $ $ ${(- $ $ $        rA   r   c                   l    e Zd Z e ed          ej                                        d edddd                    Z	 e
j        g  ed           ed	           e
j        d
di                    Z edddddddddd
  
        fZ G d dej        j                  Z fdZd Zd Z xZS )r   DeviceT.z#form_fields)zhx-getz
hx-includez	hx-targetrh   )r&   querysetselectorrl   rd   re   rf   rg   rj   devicer   r-   r&   ro   rp   rq   mark_connectedrr   tagsc                       e Zd ZdZdS )FrontPortCreateForm.Metaru   NrK   rM   rA   r@   rN   r     rw   rA   rN   c           	          t                      j        |i | | j                            d          p| j                            d          x}r!t
          j                            |          }nd S d |j                                        D             }g }t          j        
                    |          }|D ]q}t          d|j        dz             D ]V}	|j        |	f|vrI|                    d                    |j        |	          d                    |j        |	          f           Wr|| j        d         _        d S )Nr   ry   c                 *    g | ]}|j         |j        fS rM   r|   r~   s     r@   r   z0FrontPortCreateForm.__init__.<locals>.<listcomp>(  r   rA   )r   r   r   rq   )r3   r   r   r6   r   r   r   
frontportsr   RearPortfilterr   r   rz   r   r;   r-   r   rk   )r<   r   r   	device_idr   r   rk   r   rq   r   r?   s             r@   r   zFrontPortCreateForm.__init__  s[   $)&)))	h//M4<3C3CH3M3MM9 	^''9'55FFF#
 #
$/3355#
 #
 #
 %,,F,;;
# 	 	I1i1A566  L!$,CCCNN 	a88'..YZ:[:[\  
 ,3K (((rA   c                     t          | j        d                   }t          | j        d                   }||k    r8t          j        dt	          d                              ||          i          d S )Nr-   rq   zThe number of front ports to be created ({frontport_count}) must match the selected number of rear port positions ({rearport_count}).r   r   r   s      r@   r4   zFrontPortCreateForm.clean8  s     d/788T.{;<<n,,'Q>  &$3#1   	)    -,rA   c                     | j         d         |                             d          \  }}t          |          t          |          dS r   r   r   s       r@   r   z&FrontPortCreateForm.get_iterative_dataH  r   rA   )rB   rC   rD   r   r:   r   r   r   r   r   r   r   r   rq   r
   r   r   FrontPortFormrN   r   r4   r   rF   rG   s   @r@   r   r      sk       $$akk##%%y -, 
 
 
	  F *)aoo!XYY#u#61+666	  I 	h+O_anpv	
 	
IG G G G G{(- G G G3 3 3 3 34   
 
 
 
 
 
 
rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r!   c                       e Zd ZdZdS )RearPortCreateForm.Metar,   NrK   rM   rA   r@   rN   r   U  rO   rA   rN   N)rB   rC   rD   r   RearPortFormrN   rM   rA   r@   r!   r!   S  sD        $ $ $ $ ${', $ $ $ $ $rA   r!   c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS )DeviceBayCreateForm.Metar,   NrK   rM   rA   r@   rN   r   [  rO   rA   rN   N)rB   rC   rD   r   DeviceBayFormrN   rM   rA   r@   r   r   Y  r   rA   r   c                       e Zd Z e ed          d ed                    ZdZ G d dej        j	                  Z	dS )	r   r   Fr(   r)   r   c                       e Zd ZdZdS )ModuleBayCreateForm.Metar   NrK   rM   rA   r@   rN   r   g  r   rA   rN   N)
rB   rC   rD   r	   r:   r   r7   r   ModuleBayFormrN   rM   rA   r@   r   r   _  s        ""a
mm!jkk  H
 70 0 0 0 0{(- 0 0 0 0 0rA   r   c                   >    e Zd Z G d dej        j                  ZdS )r   c                       e Zd ZdZdS )InventoryItemCreateForm.Metar,   NrK   rM   rA   r@   rN   r   m  rO   rA   rN   N)rB   rC   rD   r   InventoryItemFormrN   rM   rA   r@   r   r   k  sD        $ $ $ $ ${,1 $ $ $ $ $rA   r   c                   ~    e Zd Z e ed          ej                                        dddi          Z e ed          e	j                                        dddi          Z
 e ed          ej                                        ddd	d
          Z e ed          ej                                        ddddi          Z e ed          ej                                        dddd          Z ej         ed          dd ed                    Z G d d          Z fdZ fdZ xZS )r#   RegionFsitesz$site)r&   r   r*   initial_paramsz
Site groupSitez$regionz$site_group)	region_idgroup_id)r&   r   r*   query_paramsRackNonesite_id)r&   r   r*   null_optionr  Membersz$rack)r  rack_idzInitial positionr   zQPosition of the first member device. Increases by one for each additional member.)r&   r   r*   r+   c                       e Zd ZeZg dZdS )VirtualChassisCreateForm.Meta)
r-   domainrr   region
site_groupsiterackmembersinitial_positionr   N)rB   rC   rD   VirtualChassismodelr   rM   rA   r@   rN   r	    s$        
 
 
rA   rN   c                     t                                                       | j        d         r0| j        d         %t          j        dt          d          i          d S d S )Nr  r  z5A position must be specified for the first VC member.)r3   r4   r5   r   r9   r:   )r<   r?   s    r@   r4   zVirtualChassisCreateForm.clean  sj    Y' 	D,=>P,Q,Y'"A&]$^$^)   	 	,Y,YrA   c                      t                      j        |i |}|j        rl| j        d         r_| j                            dd          }t          | j        d         |          D ]'\  }}||_        ||_        |                                 (|S )Nr  r  r   )start)r3   saverz   r5   r6   	enumeratevirtual_chassisvc_position)r<   r   r   instancer  r   memberr?   s          r@   r  zVirtualChassisCreateForm.save  s    577<000 ; 	4,Y7 	#0445GKK&t'8'CK[\\\  	6)1&%&"rA   )rB   rC   rD   r   r:   r   r   r   r  	SiteGroupr  r   r  r  r  r   r   r  r   IntegerFieldr  rN   r4   r  rF   rG   s   @r@   r#   r#   u  s       $$akk##%%W
	  F )(aoo"&&((W
	  J #"aii!!##"%
 
	  D #"aii!!##w
  D .-a	ll##%%
 
	  G *u)a"##!ghh	  
 
 
 
 
 
 
 
            rA   r#   N)>djangor   django.utils.translationr   r:   dcim.modelsnetbox.formsr   utilities.forms.fieldsr   r   r	   utilities.forms.renderingr
   utilities.forms.widgetsr    r   __all__Formr   rP   r   rU   r   rY   r    r^   r   rb   r   r   r   r   r"   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r!   r   r   r   r   r   r   r#   rM   rA   r@   <module>r(     s         6 6 6 6 6 6     ( ( ( ( ( ( p p p p p p p p p p . . . . . . - - - - - -      4!2 !2 !2 !2 !2%* !2 !2 !2P$ $ $ $ $$79\ $ $ $$ $ $ $ $*={?h $ $ $$ $ $ $ $"5{7X $ $ $$ $ $ $ $$79\ $ $ $$ $ $ $ $"5{7X $ $ $I
 I
 I
 I
 I
"5{7X I
 I
 I
X$ $ $ $ $!4k6V $ $ $$ $ $ $ $"5{7X $ $ $	0 	0 	0 	0 	0"5{7X 	0 	0 	0$ $ $ $ $&9;;` $ $ $$ $ $ $ $/1L $ $ $$ $ $ $ $"5{7X $ $ $$ $ $ $ $-{/H $ $ $$ $ $ $ $/1L $ $ $    -{/H   Q
 Q
 Q
 Q
 Q
-{/H Q
 Q
 Q
h$ $ $ $ $,k.F $ $ $$ $ $ $ $-{/H $ $ $	0 	0 	0 	0 	0-{/H 	0 	0 	0$ $ $ $ $1;3P $ $ $L L L L L L L L L LrA   