
    >Tf                         d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ d dlmZmZ d d	lmZ d d
lmZ d dlmZ dZ G d dee          Z G d de          ZdS )    )GenericForeignKey)ValidationError)models)reverse)cached_property)gettext_lazy)
ObjectType)NetBoxModelPrimaryModel)ContactsMixin)L2VPNTypeChoices)L2VPN_ASSIGNMENT_MODELS)L2VPNL2VPNTerminationc                      e Zd Z ej         ed          dd          Z ej         ed          dd          Z ej         ed          de	          Z
 ej         ed	          dd
          Z ej        ddd          Z ej        ddd          Z ej        dej        ddd          ZdZ G d d          Zd Zd Zed             ZdS )r   named   T)verbose_name
max_lengthuniqueslugtype2   )r   r   choices
identifier)r   nullblankzipam.RouteTargetimporting_l2vpns)torelated_namer   exporting_l2vpnsztenancy.Tenantl2vpns)r   	on_deleter    r   r   )r   c                   >    e Zd ZdZ ed          Z ed          ZdS )
L2VPN.Meta)r   r   r   L2VPNsN)__name__
__module____qualname__ordering_r   verbose_name_plural     5/var/www/html/netbox-4.1.3/netbox/vpn/models/l2vpn.pyMetar%   =   s0        )qzzakkr.   r0   c                 D    | j         r| j         d| j          dS | j         S )Nz ())r   r   selfs    r/   __str__zL2VPN.__str__B   s1    ? 	6i554?5555)~r.   c                 0    t          d| j        g          S )Nz	vpn:l2vpnargsr   pkr3   s    r/   get_absolute_urlzL2VPN.get_absolute_urlG   s    {$'3333r.   c                 j    | j         t          j        v r| j                                        dk    rdS dS )N   FT)r   r   P2Pterminationscountr3   s    r/   can_add_terminationzL2VPN.can_add_terminationJ   s6    9(,,,1B1H1H1J1Ja1O1O54r.   N)r'   r(   r)   r   	CharFieldr+   r   	SlugFieldr   r   r   BigIntegerFieldr   ManyToManyFieldimport_targetsexport_targets
ForeignKeyPROTECTtenantclone_fieldsr0   r5   r;   r   rA   r-   r.   r/   r   r      s       6QvYY  D
 6QvYY  D
 6QvYY   D
 ('Q|__  J
 ,V+'  N
 ,V+'  N
 V.  F L* * * * * * * *
  
4 4 4   _  r.   r   c                       e Zd Z ej        dej        d          Z ej        deej        d          Z	 ej
                    Z edd	          Zd
ZdZ G d d          Z fdZd Zd Zed             Zed             Z xZS )r   	vpn.L2VPNr?   )r   r#   r    zcontenttypes.ContentType+)r   limit_choices_tor#   r    assigned_object_typeassigned_object_id)ct_fieldfk_fieldl2vpn)rM   c                       e Zd ZdZ ej        d          fZ ej        dd          fZ e	d          Z
 e	d          ZdS )	L2VPNTermination.MetarT   )rP   rQ   )fields$vpn_l2vpntermination_assigned_object)rX   r   zL2VPN terminationzL2VPN terminationsN)r'   r(   r)   r*   r   IndexindexesUniqueConstraintconstraintsr+   r   r,   r-   r.   r/   r0   rW   i   sx        FL NOOO
 $F#E;  
 q,--a 455r.   r0   c                 t    | j         | j         d| j         S t                                                      S )Nz <> )r:   assigned_objectrU   superr5   )r4   	__class__s    r/   r5   zL2VPNTermination.__str__w   s8    7*<<
<<<ww   r.   c                 0    t          d| j        g          S )Nzvpn:l2vpnterminationr7   r9   r3   s    r/   r;   z!L2VPNTermination.get_absolute_url|   s    -TWI>>>>r.   c                    | j         r| j         j        }t          j                            | j                   }t
          j                            ||                              | j                                                  dk    r5t          t          d                              | j                             t          | d          r| j        j        t          j        v rt
          j                            | j                                      | j                                                  }|dk    rN| j                                        }t          t          d	                              ||
                    d S d S d S )N)rQ   rP   )r:   r   z6L2VPN Termination already assigned ({assigned_object}))r_   rU   rT   r=   zg{l2vpn_type} L2VPNs cannot have more than two terminations; found {terminations_count} already defined.)
l2vpn_typeterminations_count)r_   r:   r	   objectsget_for_modelr   filterexcluder@   r   r+   formathasattrrU   r   r   r>   get_type_display)r4   obj_idobj_typere   rd   s        r/   cleanzL2VPNTermination.clean   s    		),F!)778LMMH'..&_g.hhGtwG''!4 4%NOOVV(,(< W     4!! 	\djo9I9M&M&M!1!9!@!@tz!@!R!R!Z!Z^b^e!Z!f!f!l!l!n!n!Q&&!Z88::
%+  f
GYfZZ	\ \ \		\ 	\&M&M&&r.   c                     t           j                            | j                  }|j        dk    r| j        j        S |j        dk    r| j        j        S |j        dk    r| j        j        S d S )Nvminterface	interface)r	   rf   rg   r_   modelvirtual_machinedevice)r4   rn   s     r/   assigned_object_parentz'L2VPNTermination.assigned_object_parent   sk    %33D4HII>]**'77^{**'..^},,'77tr.   c                     | j         j        S )N)rv   siter3   s    r/   assigned_object_sitez%L2VPNTermination.assigned_object_site   s    *//r.   )r'   r(   r)   r   rH   CASCADErU   r   rI   rP   PositiveBigIntegerFieldrQ   r   r_   rK   prerequisite_modelsr0   r5   r;   ro   propertyrv   ry   __classcell__)ra   s   @r/   r   r   R   sD       F.#  E
 -6,%0.	   8799'''%  O
 L6 6 6 6 6 6 6 6! ! ! ! !
? ? ?\ \ \0   X 0 0 X0 0 0 0 0r.   r   N)"django.contrib.contenttypes.fieldsr   django.core.exceptionsr   	django.dbr   django.urlsr   django.utils.functionalr   django.utils.translationr   r+   core.modelsr	   netbox.modelsr
   r   netbox.models.featuresr   vpn.choicesr   vpn.constantsr   __all__r   r   r-   r.   r/   <module>r      sC   @ @ @ @ @ @ 2 2 2 2 2 2             3 3 3 3 3 3 6 6 6 6 6 6 " " " " " " 3 3 3 3 3 3 3 3 0 0 0 0 0 0 ( ( ( ( ( ( 1 1 1 1 1 1; ; ; ; ;M< ; ; ;|R0 R0 R0 R0 R0{ R0 R0 R0 R0 R0r.   