
    <%ih                     J    d dl mZmZ d dlmZ d dlmZmZmZ  G d de      Z	y)    )errorwarn)OpenApiSerializerExtension)force_instanceis_list_serializeris_serializerc                   >    e Zd ZdZdZd Zd Zd Zd Zd Z	d Z
d	 Zy
)#PolymorphicProxySerializerExtensionz0drf_spectacular.utils.PolymorphicProxySerializerc                 .    | j                   j                  S N)targetcomponent_nameselfs    S/usr/local/footviz/venv/lib/python3.12/site-packages/drf_spectacular/serializers.pyget_namez,PolymorphicProxySerializerExtension.get_name
   s    {{)))    c           	         t        | j                  j                  t              r| j	                  ||      }n| j                  ||      }| j                         sd|D cg c]  \  }}|	 c}}iS g }|D ]  \  }}||vs|j                  |        || j                  j                  |D ci c]  \  }}||d    c}}ddS c c}}w c c}}w )zN custom handling for @extend_schema's injection of PolymorphicProxySerializer oneOfz$ref)propertyNamemapping)r   discriminator)	
isinstancer   serializersdict_get_explicit_sub_components_get_implicit_sub_components_has_discriminatorappendresource_type_field_name)r   auto_schema	directionsub_components_schemaone_of_listresource_types           r   map_serializerz2PolymorphicProxySerializerExtension.map_serializer   s    dkk--t4!>>{IVN!>>{IVN&&(nEFfEFFK+ /	6,&&v./ %$(KK$H$H[ijBW-QWvf~ =j"  F  ks    C.C
c                    g }| j                   j                  D ]  }| j                  |      }| j                  |||      \  }}|s-| j	                         s|j                  d |f       Q	 |j                  | j                   j                     }|j                  d       }|j                  ||f        |S #  t        d| d| j                   j                   d| j                   j                   d       |}Y ZxY w)Nzsub-serializer z of z' must contain the discriminator field "zO". defaulting to sub-serializer name, but schema will likely not match the API.)r   r   _prep_serializer_process_serializerr   r    fieldsr!   to_representationr   r   )	r   r"   r#   r$   sub_serializerresolved_nameresolved_schemadiscriminator_fieldr(   s	            r   r   z@PolymorphicProxySerializerExtension._get_implicit_sub_components#   s   "kk55 	HN!22>BN/3/G/GUcen/o,]O"**,%%t_&=>	2*8*?*?@d@d*e'$7$I$I$$OM %%}o&FG'	H* 2)-T[[=W=W<X YAAEAeAe@f ggh
 %2Ms   +4B66AC9c                     g }| j                   j                  j                         D ]B  \  }}| j                  |      }| j	                  |||      \  }}|s0|j                  ||f       D |S r   )r   r   itemsr+   r,   r    )r   r"   r#   r$   r(   r/   r%   r1   s           r   r   z@PolymorphicProxySerializerExtension._get_explicit_sub_components<   sx    -1[[-D-D-J-J-L 	H)M>!22>BN#'#;#;KYb#c Q%%}o&FG		H r   c                 2    | j                   j                  d uS r   )r   r!   r   s    r   r   z6PolymorphicProxySerializerExtension._has_discriminatorF   s    {{334??r   c                 R    t        |      }| j                  j                  |_        |S r   )r   r   partial)r   
serializers     r   r+   z4PolymorphicProxySerializerExtension._prep_serializerI   s$    #J/
![[00
r   c                 6   t        |      rJ| j                         s| j                  j                  durt	        d       y|j                  ||      }d |fS t        |      r.|j                  ||      }|r|j                  |j                  fS dS t        d       y)NFzTo control sub-serializer's "many" attribute, following usage pattern is necessary: PolymorphicProxySerializer(serializers=[...], resource_type_field_name=None, many=False). Ignoring serializer as it is not processable in this configuration.)NNzKPolymorphicProxySerializer's serializer argument contained unknown objects.)r   r   r   _manyr   _unwrap_list_serializerr   resolve_serializernamerefr   )r   r"   r8   r#   r&   resolveds         r   r,   z7PolymorphicProxySerializerExtension._process_serializerN   s    j)&&(DKK,=,=U,Jg
 " 88YOF<:&"55j)LH4<HMM8<<0N,N_`r   N)__name__
__module____qualname__target_classpriorityr   r)   r   r   r   r+   r,    r   r   r
   r
      s0    ELH*,2@
r   r
   N)
drf_spectacular.drainager   r   drf_spectacular.extensionsr   drf_spectacular.plumbingr   r   r   r
   rE   r   r   <module>rI      s     0 A V VX*D Xr   