
    >Tf9                     d   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T d dlT d dlT d dlmZ d d	lmZ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 d dl m!Z! d dl"m#Z# ddl$m%Z% dZ& G d de          Z' G d de          Z( G d de          Z) G d de          Z* G d de          Z+ G d de          Z, G d de          Z- G d  d!e          Z. G d" d#e          Z/ G d$ d%e          Z0 G d& d'e          Z1 G d( d)e          Z2 G d* d+e          Z3 G d, d-e          Z4 G d. d/e4          Z5 G d0 d1e%e          Z6 G d2 d3e          Z7 G d4 d5e          Z8 G d6 d7e          Z9 G d8 d9e          Z: G d: d;e          Z; G d< d=e          Z< G d> d?e          Z= G d@ dAe          Z> G dB dCe          Z? G dD dEe          Z@ G dF dGe          ZA G dH dIe          ZB G dJ dKe          ZC G dL dMe          ZD G dN dOe          ZE G dP dQe          ZFdRS )S    )forms)ContentType)SimpleArrayField)ObjectDoesNotExist)	mark_safe)gettext_lazy)*)ConfigTemplate)VRF	IPAddress)NetBoxModelImportForm)Tenant)CSVChoiceFieldCSVContentTypeFieldCSVModelChoiceFieldCSVModelMultipleChoiceFieldCSVTypedChoiceField	SlugField)Cluster)WirelessRoleChoices   )ModuleCommonForm)CableImportFormConsolePortImportFormConsoleServerPortImportFormDeviceBayImportFormDeviceImportFormDeviceRoleImportFormDeviceTypeImportFormFrontPortImportFormInterfaceImportFormInventoryItemImportFormInventoryItemRoleImportFormLocationImportFormManufacturerImportFormModuleImportFormModuleBayImportFormModuleTypeImportFormPlatformImportFormPowerFeedImportFormPowerOutletImportFormPowerPanelImportFormPowerPortImportFormRackImportFormRackReservationImportFormRackRoleImportFormRackTypeImportFormRearPortImportFormRegionImportFormSiteImportFormSiteGroupImportFormVirtualChassisImportFormVirtualDeviceContextImportFormc            	           e Zd Z e ed          ej                                        dd ed                    Z G d d          Z	dS )	r3   ParentFnamezName of parent regionlabelquerysetrequiredto_field_name	help_textc                       e Zd ZeZdZdS )RegionImportForm.Meta)r:   slugparentdescriptiontagsN)__name__
__module____qualname__Regionmodelfields     ;/var/www/html/netbox-4.1.3/netbox/dcim/forms/bulk_import.pyMetarB   C   s        BrN   rP   N)
rG   rH   rI   r   _rJ   objectsallrD   rP   rM   rN   rO   r3   r3   :   s          akk##%%!+,,  FC C C C C C C C C CrN   r3   c            	           e Zd Z e ed          ej                                        dd ed                    Z G d d          Z	dS )	r5   r9   Fr:   zName of parent site groupr;   c                       e Zd ZeZdZdS )SiteGroupImportForm.Meta)r:   rC   rD   rE   N)rG   rH   rI   	SiteGrouprK   rL   rM   rN   rO   rP   rV   Q   s        :rN   rP   N)
rG   rH   rI   r   rQ   rW   rR   rS   rD   rP   rM   rN   rO   r5   r5   H   s          akk"&&((!/00  F; ; ; ; ; ; ; ; ; ;rN   r5   c            	          e Zd Z e ed          e ed                    Z e ed          ej	        
                                dd ed                    Z e ed	          ej	        
                                dd ed
                    Z e ed          ej	        
                                dd ed                    Z G d d          ZdS )r4   StatusOperational statusr<   choicesr@   rJ   Fr:   zAssigned regionr;   GroupzAssigned groupr   Assigned tenantc            	       |    e Zd ZeZdZd ed                     ed           ed                              iZ	dS )SiteImportForm.Meta)r:   rC   statusregiongrouptenantfacility	time_zonerE   physical_addressshipping_addresslatitude	longitudecommentsrF   rf   zR{} (<a href="https://en.wikipedia.org/wiki/List_of_tz_database_time_zones">{}</a>)z	Time zonezavailable optionsN)
