
    >Tfq                         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 d d
lmZ  G d d          Z eej                   G d de                      ZdS )    )gettext)OpenApiTypes)extend_schema_field)Field)ValidationError)
ObjectType)CustomFieldTypeChoices)CUSTOMFIELD_EMPTY_VALUES)CustomFieldget_serializer_for_modelc                       e Zd ZdZdZd ZdS )CustomFieldDefaultValueszh
    Return a dictionary of all CustomFields assigned to the parent model and their default values.
    Tc                 
   |j         j        j        | _        t          j                            | j                  }t          j                            |          }i }|D ]#}|j        |j        ||j	        <   d ||j	        <   $|S )Nobject_types)
parentMetamodelr   objectsget_for_modelr   filterdefaultname)selfserializer_fieldobject_typefieldsvaluefields         </var/www/html/netbox-4.1.3/netbox/extras/api/customfields.py__call__z!CustomFieldDefaultValues.__call__   s    %,17
 !(66tzBB$+++EE  	) 	)E}($)Mej!!$(ej!!    N)__name__
__module____qualname____doc__requires_contextr"    r#   r!   r   r      s5              r#   r   c                        e Zd Zd Zd Zd ZdS )CustomFieldsDataFieldc                     t          | d          sSt          j                            | j        j        j                  }t          j                            |          | _	        | j	        S )z_
        Cache CustomFields assigned to this model to avoid redundant database queries
        _custom_fieldsr   )
hasattrr   r   r   r   r   r   r   r   r-   )r   r   s     r!   _get_custom_fieldsz(CustomFieldsDataField._get_custom_fields-   s[     t-.. 	W$,::4;;K;QRRK"-"5"<"<+"<"V"VD""r#   c                    ddl m} i }|                                 D ]}|                    |                    |j                            }|U|j        t          j        k    r@ ||j	        
                                          } ||d| j        j                  j        }nW|U|j        t          j        k    r@ ||j	        
                                          } ||dd| j        j                  j        }|||j        <   |S )Nr   r   T)nestedcontext)r1   manyr2   )utilities.apir   r/   deserializegetr   typer	   TYPE_OBJECTrelated_object_typemodel_classr   r2   dataTYPE_MULTIOBJECT)r   objr   r;   cfr   
serializers          r!   to_representationz'CustomFieldsDataField.to_representation6   s   ::::::))++ 	" 	"BNN37727#3#344E RW0F0R%R%R55b6L6X6X6Z6Z[[
"
5t{?RSSSX"rw2H2Y'Y'Y55b6L6X6X6Z6Z[[
"
5D$+J]^^^c!DMMr#   c                    t          |          t          urt          d          |                                 D ]}|j        |v r
||j                 t
          vr|j         t          j        t          j        fv rt          |j
                                                  }|j         t          j        k    } |||j                 d|| j        j                  }|                                r)|rd |j        D             n|j        d         ||j        <   t          t!          d                              ||j                                     | j        j        ri | j        j        j        |}|S )NzjInvalid data format. Custom field data must be passed as a dictionary mapping field names to their values.T)r;   r1   r3   r2   c                     g | ]
}|d          S )idr)   ).0r=   s     r!   
<listcomp>z;CustomFieldsDataField.to_internal_value.<locals>.<listcomp>W   s    $J$J$J3SY$J$J$Jr#   rC   z!Unknown related object(s): {name})r   )r7   dictr   r/   r   r
   r	   r8   r<   r   r9   r:   r   r2   is_validr;   _formatinstancecustom_field_data)r   r;   r>   serializer_classr3   r?   s         r!   to_internal_valuez'CustomFieldsDataField.to_internal_valueF   s   ::T!!!   ))++ 	m 	mBw$4=8P#P#PUWU\*6*;a V V $<B<R<^<^<`<`#a#a w"8"II--4=TXbfbmbuvvv
&&(( mNR$m$J$J*/$J$J$J$JXbXghlXmDMM)!,O*P*P*W*W]abdbi]j*W*k*klll ; 	FEdk*<EEDr#   N)r$   r%   r&   r/   r@   rM   r)   r#   r!   r+   r+   *   sA        # # #       r#   r+   N)django.utils.translationr   rH   drf_spectacular.typesr   drf_spectacular.utilsr   rest_framework.fieldsr   rest_framework.serializersr   core.modelsr   extras.choicesr	   extras.constantsr
   extras.modelsr   r4   r   r   OBJECTr+   r)   r#   r!   <module>rX      s0   1 1 1 1 1 1 . . . . . . 5 5 5 5 5 5 ' ' ' ' ' ' 6 6 6 6 6 6 " " " " " " 1 1 1 1 1 1 5 5 5 5 5 5 % % % % % % 2 2 2 2 2 2       0 \())4 4 4 4 4E 4 4 *)4 4 4r#   