
    >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mZ dZ G d	 d
e          Z G d de          ZdS )    )ValidationError)models)reverse)gettext_lazy)ASNField)ASNRangeQuerySet)OrganizationalModelPrimaryModel)ASNASNRangec                       e Zd Z ej         ed          dd          Z ej         ed          dd          Z ej	        dej
        d ed          	          Z e ed
                    Z e ed                    Z ej	        dej
        ddd          Z ej                    Z G d d          Zd Zd Zed             Zd Z fdZd Zd Z xZS )r   named   T)verbose_name
max_lengthuniqueslugipam.RIR
asn_rangesRIR)to	on_deleterelated_namer   start)r   endtenancy.Tenantr   r   r   blanknullc                   >    e Zd ZdZ ed          Z ed          ZdS )ASNRange.Meta)r   z	ASN rangez
ASN rangesN__name__
__module____qualname__ordering_r   verbose_name_plural     5/var/www/html/netbox-4.1.3/netbox/ipam/models/asns.pyMetar!   1   s0        q~~aoor*   r,   c                 @    | j          d|                                  dS )N ())r   range_as_stringselfs    r+   __str__zASNRange.__str__6   s'    )88t33558888r*   c                 0    t          d| j        g          S )Nzipam:asnrangeargsr   pkr1   s    r+   get_absolute_urlzASNRange.get_absolute_url9   s    dgY7777r*   c                 <    t          | j        | j        dz             S )N   )ranger   r   r1   s    r+   r<   zASNRange.range<   s    TZA...r*   c                 $    | j          d| j         S )N-r   r   r1   s    r+   r0   zASNRange.range_as_string@   s    *))tx)))r*   c                     t                                                       | j        | j        k    r;t	          t          d                              | j        | j                            d S )Nz=Starting ASN ({start}) must be lower than ending ASN ({end}).r?   )supercleanr   r   r   r'   format)r2   	__class__s    r+   rB   zASNRange.cleanC   sh    8tz!!!QRRYY*$( Z     "!r*   c                 X    t           j                            | j        | j                  S )N)asn__gteasn__lte)r   objectsfilterr   r   r1   s    r+   get_child_asnszASNRange.get_child_asnsM   s+    {!!ZX " 
 
 	
r*   c                     t          | j                  }t          |                                                     dd                    }t	          ||z
            }|S )z>
        Return all available ASNs within this range.
        asnT)flat)setr<   rJ   values_listsorted)r2   r<   existing_asnsavailable_asnss       r+   get_available_asnszASNRange.get_available_asnsS   sU     DJD//11==e$=OOPP 566r*   )r#   r$   r%   r   	CharFieldr'   r   	SlugFieldr   
ForeignKeyPROTECTrirr   r   r   tenantr   
as_managerrH   r,   r3   r9   propertyr<   r0   rB   rJ   rS   __classcell__)rD   s   @r+   r   r      s       6QvYY  D
 6QvYY  D
 &
.!QuXX	  C HQwZZ  E (QuXX  C V.!  F *)++G. . . . . . . .
9 9 98 8 8 / / X/* * *    
 
 
      r*   r   c            	       J   e Zd ZdZ ej        dej        d ed           ed                    Z e	d ed            ed          	          Z
 ej        d
ej        ddd          ZdZ G d d          Zd Zd Zed             Zed             Zed             ZdS )r   z
    An autonomous system (AS) number is typically used to represent an independent routing domain. A site can have
    one or more ASNs assigned to it.
    r   asnsr   z?Regional Internet Registry responsible for this AS number space)r   r   r   r   	help_textTz&16- or 32-bit autonomous system number)r   r   r_   r   r   )r   c                   @    e Zd ZdgZ ed          Z ed          ZdS )ASN.MetarL   r   ASNsNr"   r)   r*   r+   r,   ra   {   s2        7qxxaiir*   r,   c                     d| j          S NASasn_with_asdotr1   s    r+   r3   zASN.__str__   s    )D')))r*   c                 0    t          d| j        g          S )Nzipam:asnr5   r7   r1   s    r+   r9   zASN.get_absolute_url   s    z	2222r*   c                 T    | j         dk    r| j         dz   d| j         dz   S | j         S )zL
        Return ASDOT notation for AS numbers greater than 16 bits.
             .rL   r1   s    r+   	asn_asdotzASN.asn_asdot   s:    
 8eh%'<<$(U*:<<<xr*   c                 f    | j         dk    r | j          d| j         dz   d| j         dz   dS | j         S )zI
        Return both plain and ASDOT notation, where applicable.
        rj   r.   rk   rl   r/   rm   r1   s    r+   rg   zASN.asn_with_asdot   sG    
 8ehII$(e"3IIdh6FIIII8Or*   c                     d| j          S rd   rf   r1   s    r+   prefixed_namezASN.prefixed_name   s    )D')))r*   N)r#   r$   r%   __doc__r   rV   rW   r'   rX   r   rL   rY   prerequisite_modelsr,   r3   r9   r[   rn   rg   rq   r)   r*   r+   r   r   ^   s\         &
.QuXX!UVV  C (QuXX!<==  C
 V.  F( ( ( ( ( ( ( (
* * *3 3 3   X   X * * X* * *r*   r   N)django.core.exceptionsr   	django.dbr   django.urlsr   django.utils.translationr   r'   ipam.fieldsr   ipam.querysetsr   netbox.modelsr	   r
   __all__r   r   r)   r*   r+   <module>r|      s    2 2 2 2 2 2             6 6 6 6 6 6             + + + + + + ; ; ; ; ; ; ; ;K K K K K" K K K\=* =* =* =* =*, =* =* =* =* =*r*   