rG   rH   rI   SiterK   rL   r   formatrQ   
help_textsrM   rN   rO   rP   r`   r   s_        

 dkkAkNNAA&9$:$:  



rN   rP   N)rG   rH   rI   r   rQ   SiteStatusChoicesra   r   rJ   rR   rS   rb   rW   rc   r   rd   rP   rM   rN   rO   r4   r4   V   sJ       ^akk!!())  F
 ! akk##%%!%&&  F  ajj"&&((!$%%  E ! akk##%%!%&&  F
 
 
 
 
 
 
 
 
 
rN   r4   c                       e Zd Z e ed          ej                                        d ed                    Z e ed          e	j                                        dd ed          d ed	          i
          Z
 e ed          e ed                    Z e ed          ej                                        dd ed                    Z G d d          Zd fd	Z xZS )r$   rl   r:   Assigned siter<   r=   r?   r@   r9   FzParent locationinvalid_choicezLocation not found.r<   r=   r>   r?   r@   error_messagesrY   rZ   r[   r   r^   r;   c                       e Zd ZeZdZdS )LocationImportForm.Meta)	siterD   r:   rC   ra   rd   re   rE   rF   N)rG   rH   rI   LocationrK   rL   rM   rN   rO   rP   rw      s        jrN   rP   Nc                      t                      j        |g|R i | |rYd| j        d         j         |                    d          i} | j        d         j        j        di || j        d         _        d S d S )Nsite__rx   rD   rM   super__init__rL   r?   getr=   filterselfdataargskwargsparams	__class__s        rO   r~   zLocationImportForm.__init__   s    /////// 	]Bt{62@BBDHHVDTDTUF-RT[-B-K-R-\-\U[-\-\DK!***	] 	]rN   N)rG   rH   rI   r   rQ   rl   rR   rS   rx   ry   rD   r   LocationStatusChoicesra   r   rd   rP   r~   __classcell__r   s   @rO   r$   r$      s       aii!!##!O$$	  D ! akk!%%''!%&&aa 566
	 	 	F ^akk%!())  F
 ! akk##%%!%&&  Fk k k k k k k k] ] ] ] ] ] ] ] ] ]rN   r$   c                   <    e Zd Z e            Z G d d          ZdS )r0   c                       e Zd ZeZdZdS )RackRoleImportForm.Meta)r:   rC   colorrE   rF   N)rG   rH   rI   RackRolerK   rL   rM   rN   rO   rP   r      s        ArN   rP   NrG   rH   rI   r   rC   rP   rM   rN   rO   r0   r0      sQ        9;;DB B B B B B B B B BrN   r0   c                       e Zd Z ej         ed          ej                                        d ed                    Z	 e
 ed          ed ed                    Z ej        dd	 ed
                    Z ej         ed          e ed                    Z e
 ed          ed ed                    Z e
 ed          ed ed                    Z G d d          Zd fd	Z xZS )r1   Manufacturerr:   z"The manufacturer of this rack typerr   TypeFForm factorr<   r\   r>   r@   r   z(The lowest-numbered position in the rack)r>   	min_valuer@   WidthRail-to-rail width (in inches)r[   
Outer unitUnit for outer dimensionsWeight unitUnit for rack weightsc                       e Zd ZeZdZdS )RackTypeImportForm.Meta)manufacturerrK   rC   form_factorwidthu_heightstarting_unit
desc_unitsouter_widthouter_depth
outer_unitmounting_depthweight
max_weightweight_unitrE   rk   rF   N)rG   rH   rI   RackTyperK   rL   rM   rN   rO   rP   r      s        
rN   rP   Nc                 B     t                      j        |g|R i | d S r   )r}   r~   )r   r   r   r   r   s       rO   r~   zRackTypeImportForm.__init__   s0    /////////rN   r   )rG   rH   rI   r   ModelChoiceFieldrQ   r   rR   rS   r   r   RackFormFactorChoicesr   IntegerFieldr   ChoiceFieldRackWidthChoicesr   RackDimensionUnitChoicesr   WeightUnitChoicesr   rP   r~   r   r   s   @rO   r1   r1      s       )5)a%))++!899	  L !.aii%!M""	  K 'E&!>??  M
 Eajj !455  E
  aoo(!/00	  J !.a!!+,,	  K
 
 
 
 
 
 
 
0 0 0 0 0 0 0 0 0 0rN   r1   c            	       j    e Zd Z e ed          ej                                        d          Z e ed          e	j                                        dd          Z
 e ed          ej                                        dd ed          	          Z e ed
          e ed                    Z e ed          ej                                        dd ed          	          Z e ed          ed ed                    Z ej         ed          e ed                    Z e ed          ed ed                    Z e ed          ed ed                    Z e ed          ed ed                    Z G d d          Zd fd	Z xZ S )r.   rl   r:   r<   r=   r?   ry   Fr<   r=   r>   r?   r   zName of assigned tenantr;   rY   rZ   r[   RolezName of assigned roler   r   r   r   r   r   r   AirflowAirflow directionr   r   c                       e Zd ZeZdZdS )RackImportForm.Meta)rx   locationr:   facility_idrd   ra   roler   serial	asset_tagr   r   r   r   r   r   r   airflowr   r   r   rE   rk   rF   N)rG   rH   rI   RackrK   rL   rM   rN   rO   rP   r   !  s        
rN   rP   Nc                      t                      j        |g|R i | |rYd| j        d         j         |                    d          i} | j        d         j        j        di || j        d         _        d S d S Nr{   rx   r   rM   r|   r   s        rO   r~   zRackImportForm.__init__)      /////// 	a Ct{62@BBDHHVDTDTUF/Vt{:/F/O/V/`/`Y_/`/`DK
#,,,		a 	arN   r   )!rG   rH   rI   r   rQ   rl   rR   rS   rx   ry   r   r   rd   r   RackStatusChoicesra   r   r   r   r   r   r   r   r   r   r   RackAirflowChoicesr   r   r   rP   r~   r   r   s   @rO   r.   r.      s       aii!!##  D
 #"a
mm!%%''	  H ! akk##%%!-..  F ^akk!!())  F
 aii!%%''!+,,  D !.aii%!M""	  K Eajj !455  E
  aoo(!/00	  J na	ll"!'((	  G !.a!!+,,	  K
 
 
 
 
 
 
 
a a a a a a a a a arN   r.   c            	       Z    e Zd Z e ed          ej                                        d ed                    Z e ed          e	j                                        dd ed                    Z
 e ed	          ej                                        d ed	                    Z e ed
           ej                    d ed                    Z e ed          ej                                        dd ed                    Z G d d          Zd fd	Z xZS )r/   rl   r:   zParent siterr   ry   FRack's location (if any)r<   r=   r?   r>   r@   r   UnitsTz/Comma-separated list of individual unit numbers)r<   
base_fieldr>   r@   r   r^   r;   c                       e Zd ZeZdZdS )RackReservationImportForm.Meta)rx   r   rackunitsrd   rE   rk   rF   N)rG   rH   rI   RackReservationrK   rL   rM   rN   rO   rP   r   U  s        crN   rP   Nc                     t                      j        |g|R i | |rd| j        d         j         |                    d          i} | j        d         j        j        di || j        d         _        d| j        d         j         |                    d          d| j        d         j         |                    d          i} | j        d         j        j        di || j        d         _        d S d S )Nr{   rx   r   
location__r   rM   r|   r   s        rO   r~   z"RackReservationImportForm.__init__Y  s   /////// 	Y Ct{62@BBDHHVDTDTUF/Vt{:/F/O/V/`/`Y_/`/`DK
#, =V,:<<dhhv>N>NDT[4BDDdhhzFZFZF ,O4;v+>+G+N+X+XQW+X+XDK(((	Y 	YrN   r   )rG   rH   rI   r   rQ   rl   rR   rS   rx   ry   r   r   r   r   r   r   r   r   rd   rP   r~   r   r   s   @rO   r/   r/   3  s       aii!!##!M""	  D #"a
mm!%%''!.//  H aii!!##!F))	  D ajj%5%''!EFF	  E ! akk##%%!%&&  Fd d d d d d d dY Y Y Y Y Y Y Y Y YrN   r/   c                   (    e Zd Z G d d          ZdS )r%   c                       e Zd ZeZdZdS )ManufacturerImportForm.Meta)r:   rC   rE   rF   N)rG   rH   rI   r   rK   rL   rM   rN   rO   rP   r   l  s        8rN   rP   N)rG   rH   rI   rP   rM   rN   rO   r%   r%   j  s<        9 9 9 9 9 9 9 9 9 9rN   r%   c            	          e Zd Z e ed          ej                                        d ed                    Z e ed          e	j                                        dd ed                    Z
 ej         ed	          d ed
                    Z e ed          ed ed                    Z G d d          ZdS )r   r   r:   z0The manufacturer which produces this device typerr   zDefault platformFz8The default platform for devices of this type (optional)r   WeightzDevice weightr<   r>   r@   r   zUnit for device weightr   c                       e Zd ZeZg dZdS )DeviceTypeImportForm.Meta)r   default_platformrK   rC   part_numberr   exclude_from_utilizationis_full_depthsubdevice_roler   rE   r   r   rk   rF   N)rG   rH   rI   
DeviceTyperK   rL   rM   rN   rO   rP   r     s$        
 
 
rN   rP   N)rG   rH   rI   r   rQ   r   rR   rS   r   Platformr   r   DecimalFieldr   r   r   r   rP   rM   rN   rO   r   r   q  s@       &&a%))++!FGG	  L +*a"##!%%''!NOO    Uakk!O$$  F
 !.a!!,--	  K
 
 
 
 
 
 
 
 
 
rN   r   c                   \   e Zd Z ej         ed          ej                                        d          Z	 e
 ed          ed ed                    Z ej         ed          d ed	          
          Z e
 ed          ed ed                    Z G d d          ZdS )r(   r   r:   r   r   Fr   r   r   zModule weightr   r   zUnit for module weightc                       e Zd ZeZg dZdS )ModuleTypeImportForm.Meta)	r   rK   r   rE   r   r   r   rk   rF   N)rG   rH   rI   
ModuleTyperK   rL   rM   rN   rO   rP   r     s'         A  A  ArN   rP   N)rG   rH   rI   r   r   rQ   r   rR   rS   r   r   ModuleAirflowChoicesr   r   r   r   r   rP   rM   rN   rO   r(   r(     s'       )5)a%))++  L
 na	ll$!'((	  G  Uakk!O$$  F
 !.a!!,--	  KA A A A A A A A A ArN   r(   c            	           e Zd Z e ed          ej                                        dd ed                    Z e	            Z
 G d d          ZdS )r   Config templater:   Fr   c                       e Zd ZeZdZdS )DeviceRoleImportForm.Meta)r:   rC   r   vm_roleconfig_templaterE   rF   N)rG   rH   rI   
DeviceRolerK   rL   rM   rN   rO   rP   r     s        _rN   rP   N)rG   rH   rI   r   rQ   r
   rR   rS   r   r   rC   rP   rM   rN   rO   r   r     s        ))a!""'++--!%&&  O 9;;D` ` ` ` ` ` ` ` ` `rN   r   c            	           e Zd Z e            Z e ed          ej        	                                dd ed                    Z
 e ed          ej        	                                dd ed                    Z G d d	          Zd
S )r)   r   Fr:   z/Limit platform assignments to this manufacturerr;   r   r   c                       e Zd ZeZdZdS )PlatformImportForm.Meta)r:   rC   r   r   rE   rF   N)rG   rH   rI   r   rK   rL   rM   rN   rO   rP   r     s        
rN   rP   N)rG   rH   rI   r   rC   r   rQ   r   rR   rS   r   r
   r   rP   rM   rN   rO   r)   r)     s        9;;D&&a%))++!EFF  L *)a!""'++--!%&&  O
 
 
 
 
 
 
 
 
 
rN   r)   c            	           e Zd Z e ed          ej                                        d ed                    Z e ed          e	j                                        dd ed                    Z
 e ed	          ej                                        d ed
                    Z e ed          ej                                        d ed                    Z e ed          ej                                        dd ed                    Z e ed          e ed                    Z e ed          ej                                        dd ed                    Z e ed          ej                                        dd ed                    Z G d d          Zd fd	Z xZS )BaseDeviceImportFormzDevice roler:   Assigned rolerr   r   Fr^   r;   r   zDevice type manufacturerzDevice typerK   zDevice type modelr   zAssigned platformrY   rZ   r[   zVirtual chassisr   r   zVirtualization clusterc                       e Zd Zg ZeZdS )BaseDeviceImportForm.MetaN)rG   rH   rI   rL   DevicerK   rM   rN   rO   rP   r     s        rN   rP   Nc                      t                      j        |g|R i | |rYd| j        d         j         |                    d          i} | j        d         j        j        di || j        d         _        d S d S )Nmanufacturer__r   device_typerM   r|   r   s        rO   r~   zBaseDeviceImportForm.__init__  s    /////// 	g St{>'B'PRRTXT\T\]kTlTlmF2\$+m2L2U2\2f2f_e2f2fDK&///		g 	grN   r   )rG   rH   rI   r   rQ   r   rR   rS   r   r   rd   r   r   r   r   r   platformr   DeviceStatusChoicesra   VirtualChassisvirtual_chassisr   clusterrP   r~   r   r   s   @rO   r   r     s       a#''))!O$$	  D ! akk##%%!%&&  F '&a%))++!.//	  L &%a#''))!'((	  K #"a
mm!%%''!'((  H ^akk#!())  F
 *)a!""'++--!%&&  O "!a	ll$$&&!,--  G       g g g g g g g g g grN   r   c            	       ~    e Zd Z e ed          ej                                        d ed                    Z e ed          e	j                                        dd ed                    Z
 e ed	          ej                                        dd ed
                    Z e ed          ed ed                    Z e ed          ej                                        dd ed                    Z e ed          ej                                        dd ed                    Z e ed          ed ed                    Z e ed          ej                                        dd ed                    Z G d dej                  Zd fd	Z fdZ xZS )r   rl   r:   rq   rr   ry   FzAssigned location (if any)r   r   zAssigned rack (if any)FacezMounted rack facer   r9   z!Parent device (for child devices)z
Device bayz@Device bay in which this device is installed (for child devices)r   r   r   c                       e Zd Zg dZdS )DeviceImportForm.Meta)r:   r   rd   r   r   r   r   r   ra   rx   r   r   positionfaceri   rj   rD   
device_bayr   r  vc_positionvc_priorityr  rE   r   rk   rF   N)rG   rH   rI   rL   rM   rN   rO   rP   r  Q  s        
 
 
rN   rP   Nc                 >    t                      j        |g|R i | |ryd| j        d         j         |                    d          i} | j        d         j        j        d	i || j        d         _         | j        d         j        j        d	i || j        d         _        d| j        d         j         |                    d          i}|                    d          x}r*|                    d| j        d         j         |i            | j        d         j        j        d	i || j        d         _        |                    d          x}rHd| j        d         j         |i} | j        d         j        j        d	i || j        d         _        d S d S d S )
Nr{   rx   r   rD   r   r   device__r	  rM   )r}   r~   rL   r?   r   r=   r   update)r   r   r   r   r   r   rD   r   s          rO   r~   zDeviceImportForm.__init__Y  s   /////// 	i Ct{62@BBDHHVDTDTUF/Vt{:/F/O/V/`/`Y_/`/`DK
#,-RT[-B-K-R-\-\U[-\-\DK!* =V,:<<dhhv>N>NF  88J///x HZ!8!FHH(    ,O4;v+>+G+N+X+XQW+X+XDK( (+++v iJT[%:%HJJFS5^T[5N5W5^5h5hag5h5hL)222)	i 	i$i irN   c                    t                                                       | j                            d          x}r"|j        | j        _        |j        | j        _        | j                            d          x}r|| j        _        d S d S )NrD   r	  )r}   cleancleaned_datar   rx   instancer   
parent_bay)r   rD   r	  r   s      rO   r  zDeviceImportForm.cleanr  s     &**84446 	-!'DM!'DM *..|<<<: 	2'1DM$$$	2 	2rN   r   )rG   rH   rI   r   rQ   rl   rR   rS   rx   ry   r   r   r   r   DeviceFaceChoicesr  r   rD   	DeviceBayr	  DeviceAirflowChoicesr   r
   r   r   rP   r~   r  r   r   s   @rO   r   r     s       aii!!##!O$$	  D #"a
mm!%%''!011  H aii!!##!,--  D >aii!!'((	  D ! akk##%%!788  F %$aoo"&&((!VWW  J na	ll$!'((	  G *)a!""'++--!%&&  O
 
 
 
 
#( 
 
 
i i i i i i2
2 
2 
2 
2 
2 
2 
2 
2 
2rN   r   c                   d    e Zd Z e ed          ej                                        d ed                    Z e ed          e	j                                        d ed                    Z
 e ed          ej                                        d ed	                    Z e ed
          e ed                    Z ej         ed          d ed                    Z ej         ed          d ed                    Z G d d          Zd fd	Zd Z xZS )r&   r   r:   z,The device in which this module is installedrr   z
Module bayz0The module bay in which this module is installedzModule typerK   zThe type of modulerY   rZ   r[   zReplicate componentsFzWAutomatically populate components associated with this module type (enabled by default)r   zAdopt componentsz!Adopt already existing componentsc                       e Zd ZeZdZdS )ModuleImportForm.Meta)device
module_baymodule_typer   r   ra   rE   rk   replicate_componentsadopt_componentsrF   N)rG   rH   rI   ModulerK   rL   rM   rN   rO   rP   r    s        
rN   rP   Nc                      t                      j        |g|R i | |rYd| j        d         j         |                    d          i} | j        d         j        j        di || j        d         _        d S d S )Nr  r  r  rM   r|   r   s        rO   r~   zModuleImportForm.__init__  s    /////// 	eFX!6!DFFQYHZHZ[F1Z\1J1S1Z1d1d]c1d1dDK%...	e 	erN   c                 2    d| j         vrdS | j        d         S )Nr  Tr   r  r   s    rO   clean_replicate_componentsz+ModuleImportForm.clean_replicate_components  s#    !224$%;<<rN   r   )rG   rH   rI   r   rQ   r   rR   rS   r  	ModuleBayr  r   r  r   ModuleStatusChoicesra   r   BooleanFieldr  r  rP   r~   r$  r   r   s   @rO   r&   r&     s         akk##%%!BCC	  F %$aoo"&&((!FGG	  J &%a#''))!())	  K ^akk#!())  F
 .5-a&''!mnn  
 *u)a"##!788  
 
 
 
 
 
 
 
e e e e e e= = = = = = =rN   r&   c            
          e Zd Z e ed          ej                                        d          Z e	 ed          e
d ed                    Z e ed          eed	d ed
                    Z G d d          Zd	S )r   r   r:   r   r   F	Port typer   SpeedNPort speed in bpsr<   r\   coerceempty_valuer>   r@   c                       e Zd ZeZdZdS )ConsolePortImportForm.Metar  r:   r<   typespeedmark_connectedrE   rF   N)rG   rH   rI   ConsolePortrK   rL   rM   rN   rO   rP   r0    s        frN   rP   rG   rH   rI   r   rQ   r   rR   rS   r  r   ConsolePortTypeChoicesr2  r   ConsolePortSpeedChoicesintr3  rP   rM   rN   rO   r   r               akk##%%  F
 >aii&!K..	  D  ajj'!'((  Eg g g g g g g g g grN   r   c            
          e Zd Z e ed          ej                                        d          Z e	 ed          e
d ed                    Z e ed          eed	d ed
                    Z G d d          Zd	S )r   r   r:   r   r   Fr)  r   r*  Nr+  r,  c                       e Zd ZeZdZdS ) ConsoleServerPortImportForm.Metar1  N)rG   rH   rI   ConsoleServerPortrK   rL   rM   rN   rO   rP   r=    s        !frN   rP   r6  rM   rN   rO   r   r     r:  rN   r   c                       e Zd Z e ed          ej                                        d          Z e	 ed          e
d ed                    Z G d d	          Zd
S )r-   r   r:   r   r   Fr)  r   c                       e Zd ZeZdZdS )PowerPortImportForm.Meta)	r  r:   r<   r2  r4  maximum_drawallocated_drawrE   rF   N)rG   rH   rI   	PowerPortrK   rL   rM   rN   rO   rP   rA    s        
rN   rP   N)rG   rH   rI   r   rQ   r   rR   rS   r  r   PowerPortTypeChoicesr2  rP   rM   rN   rO   r-   r-     s          akk##%%  F
 >aii$!K..	  D
 
 
 
 
 
 
 
 
 
rN   r-   c            	           e Zd Z e ed          ej                                        d          Z e	 ed          e
d ed                    Z e ed          ej                                        dd ed	          
          Z e	 ed          ed ed                    Z G d d          Z fdZ xZS )r+   r   r:   r   r   FzOutlet typer   z
Power portz(Local power port which feeds this outletr;   zFeed legz+Electrical phase (for three-phase circuits)c                       e Zd ZeZdZdS )PowerOutletImportForm.Meta)	r  r:   r<   r2  r4  
power_portfeed_legrE   rF   N)rG   rH   rI   PowerOutletrK   rL   rM   rN   rO   rP   rH    s        wrN   rP   c                     t                      j        |i | | j        rMd| j        v rD	 | j        d                             | j        d                   }n<# t          j        $ r d }Y n)w xY w	 | j        j	        }n# t          j        $ r d }Y nw xY w|rFt          j                            ||                                g          | j        d         _        d S t          j                                        | j        d         _        d S )Nr  
device__inrI  )r}   r~   is_boundr   rL   	to_pythonr   ValidationErrorr  r  r   DoesNotExistrD  rR   r   get_vc_masterr=   noner   r   r   r  r   s       rO   r~   zPowerOutletImportForm.__init__#  s1   $)&))) = 		X22X.8889LMM(   -&     	J1:1B1I1I"F$8$8$:$:; 2J 2 2DK%... 2;1B1G1G1I1IDK%...#   +A A,+A,0A= =BB)rG   rH   rI   r   rQ   r   rR   rS   r  r   PowerOutletTypeChoicesr2  rD  rI  PowerOutletFeedLegChoicesrJ  rP   r~   r   r   s   @rO   r+   r+     s^         akk##%%  F
 >aii&!M""	  D %$aoo"&&((!>??  J ~a
mm)!ABB	  Hx x x x x x x xJ J J J J J J J JrN   r+   c                   j    e Zd Z e ed          ej                                        d          Z e ed          e	j                                        dd ed                    Z
 e ed          e	j                                        dd ed	                    Z e ed
          e	j                                        dd ed                    Z e ed          ej                                        dd e ed          dz                       Z e ed          e ed                    Z e ed          ed          Z e ed          ed ed                    Z e ed          ed ed                    Z e ed          ed ed                    Z e ed          ej                                        dd ed                    Z e ed          ed ed                    Z G d  d!          Z d& fd#	Z!d$ Z"d% Z# xZ$S )'r!   r   r:   r   r9   FzParent interfacer;   BridgezBridged interfaceLagzParent LAG interfaceVdcszCVDC names separated by commas, encased with double quotes. Example:z <code>vdc1,vdc2,vdc3</code>r   zPhysical mediumr[   Duplex)r<   r\   r>   zPoe modezPoE moder   zPoe typezPoE typeModez0IEEE 802.1Q operational mode (for L2 interfaces)r   rdzAssigned VRFzRf rolezWireless role (AP/station)c                       e Zd ZeZdZdS )InterfaceImportForm.Meta)r  r:   r<   rD   bridgelagr2  r3  duplexenabledr4  mac_addresswwnvdcsmtu	mgmt_onlyrE   poe_modepoe_typemodevrfrf_role
rf_channelrf_channel_frequencyrf_channel_widthtx_powerrF   N)rG   rH   rI   	InterfacerK   rL   rM   rN   rO   rP   ra    s        
rN   rP   Nc                     t                      j        |g|R i | |r|                    d          x}rd| j        d         j         |i} | j        d         j        j        di || j        d         _         | j        d         j        j        di || j        d         _         | j        d         j        j        di || j        d         _         | j        d         j        j        di || j        d         _        d S d S d S )Nr  r  rD   rb  rc  rh  rM   )r}   r~   r   rL   r?   r=   r   )r   r   r   r   r  r   r   s         rO   r~   zInterfaceImportForm.__init__  s@   /////// 		](+++v ]Dt{84BDDf 2WX1F1O1V1`1`Y_1`1`H%.1VX1F1O1V1`1`Y_1`1`H%..Pdk%.@.I.P.Z.ZSY.Z.ZE"+/Rt{6/B/K/R/\/\U[/\/\F#,,,		] 		]] ]rN   c                 2    d| j         vrdS | j        d         S )Nre  Tr"  r#  s    rO   clean_enabledz!InterfaceImportForm.clean_enabled  s"    DI%%4$Y//rN   c                     | j         d         D ]Y}|j        | j         d         k    rAt          j        t	          d                              || j         d                             Z| j         d         S )Nrh  r  z,VDC {vdc} is not assigned to device {device})vdcr  )r  r  r   rQ  rQ   rm   )r   ry  s     rO   
clean_vdcszInterfaceImportForm.clean_vdcs  s    $V, 	 	CzT.x888+DEELL(9((C M     9  ((rN   r   )%rG   rH   rI   r   rQ   r   rR   rS   r  rt  rD   rb  rc  r   VirtualDeviceContextr   rh  r   InterfaceTypeChoicesr2  InterfaceDuplexChoicesrd  InterfacePoEModeChoicesrk  InterfacePoETypeChoicesrl  InterfaceModeChoicesrm  r   rn  r   ro  rP   r~   rw  rz  r   r   s   @rO   r!   r!   :  su         akk##%%  F
 ! akk"&&((!&''  F ! akk"&&((!'((  F 
ahh"&&((!*++  C '&aii%-1133)ASTTWuu
 
  D >aii$!%&&  D
 ^akk&  F
 ~a
mm'!J--	  H ~a
mm'!J--	  H >aii$!FGG	  D 
ahh""!N##  C na	ll#!011	  G
 
 
 
 
 
 
 
] ] ] ] ] ]0 0 0) ) ) ) ) ) )rN   r!   c                   D    e Zd Z e ed          ej                                        d          Z e ed          e	j                                        d ed                    Z
 e ed          e ed          	          Z G d
 d          Z fdZ xZS )r    r   r:   r   z	Rear portzCorresponding rear portrr   r   Physical medium classificationr[   c                       e Zd ZeZdZdS )FrontPortImportForm.Meta)
r  r:   r<   r2  r   r4  	rear_portrear_port_positionrE   rF   N)rG   rH   rI   	FrontPortrK   rL   rM   rN   rO   rP   r            
rN   rP   c                     t                      j        |i | | j        rMd| j        v rD	 | j        d                             | j        d                   }n<# t          j        $ r d }Y n)w xY w	 | j        j	        }n# t          j        $ r d }Y nw xY w|rFt          j                            ||                                g          | j        d         _        d S t          j                                        | j        d         _        d S )Nr  rM  r  )r}   r~   rO  r   rL   rP  r   rQ  r  r  r   rR  RearPortrR   r   rS  r=   rT  rU  s       rO   r~   zFrontPortImportForm.__init__  s1   $)&))) = 		X22X.8889LMM(   -&     	H080@0G0G"F$8$8$:$:; 1H 1 1DK$--- 190@0E0E0G0GDK$---rV  )rG   rH   rI   r   rQ   r   rR   rS   r  r  r  r   PortTypeChoicesr2  rP   r~   r   r   s   @rO   r    r      s         akk##%%  F
 $#ann!%%''!-..	  I >aii!455  D
 
 
 
 
 
 
 
H H H H H H H H HrN   r    c                       e Zd Z e ed          ej                                        d          Z e	 ed           ed          e
          Z G d d          Zd	S )
r2   r   r:   r   r   r  )r<   r@   r\   c                       e Zd ZeZdZdS )RearPortImportForm.Meta)	r  r:   r<   r2  r   r4  	positionsrE   rF   N)rG   rH   rI   r  rK   rL   rM   rN   rO   rP   r    s        srN   rP   N)rG   rH   rI   r   rQ   r   rR   rS   r  r   r  r2  rP   rM   rN   rO   r2   r2     s          akk##%%  F
 >aii!455  Dt t t t t t t t t trN   r2   c                       e Zd Z e ed          ej                                        d          Z G d d          Z	dS )r'   r   r:   r   c                       e Zd ZeZdZdS )ModuleBayImportForm.Meta)r  r:   r<   r  rE   rF   N)rG   rH   rI   r%  rK   rL   rM   rN   rO   rP   r    s        OrN   rP   N)
rG   rH   rI   r   rQ   r   rR   rS   r  rP   rM   rN   rO   r'   r'     s|          akk##%%  FP P P P P P P P P PrN   r'   c                       e Zd Z e ed          ej                                        d          Z e ed          ej                                        dd ed          d ed          i	          Z	 G d
 d          Z
 fdZ xZS )r   r   r:   r   zInstalled deviceFz&Child device installed within this bayrs   zChild device not found.rt   c                       e Zd ZeZdZdS )DeviceBayImportForm.Meta)r  r:   r<   installed_devicerE   rF   N)rG   rH   rI   r  rK   rL   rM   rN   rO   rP   r    s        WrN   rP   c                 R    t                      j        |i | | j        rMd| j        v rD	 | j        d                             | j        d                   }n<# t          j        $ r d }Y n)w xY w	 | j        j	        }n# t          j        $ r d }Y nw xY w|rct          j                            |j        |j        ddt           j                                      |j                  | j        d         _        d S t          j                                        | j        d         _        d S )Nr  Tr   )rx   r   parent_bay__isnulldevice_type__u_heightdevice_type__subdevice_role)pkr  )r}   r~   rO  r   rL   rP  r   rQ  r  r  r   rR  rR   r   rx   r   SubdeviceRoleChoices
ROLE_CHILDexcluder  r=   rT  rU  s       rO   r~   zDeviceBayImportForm.__init__  sI   $)&))) = 		X22X.8889LMM(   -&     		M7=~7L7L[[#'&',@,K 8M 8 8 gg## K*+444 8>~7J7J7L7LDK*+444rV  )rG   rH   rI   r   rQ   r   rR   rS   r  r  rP   r~   r   r   s   @rO   r   r     s	         akk##%%  F
 +*a"####%%!<==aa 9::
	 	 	X X X X X X X XM M M M M M M M MrN   r   c            	           e Zd Z e ed          ej                                        d          Z e ed          e	j                                        dd          Z
 e ed          ej                                        dd          Z e ed          ej                                        dd ed	          
          Z e ed          ej                                        ed ed                    Z ej         ed          d ed                    Z G d d          Z fdZd Z xZS )r"   r   r:   r   r   F)r<   r=   r?   r>   r   r9   zParent inventory itemr   zComponent typezComponent Type)r<   r=   limit_choices_tor>   r@   zCompnent namezComponent Namer   c                       e Zd ZeZdZdS )InventoryItemImportForm.Meta)r  r:   r<   r   r   rD   part_idr   r   
discoveredrE   rF   component_typecomponent_nameN)rG   rH   rI   InventoryItemrK   rL   rM   rN   rO   rP   r  S  s        
rN   rP   c                     t                      j        |i | d }| j        rKd| j        v rB	 | j        d                             | j        d                   }n# t          j        $ r Y nw xY w|r2t          j	        
                    |          | j        d         _        d S t          j	                                        | j        d         _        d S )Nr  )r  rD   )r}   r~   rO  r   rL   rP  r   rQ  r  rR   r   r=   rT  rU  s       rO   r~   z InventoryItemImportForm.__init__Z  s    $)&))) = 	X22X.8889LMM(    	J-:-B-I-IQW-I-X-XDK!***-:-B-G-G-I-IDK!***s   +A A,+A,c                 2   | j                             d          }| j                             d          }| j                             d          }|s1t          | d          r!t          | j        d          r| j        j        }t          |||g          sd S |                                }	 |j                            ||          }|| j        _        d S # t          $ r7 t          j        t          d                              ||                    w xY w)Nr  r  r  r  r  r:   z0Component not found: {device} - {component_name})r  r  )r  r   hasattrr  r  rS   model_classrR   	componentr   r   rQ  rQ   rm   )r   content_typer  r  rK   r  s         rO   clean_component_namez,InventoryItemImportForm.clean_component_namei  s/   (,,-=>>*../?@@"&&x00 	*'$
33 	*x8X8X 	*])FFL.9:: 	4((**	))n)MMI&/DM###! 	 	 	'DEELL!. M    	s   +(C AD)rG   rH   rI   r   rQ   r   rR   rS   r  InventoryItemRoler   r   r   rD   r   r   MODULAR_COMPONENT_MODELSr  r   	CharFieldr  rP   r~   r  r   r   s   @rO   r"   r"   -  s         akk##%%  F
 aii"*..00	  D '&a%))++	  L ! akk##%%!+,,  F )(a !!$((**1!$%%  N %U_a  !$%%  N
 
 
 
 
 
 
 
J J J J J      rN   r"   c                   <    e Zd Z e            Z G d d          ZdS )r#   c                       e Zd ZeZdZdS ) InventoryItemRoleImportForm.Meta)r:   rC   r   rE   N)rG   rH   rI   r  rK   rL   rM   rN   rO   rP   r    s        !9rN   rP   Nr   rM   rN   rO   r#   r#     sG        9;;D: : : : : : : : : :rN   r#   c            	          e Zd Z e ed          ej                                        d ed                    Z e	 ed          e
j                                        e ed                    Z ej         ed           ed	          
          Z e ed          ej                                        d ed                    Z e	 ed          e
j                                        e ed                    Z ej         ed           ed	          
          Z e ed          ed ed                    Z e ed          ed ed                    Z e ed          ej                                        dd ed                    Z e ed          ed ed                    Z G d d          Zd Zd Zd Zd Z dS )r   zSide A devicer:   zDevice namerr   zSide A typezTermination type)r<   r=   r  r@   zSide A namezTermination name)r<   r@   zSide B devicezSide B typezSide B namerY   FzConnection statusr   r   r  r   r^   r;   zLength unitc                       e Zd ZeZg dZdS )CableImportForm.Meta)side_a_deviceside_a_typeside_a_nameside_b_deviceside_b_typeside_b_namer2  ra   rd   r<   r   lengthlength_unitrE   rk   rF   N)rG   rH   rI   CablerK   rL   rM   rN   rO   rP   r    s$        
 
 
rN   rP   c                    |dv sJ d|             | j                             d| d          }| j                             d| d          }| j                             d| d          }|r|r|sdS |                                }	 |j        r{|j        j        |k    rk|j                            ||                                          d	k    r9|j                            |j        j        	                                |
          }n|j                            ||          }|j
        Y|j
        | j        k    rIt          j        t          d                              |                                ||                    nW# t"          $ rJ t          j        t          d                              |                                ||                    w xY wt%          | j        | d|g           |S )z\
        Derive a Cable's A/B termination objects.

        :param side: 'a' or 'b'
        abzInvalid side designation: side__device_type_nameNr  r   )rN  r:   zESide {side_upper}: {device} {termination_object} is already connected)
side_upperr  termination_objectz8{side_upper} side termination not found: {device} {name})r  r  r:   _terminations)r  r   r  r  masterrR   r   countmembersrS   cabler  r   rQ  rQ   rm   upperr   setattr)r   sider  r  r:   rK   r  s          rO   _clean_sidezCableImportForm._clean_side  s:    t|||@$@@|||"&&'<t'<'<'<==(,,-@T-@-@-@AA $$%8T%8%8%899 	\ 	 	4((**	% Q&*@*G6*Q*QM((T(BBHHJJaOO%*]%6%6&BXB`BdBdBfBfmq%6%r%r""%*]%6%6f4%6%P%P"!'38J8PTXTa8a8a+]^^ee#'::<<Se f    
 " 	 	 	'LMMTT#zz||F U    	 	$5558J7KLLL!!s   	C>F AGc                 ,    |                      d          S )Nar  r#  s    rO   clean_side_a_namez!CableImportForm.clean_side_a_name      $$$rN   c                 ,    |                      d          S )Nbr  r#  s    rO   clean_side_b_namez!CableImportForm.clean_side_b_name  r  rN   c                 D    | j                             dd           }||ndS )Nr   )r  r   )r   r  s     rO   clean_length_unitz!CableImportForm.clean_length_unit  s)    '++M4@@)5{{2=rN   N)!rG   rH   rI   r   rQ   r   rR   rS   r  r   r   CABLE_TERMINATION_MODELSr  r   r  r  r  r  r  r   LinkStatusChoicesra   CableTypeChoicesr2  r   rd   CableLengthUnitChoicesr  rP   r  r  r  r  rM   rN   rO   r   r     s       ''a  ##%%!M""	  M &%a$((**1!&''	  K "%/a!&''  K ('a  ##%%!M""	  M &%a$((**1!&''	  K "%/a!&''  K ^akk!!'((	  F >aii !455	  D ! akk##%%!%&&  F !.a&!M""	  K
 
 
 
 
 
 
 
"" "" ""H% % %% % %> > > > >rN   r   c            	           e Zd Z e ed          ej                                        dd ed                    Z G d d          Z	dS )	r6   Masterr:   FzMaster devicer   c                       e Zd ZeZdZdS )VirtualChassisImportForm.Meta)r:   domainr  rE   rk   rF   N)rG   rH   rI   r   rK   rL   rM   rN   rO   rP   r    s        PrN   rP   N)
rG   rH   rI   r   rQ   r   rR   rS   r  rP   rM   rN   rO   r6   r6     s          akk##%%!O$$  FQ Q Q Q Q Q Q Q Q QrN   r6   c                       e Zd Z e ed          ej                                        d ed                    Z e ed          e	j                                        dd          Z
 G d d	          Zd fd	Z xZS )r,   rl   r:   zName of parent siterr   ry   Fr   c                       e Zd ZeZdZdS )PowerPanelImportForm.Meta)rx   r   r:   rE   rk   rF   N)rG   rH   rI   
