
    >Tf'                     :   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
mZmZmZ d dlmZmZ d dlmZmZ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j                  Z G d dej                  ZdS )    )ContentType)OpenApiTypes)extend_schema_field)serializers)*)Cable	CablePathCableTermination)ChoiceFieldContentTypeField)BaseModelSerializerGenericObjectSerializerNetBoxModelSerializer)TenantSerializer)get_serializer_for_model)CablePathSerializerCableSerializerCableTerminationSerializerCabledObjectSerializerTracedCableSerializerc                       e Zd Z edd          Z edd          Z eed          Z e	ddd          Z
 eeddd          Z G d d          Zd	S )
r   TF)manyrequired)choicesr   )nestedr   
allow_null)r   allow_blankr   r   c                       e Zd ZeZg dZdZdS )CableSerializer.Meta)idurldisplay_urldisplaytypea_terminationsb_terminationsstatustenantlabelcolorlengthlength_unitdescriptioncommentstagscustom_fieldscreatedlast_updated)r    r!   r#   r)   r-   N)__name__
__module____qualname__r   modelfieldsbrief_fields     A/var/www/html/netbox-4.1.3/netbox/dcim/api/serializers_/cables.pyMetar      s,        
 
 

 Hr:   r<   N)r3   r4   r5   r   r%   r&   r   LinkStatusChoicesr'   r   r(   CableLengthUnitChoicesr,   r<   r9   r:   r;   r   r      s        ,,$GGGN,,$GGGN[!2UCCCFTEdKKKF+&<$Y^kopppKH H H H H H H H H Hr:   r   c                   ,    e Zd ZdZ G d d          ZdS )r   z/
    Used only while tracing a cable path.
    c                       e Zd ZeZg dZdS )TracedCableSerializer.Meta)
r    r!   r"   r$   r'   r)   r*   r+   r,   r-   N)r3   r4   r5   r   r6   r7   r9   r:   r;   r<   rA   -   s$        
 
 
r:   r<   N)r3   r4   r5   __doc__r<   r9   r:   r;   r   r   (   sF         
 
 
 
 
 
 
 
 
 
r:   r   c                       e Zd Z eej                            e                    Z e	j
        d          Z G d d          Z e e	j        d                    d             ZdS )	r   )querysetT	read_onlyc                       e Zd ZeZg dZdS )CableTerminationSerializer.Meta)
r    r!   r#   cable	cable_endtermination_typetermination_idterminationr1   r2   N)r3   r4   r5   r
   r6   r7   r9   r:   r;   r<   rH   :   s$         
 
 
r:   r<   )r   c                 x    t          |j                  }d| j        d         i} ||j        d|          j        S )NrequestT)r   context)r   rM   rP   dataselfobj
serializerrP   s       r;   get_terminationz*CableTerminationSerializer.get_terminationA   s>    -co>>
dl956z#/$HHHMMr:   N)r3   r4   r5   r   r   objectsfilterCABLE_TERMINATION_MODELSrK   r   SerializerMethodFieldrM   r<   r   	JSONFieldrV   r9   r:   r;   r   r   4   s        ''$++,DEE   4+3dCCCK
 
 
 
 
 
 
 
 ..$???@@N N A@N N Nr:   r   c                   |    e Zd Z ej        d          Z G d d          Z eej                  d             Z	dS )r   TrE   c                       e Zd ZeZg dZdS )CablePathSerializer.Meta)r    path	is_activeis_completeis_splitN)r3   r4   r5   r	   r6   r7   r9   r:   r;   r<   r^   K   s        GGGr:   r<   c           	          g }|j         D ]M}t          |d                   }d| j        d         i}|                     ||dd|          j                   N|S )Nr   rO   Tr   r   rP   )path_objectsr   rP   appendrQ   )rS   rT   retnodesrU   rP   s         r;   get_pathzCablePathSerializer.get_pathO   sm    % 	X 	XE1%(;;J $,y"9:GJJzz%4QQQVWWWW
r:   N)
r3   r4   r5   r   rZ   r_   r<   r   	ListFieldri   r9   r:   r;   r   r   H   s        ,;,t<<<DH H H H H H H H .//  0/  r:   r   c                   J   e Zd Z eddd          Z ej        d          Z ej        dd          Z	 ej        d          Z
 ej        d          Z eej                  d             Z eej                  d             Z eej                  d             ZdS )	r   T)r   rF   r   rE   )rF   r   c                     |j         sdS |j        r1|j        d         j        j         d|j        d         j        j         S dS )zI
        Return the type of the peer link terminations, or None.
        Nr   .)rI   
link_peers_meta	app_label
model_namerS   rT   s     r;   get_link_peers_typez*CabledObjectSerializer.get_link_peers_type`   sQ    
 y 	4> 	_nQ'-7^^#.:K:Q:\^^^tr:   c                     |j         sg S t          |j         d                   }d| j        d         i} ||j         dd|          j        S )zS
        Return the appropriate serializer for the link termination model.
        r   rO   Trd   )rn   r   rP   rQ   rR   s       r;   get_link_peersz%CabledObjectSerializer.get_link_peersm   sX    
 ~ 	I .cnQ.?@@
dl956z#.D'RRRWWr:   c                     |j         S )N)	_occupiedrr   s     r;   get__occupiedz$CabledObjectSerializer.get__occupiedz   s
    }r:   N)r3   r4   r5   r   rI   r   	CharFieldrJ   rZ   link_peers_typern   rw   r   r   STRrs   rj   ru   BooleanFieldrx   r9   r:   r;   r   r   Y   s        O44DIIIE%%555I7k7$SWXXXO22TBBBJ11DAAAI)**
 
 +*
 .//
X 
X 0/
X 122  32  r:   r   N) "django.contrib.contenttypes.modelsr   drf_spectacular.typesr   drf_spectacular.utilsr   rest_frameworkr   dcim.choicesdcim.constantsdcim.modelsr   r	   r
   netbox.api.fieldsr   r   netbox.api.serializersr   r   r    tenancy.api.serializers_.tenantsr   utilities.apir   __all__r   r   r   ModelSerializerr   r   r9   r:   r;   <module>r      s   : : : : : : . . . . . . 5 5 5 5 5 5 & & & & & &         : : : : : : : : : : ; ; ; ; ; ; ; ; f f f f f f f f f f = = = = = = 2 2 2 2 2 2H H H H H+ H H H"	
 	
 	
 	
 	
/ 	
 	
 	
N N N N N!6 N N N(    +5   "# # # # #[8 # # # # #r:   