
    >TfT                        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	m
Z
 d dlmZmZmZ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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( G d dej)                  Z* G d dej)                  Z+ G d de          Z, G d d e          Z- G d! d"ej)                  Z.d#S )$    )ContentType)extend_schema_field)serializers)SiteSerializer)*)IPADDRESS_ASSIGNMENT_MODELS)	Aggregate	IPAddressIPRangePrefix)ChoiceFieldContentTypeField)NetBoxModelSerializer)TenantSerializer)get_serializer_for_model   )RIRSerializer)NestedIPAddressSerializer)RoleSerializer)VLANSerializer)VRFSerializer   )IPAddressFieldIPNetworkField)AggregateSerializerAvailableIPSerializerAvailablePrefixSerializerIPAddressSerializerIPRangeSerializerPrefixLengthSerializerPrefixSerializerc                       e Zd Z eed          Z ed          Z eddd          Z	 e
            Z G d d          ZdS )	r   Tchoices	read_only)nestedFr&   required
allow_nullc                       e Zd ZeZg dZdZdS )AggregateSerializer.Meta)idurldisplay_urldisplayfamilyprefixrirtenant
date_addeddescriptioncommentstagscustom_fieldscreatedlast_updated)r,   r-   r/   r0   r1   r5   N)__name__
__module____qualname__r	   modelfieldsbrief_fields     =/var/www/html/netbox-4.1.3/netbox/ipam/api/serializers_/ip.pyMetar+   %   s,        
 
 
 SrB   rD   N)r;   r<   r=   r   IPAddressFamilyChoicesr0   r   r2   r   r3   r   r1   rD   rA   rB   rC   r   r      s        [!74HHHF
-t
$
$
$CTEdKKKF^FS S S S S S S S S SrB   r   c                   @   e Zd Z eed          Z eddd          Z eddd          Z	 e
ddd          Z eddd          Z eed          Z eddd          Z ej        d          Z ej        d          Z e            Z G d d          Zd	S )
r!   Tr#   Fr'   r$   r(   r%   c                       e Zd ZeZg dZdZdS )PrefixSerializer.Meta)r,   r-   r.   r/   r0   r1   sitevrfr3   vlanstatusroleis_poolmark_utilizedr5   r6   r7   r8   r9   r:   children_depth)r,   r-   r/   r0   r1   r5   rS   N)r;   r<   r=   r   r>   r?   r@   rA   rB   rC   rD   rJ   :   s,        
 
 

 ]rB   rD   N)r;   r<   r=   r   rE   r0   r   rK   r   rL   r   r3   r   rM   PrefixStatusChoicesrN   r   rO   r   IntegerFieldrR   rS   r   r1   rD   rA   rB   rC   r!   r!   .   s       [!74HHHF>$GGGD
-te
E
E
ECTEdKKKF>$GGGD[!4uEEEF>$GGGD'{'$777H%[%555F^F] ] ] ] ] ] ] ] ] ]rB   r!   c                   2    e Zd Z ej                    Zd ZdS )r    c                    |                     d          }|t          j        ddi          t          |t                    st          j        ddi          | j                             d          }|j        dk    r/|dk    r)t          j        dd                    |          i          |j        dk    r/|d	k    r)t          j        dd
                    |          i          |S )Nprefix_lengthzthis field can not be missingzthis field must be int typer1          z#Invalid prefix length ({}) for IPv4      z#Invalid prefix length ({}) for IPv6)getr   ValidationError
