
    R1i                     f    d dl mZ d dlmZ d dlmZmZmZmZm	Z	 d dl
mZ d dlmZ  G d de      Zy)	    )warn)OpenApiSerializerExtension)ComponentIdentityResolvedComponentbuild_basic_typebuild_object_typeis_patched_serializer)spectacular_settings)OpenApiTypesc                        e Zd ZdZdZd Zd Zy)PolymorphicSerializerExtensionz2rest_polymorphic.serializers.PolymorphicSerializerTc           
         g }| j                   }|j                  D ]  }|j                  |      }|j                  |_        |j	                  |      }|j                  ||      }|s5t        |j                  ||      t        j                  t        d            }| j                  |||j                  t        ||            }	|j                  ||	j                  f       |rt        d|j                    d        g }
|D ]  \  }}||
vs|
j                  |        |
|j                  |D ci c]  \  }}||d    c}}ddS c c}}w )	Nvirtual)nametypeobject)auto_schema	componentresource_type_field_namepatchedz'discriminator mapping key is empty for z,. this might lead to code generation issues.z$ref)propertyNamemapping)oneOfdiscriminator)targetmodel_serializer_mapping&_get_serializer_from_model_or_instancepartialto_resource_typeresolve_serializerr   _get_serializer_nameSCHEMAr   build_typed_componentr   r	   appendrefr   	__class__)selfr   	directionsub_components
serializer	sub_modelsub_serializerresource_typer   typed_componentone_of_list_r%   s                l/home/cursorai/projects/iching/venv/lib/python3.12/site-packages/drf_spectacular/contrib/rest_polymorphic.pymap_serializerz-PolymorphicSerializerExtension.map_serializer   so   [[
#<<I'NNyYN%/%7%7N"&77	BM#66~yQI-$99.)T*11,Y7	
 #88'#)3)L)L-niH	 9 O !!=/2E2E"FG =n>V>V=W XA B+ =4 $FAs+%""3' %
 ! * C CQ_`Q_;M=#M3v;6Q_`
 	
 as   1E	
c                    t         j                  r8|j                  j                  d      r|j                  d t	        d        dz   }n|j                   d}t        |t        t        j                        i|rd n|g      }|j                  rd||j                  gi}n|}t        |t        j                  |j                  |      }|j                  j                  |       |S )NRequestTypedRequestTyped)
propertiesrequiredallOf)r   r   r   schema)r
   COMPONENT_SPLIT_REQUESTr   endswithlenr   r   r   STRr:   r%   r   r"   r   registryregister_on_missing)	r'   r   r   r   r   typed_component_nameresource_type_schemar:   component_typeds	            r1   r#   z4PolymorphicSerializerExtension.build_typed_component:   s    77INN<S<ST]<^#,>>2BC	N?#Cn#T &/nn%5U#; 002B<CSCS2TU$T+C*D 

  4immDEF)F+%"))##	
 	00A    N)__name__
__module____qualname__target_classmatch_subclassesr2   r#    rD   r1   r   r      s    GL)
VrD   r   N)drf_spectacular.drainager   drf_spectacular.extensionsr   drf_spectacular.plumbingr   r   r   r   r	   drf_spectacular.settingsr
   drf_spectacular.typesr   r   rJ   rD   r1   <module>rP      s,    ) A  : .F%? FrD   