PowerPanelrK   rL   rM   rN   rO   rP   r  +  s        PrN   rP   Nc                      t                      j        |g|R i | |rYd| j        d         j         |                    d          i} | j        d         j        j        di || j        d         _        d S d S r   r|   r   s        rO   r~   zPowerPanelImportForm.__init__/  r   rN   r   )rG   rH   rI   r   rQ   rl   rR   rS   rx   ry   r   rP   r~   r   r   s   @rO   r,   r,     s        aii!!##!)**	  D #"a
mm!%%''	  HQ Q Q Q Q Q Q Qa a a a a a a a a arN   r,   c            	       \    e Zd Z e ed          ej                                        d ed                    Z e ed          e	j                                        d ed                    Z
 e ed          ej                                        dd ed	          
          Z e ed          ej                                        dd ed          
          Z eej                                        dd ed                    Z e ed          e ed                    Z e ed          e ed                    Z e ed          e ed                    Z e ed          e ed                    Z G d d          Zd fd	Z xZS )r*   rl   r:   rq   rr   zPower panelzUpstream power panelry   Fr   r   r   r^   )r=   r?   r>   r@   rY   rZ   r[   r   zPrimary or redundantSupplyzSupply type (AC/DC)PhasezSingle or three-phasec                       e Zd ZeZdZdS )PowerFeedImportForm.Meta)rx   power_panelr   r   r:   ra   r2  r4  supplyphasevoltageamperagemax_utilizationrd   rE   rk   rF   N)rG   rH   rI   	PowerFeedrK   rL   rM   rN   rO   rP   r  o  r  rN   rP   Nc                     t                      j        |g|R i | |r/d| j        d         j         |                    d          i} | j        d         j        j        di || j        d         _        d| j        d         j         |                    d          i} | j        d         j        j        di || j        d         _        d| j        d         j         |                    d          d| j        d         j         |                    d          i} | j        d         j        j        di || j        d         _        d S d S )Nr{   rx   r  r   r   r   rM   r|   r   s        rO   r~   zPowerFeedImportForm.__init__v  st   /////// 	Y Ct{62@BBDHHVDTDTUF2\$+m2L2U2\2f2f_e2f2fDK&/ Ct{62@BBDHHVDTDTUF/Vt{:/F/O/V/`/`Y_/`/`DK
#, =V,:<<dhhv>N>NDT[4BDDdhhzFZFZF ,O4;v+>+G+N+X+XQW+X+XDK(((	Y 	YrN   r   )rG   rH   rI   r   rQ   rl   rR   rS   rx   r  r  ry   r   r   r   r   rd   r   PowerFeedStatusChoicesra   PowerFeedTypeChoicesr2  PowerFeedSupplyChoicesr  PowerFeedPhaseChoicesr  rP   r~   r   r   s   @rO   r*   r*   9  s       aii!!##!O$$	  D &%a#''))!*++	  K #"a
mm!%%''!.//  H aii!!##!F))  D ! ##%%!%&&	  F ^akk&!())  F
 >aii$!*++  D
 ^akk&!)**  F
 Najj%!+,,  E
 
 
 
 
 
 
 