isinstanceintcontextr0   format)selfdatarequested_prefixr1   s       rC   to_internal_valuez(PrefixLengthSerializer.to_internal_valueH   s   88O44#-!@/    *C00 	-!>/    !!(++=A"2R"7"7-!F!M!MN^!_!_/    ]a$4s$:$:-!F!M!MN^!_!_/    rB   N)r;   r<   r=   r   rU   rX   rf   rA   rB   rC   r    r    D   s3        ,K,..M    rB   r    c                   x    e Zd ZdZ ej        d          Z ej        d          Z e	ddd          Z
d ZdS )r   zJ
    Representation of a prefix which does not exist in the database.
    TrH   r&   r%   r)   c                     | j                             d          r0t          | j         d         dd| j         d         i          j        }nd }|j        t          |          |dS )NrL   Trequestr&   ra   )r0   r1   rL   )ra   r]   r   rd   versionstrrc   instancerL   s      rC   to_representationz+AvailablePrefixSerializer.to_representationg   so    <E"" 	U 3D9VZVbclVmJnoootCCC&(mm
 
 	
rB   N)r;   r<   r=   __doc__r   rU   r0   	CharFieldr1   r   rL   rp   rA   rB   rC   r   r   _   so          &[%555F"["T222F
-tt
E
E
EC	
 	
 	
 	
 	
rB   r   c                       e Zd Z eed          Z e            Z e            Z e	ddd          Z
 eddd          Z eed          Z eddd          Z G d d          ZdS )	r   Tr#   Fr'   rG   c                       e Zd ZeZg dZdZdS )IPRangeSerializer.Meta)r,   r-   r.   r/   r0   start_addressend_addresssizerL   r3   rN   rO   r5   r6   r7   r8   r9   r:   rQ   r5   r6   r7   r8   r9   r:   )r,   r-   r/   r0   rv   rw   r5   N)r;   r<   r=   r   r>   r?   r@   rA   rB   rC   rD   ru      s,        
 
 

 irB   rD   N)r;   r<   r=   r   rE   r0   r   rv   rw   r   rL   r   r3   IPRangeStatusChoicesrN   r   rO   rD   rA   rB   rC   r   r   w   s        [!74HHHF"N$$M .""K
-te
E
E
ECTEdKKKF[!5FFFF>$GGGDi i i i i i i i i irB   r   c                      e Zd Z eed          Z e            Z eddd          Z	 e
ddd          Z eed          Z eedd          Z eej                            e          dd          Z ej        d          Z edd	          Z edd
          Z G d d          Z e ej        d                    d             ZdS )r   Tr#   Fr'   rG   )r$   allow_blankr(   )querysetr(   r)   rH   )r(   r)   )manyr%   c                       e Zd ZeZg dZdZdS )IPAddressSerializer.Meta)r,   r-   r.   r/   r0   addressrL   r3   rN   rO   assigned_object_typeassigned_object_idassigned_object
nat_insidenat_outsidedns_namer5   r6   r7   r8   r9   r:   )r,   r-   r/   r0   r   r5   N)r;   r<   r=   r
   r>   r?   r@   rA   rB   rC   rD   r      s,        
 
 

 TrB   rD   )r)   c                     |j         d S t          |j                   }d| j        d         i} ||j         d|          j        S )Nrj   Trk   )r   r   ra   rd   )rc   obj
serializerra   s       rC   get_assigned_objectz'IPAddressSerializer.get_assigned_object   sN    &4-c.ABB
dl956z#-dGLLLQQrB   N) r;   r<   r=   r   rE   r0   r   r   r   rL   r   r3   IPAddressStatusChoicesrN   IPAddressRoleChoicesrO   r   r   objectsfilterr   r   r   SerializerMethodFieldr   r   r   r   rD   r   	JSONFieldr   rA   rB   rC   r   r      sr       [!74HHHFnG
-te
E
E
ECTEdKKKF[!7%HHHF;3PUVVVD++$++,GHH  
 8k7$GGGO**EdKKKJ++FFFKT T T T T T T T ..$???@@R R A@R R RrB   r   c                       e Zd ZdZ ej        d          Z ej        d          Z e	ddd          Z
 ej        d          Zd ZdS )	r   zO
    Representation of an IP address which does not exist in the database.
    TrH   rh   F)r(   c                     | j                             d          r0t          | j         d         dd| j         d         i          j        }nd }| j         d         j        | d| j         d         j         |dS )NrL   Trj   rk   parent/)r0   r   rL   )ra   r]   r   rd   r0   mask_lengthrn   s      rC   rp   z'AvailableIPSerializer.to_representation   s    <E"" 	U 3D9VZVbclVmJnoootCCCl8,3"IIT\(%;%GII
 
 	
rB   N)r;   r<   r=   rq   r   rU   r0   rr   r   r   rL   r5   rp   rA   rB   rC   r   r      s          &[%555F#k#d333G
-tt
E
E
EC'+'777K	
 	
 	
 	
 	
rB   r   N)/"django.contrib.contenttypes.modelsr   drf_spectacular.utilsr   rest_frameworkr   dcim.api.serializers_.sitesr   ipam.choicesipam.constantsr   ipam.modelsr	   r
   r   r   netbox.api.fieldsr   r   netbox.api.serializersr    tenancy.api.serializers_.tenantsr   utilities.apir   asnsr   r&   r   rolesr   vlansr   vrfsr   field_serializersr   r   __all__r   r!   
Serializerr    r   r   r   r   rA   rB   rC   <module>r      s   : : : : : : 5 5 5 5 5 5 & & & & & & 6 6 6 6 6 6     6 6 6 6 6 6 = = = = = = = = = = = = ; ; ; ; ; ; ; ; 8 8 8 8 8 8 = = = = = = 2 2 2 2 2 2       - - - - - - ! ! ! ! ! ! ! ! ! ! ! !       > > > > > > > >S S S S S/ S S S] ] ] ] ], ] ] ],    [3   6
 
 
 
 
 6 
 
 
0i i i i i- i i i.R R R R R/ R R RD
 
 
 
 
K2 
 
 
 
 
rB   