Y Y Y Y Y Y Y Y Y YrN   r*   c            	       ,    e Zd Z e ed          ej                                        d ed                    Z e ed          e	j                                        dd ed                    Z
 e ed	          e
          Z e ed          ej                                        dd ed                    Z e ed          ej                                        dd ed                    Z G d d          Zd fd	Z xZS )r7   r   r:   r   rr   r   Fr^   r;   rY   )r<   r\   zPrimary IPv4addressz'IPv4 address with mask, e.g. 1.2.3.4/24zPrimary IPv6z4IPv6 address with prefix length, e.g. 2001:db8::1/64c                       e Zd Zg dZeZdS )#VirtualDeviceContextImportForm.Meta)r:   r  ra   rd   
identifierrk   primary_ip4primary_ip6N)rG   rH   rI   rL   r{  rK   rM   rN   rO   rP   r     s&        
 
 
 %rN   rP   Nc                 R    t                      j        |g|R i | |rd| j        d         j         |                    d          i} | j        d         j        j        di || j        d         _         | j        d         j        j        di || j        d         _        d S d S )Ninterface__device__r  r  r  rM   r|   r   s        rO   r~   z'VirtualDeviceContextImportForm.__init__  s    /////// 	g RDK,A,OQQSWS[S[\dSeSefF2\$+m2L2U2\2f2f_e2f2fDK&/2\$+m2L2U2\2f2f_e2f2fDK&///	g 	grN   r   )rG   rH   rI   r   rQ   r   rR   rS   r  r   rd   r   !VirtualDeviceContextStatusChoicesra   r   r  r  rP   r~   r   r   s   @rO   r7   r7     s         akk##%%!O$$	  F ! akk##%%!%&&  F ^akk1  F &%a"&&((!=>>  K &%a"&&((!JKK  K% % % % % % % %g g g g g g g g g grN   r7   N)Gdjangor   "django.contrib.contenttypes.modelsr   #django.contrib.postgres.forms.arrayr   django.core.exceptionsr   django.utils.safestringr   django.utils.translationr   rQ   dcim.choicesdcim.constantsdcim.modelsextras.modelsr
   ipam.modelsr   r   netbox.formsr   tenancy.modelsr   utilities.forms.fieldsr   r   r   r   r   r   virtualization.modelsr   wireless.choicesr   commonr   __all__r3   r5   r4   r$   r0   r1   r.   r/   r%   r   r(   r   r)   r   r   r&   r   r   r-   r+   r!   r    r2   r'   r   r"   r#   r   r6   r,   r*   r7   rM   rN   rO   <module>r     s         : : : : : : @ @ @ @ @ @ 5 5 5 5 5 5 - - - - - - 6 6 6 6 6 6             ( ( ( ( ( ( & & & & & & & & . . . . . . ! ! ! ! ! !                * ) ) ) ) ) 0 0 0 0 0 0 $ $ $ $ $ $ FC C C C C, C C C; ; ; ; ;/ ; ; ;(
 (
 (
 (
 (
* (
 (
 (
V(] (] (] (] (]. (] (] (]VB B B B B. B B B-0 -0 -0 -0 -0. -0 -0 -0`La La La La La* La La La^4Y 4Y 4Y 4Y 4Y 5 4Y 4Y 4Yn9 9 9 9 92 9 9 9
 
 
 
 
0 
 
 
DA A A A A0 A A A:` ` ` ` `0 ` ` `
 
 
 
 
. 
 
 
0@g @g @g @g @g0 @g @g @gFb2 b2 b2 b2 b2+ b2 b2 b2J7= 7= 7= 7= 7=')> 7= 7= 7=|g g g g g1 g g g4g g g g g"7 g g g4
 
 
 
 
/ 
 
 
(2J 2J 2J 2J 2J1 2J 2J 2Jjs) s) s) s) s)/ s) s) s)l-H -H -H -H -H/ -H -H -H`t t t t t. t t t"	P 	P 	P 	P 	P/ 	P 	P 	P-M -M -M -M -M/ -M -M -M`P P P P P3 P P Pn: : : : :"7 : : :t> t> t> t> t>+ t> t> t>vQ Q Q Q Q4 Q Q Q$a a a a a0 a a a8OY OY OY OY OY/ OY OY OYd0g 0g 0g 0g 0g%: 0g 0g 0g 0g 0grN   