
    ]j                         d dl mZ d dlmZ d dlmZmZ d dlmZm	Z	m
Z
mZmZ d Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Z G d de      Z G d de      Z G d de      Zy)    )get_field_info)warn)OpenApiSerializerExtensionOpenApiSerializerFieldExtension)ResolvedComponentbuild_array_typebuild_object_typefollow_field_sourceget_docc                      ddddddgddd	S )
Narraynumberfloat)typeformatX)@-eS@      )r   itemsexampleminItemsmaxItems r       T/root/env/lib/python3.12/site-packages/drf_spectacular/contrib/rest_framework_gis.pybuild_point_schemar   
   s%    "g6W% r   c                  ,    dt               ddgddggddS )Nr   g*:x6@g>W[Q@r   r   r   )r   r   r   r   )r   r   r   r   build_linestring_schemar      s*    #%g&'(:;	 r   c                  J    di t               ddiddgddgddgddgddgggdS )Nr   r      g        g      I@)r   r   r   )r   r   r   r   build_polygon_schemar"      sQ    =+-=z1= c
dtsc

 r   c                 (    t        d| gd|d      S )Nstringr   enum)r   coordinates
properties)r	   )namecoordss     r   build_geo_container_schemar,   -   s!    %v6!
 r   c                  *    t        dt                     S )NPoint)r,   r   r   r   r   build_point_geo_schemar/   6   s    %g/A/CDDr   c                  *    t        dt                     S )N
LineString)r,   r   r   r   r   build_linestring_geo_schemar2   :   s    %l4K4MNNr   c                  *    t        dt                     S )NPolygon)r,   r"   r   r   r   build_polygon_geo_schemar5   >   s    %i1E1GHHr   c                  @    dt               t               t               giS )NoneOf)r/   r2   r5   r   r   r   build_geometry_geo_schemar8   B   s&    "$')$&
 r   c                      dddiddg ddS )Nr   r   r   r!   )r   r   r   r   )r   r   r   r   r   r   r   r   r   build_bbox_schemar:   L   s     (#7 r   c                    ddl m} t        | |j                        r
t	               S t        | |j
                        r
t               S t        | |j                        r
t               S t        | |j                        rt        dt        t                           S t        | |j                        rt        dt        t                           S t        | |j                        rt        dt        t!                           S t        | |j"                        rt        dt        t%                           S t        | |j&                        r
t%               S t)        d       i S )Nr   )models
MultiPointMultiLineStringMultiPolygonGeometryCollectionz&Encountered unknown GIS geometry field)django.contrib.gis.dbr<   
isinstance
PointFieldr/   LineStringFieldr2   PolygonFieldr5   MultiPointFieldr,   r   r   MultiLineStringFieldr   MultiPolygonFieldr"   GeometryCollectionFieldr8   GeometryFieldr   )model_fieldr<   s     r   build_geo_schemarL   V   s/   ,+v001%''	K!7!7	8*,,	K!4!4	5'))	K!7!7	8)*+=+?@
 	
 
K!<!<	=)/0G0IJ
 	
 
K!9!9	:),-A-CD
 	
 
K!?!?	@) "23L3N"O
 	
 
K!5!5	6(**56	r   c                     ddl m} | j                  |   }t        ||      rt	        d       i S t        | j                  j                        j                  |   }t        |      S )Nr   )GeometrySerializerMethodFieldzGGeometry generation for GeometrySerializerMethodField is not supported.)	rest_framework_gis.fieldsrN   fieldsrB   r   r   MetamodelrL   )
serializergeo_field_namerN   fieldrK   s        r   map_geo_fieldrV   v   sX    Gn-E%67VW	 !6!67>>~NKK((r   c                     ddl m} | sd|j                  vrd|j                  d<   | rd|j                  vrd|j                  d<   y y y )Nr   )spectacular_settingsGisFeatureEnum)FeatureGisFeatureCollectionEnum)FeatureCollection)drf_spectacular.settingsrX   ENUM_NAME_OVERRIDES)
collectionrX   s     r   _inject_enum_collision_fixr`      sU    =*2F2Z2ZZEQ001AB08L8`8``Oe001KL azr   c                        e Zd ZdZdZd Zd Zy)"GeoFeatureModelSerializerExtensionz8rest_framework_gis.serializers.GeoFeatureModelSerializerTc                     t        d       |j                  | j                  |d      }| j                  | j                  |      S )NFr_   T)bypass_extensions)r`   _map_serializertarget map_geo_feature_model_serializer)selfauto_schema	directionbase_schemas       r   map_serializerz1GeoFeatureModelSerializerExtension.map_serializer   s=    "e4!11$++y\`1a44T[[+NNr   c                    ddl m} dddgdi}|j                  j                  r+|d   j	                  |j                  j                        |d<   t        ||j                  j                        |d	<   |d   j	                  |j                  j                         |j                  j                  s|j                  j                  r6t               |d
<   |d   j	                  |j                  j                  d        |j	                  dd       }|t        |      k(  rd }|j	                  dd        ||d<   t        ||      S )Nr   )GeoFeatureModelSerializerr   r$   rZ   r%   r)   idgeometrybboxdescriptionrequired)r)   rs   )rest_framework_gis.serializersro   rQ   id_fieldpoprV   	geo_field	auto_bboxbbox_geo_fieldr:   r   r	   )ri   rS   rl   ro   geo_propertiesrs   s         r   rh   zCGeoFeatureModelSerializerExtension.map_geo_feature_model_serializer   s   L X	{;
 ??###.|#<#@#@AYAY#ZN4 %2:z?X?X%Yz"L!%%joo&?&?@??$$
(F(F%6%8N6"%))*//*H*H$O "oomT:'";<<K 	
D) (3|$ %#
 	
r   N)__name__
__module____qualname__target_classmatch_subclassesrm   rh   r   r   r   rb   rb      s    MLO
r   rb   c                       e Zd ZdZd Zy)&GeoFeatureModelListSerializerExtensionz<rest_framework_gis.serializers.GeoFeatureModelListSerializerc                 |   t        d       |j                  | j                  j                  |      }t	        ddgdt        |j                        d      }t        |j                   dt        j                  | j                  j                  |	      }|j                  j                  |       |j                  S )
NTrd   r$   r\   r%   )r   featuresr(   List)r*   r   objectschema)r`   resolve_serializerrg   childr	   r   refr   r*   SCHEMAregistryregister_on_missing)ri   rj   rk   feature_componentcollection_schemalist_components         r   rm   z5GeoFeatureModelListSerializerExtension.map_serializer   s    "d3 (::4;;;L;LiX-!)4G3HI,->-B-BC
 +%**+40"));;$$$	
 	00@!!!r   N)r|   r}   r~   r   rm   r   r   r   r   r      s    QL"r   r   c                       e Zd ZdZdZd Zy)GeometryFieldExtensionz'rest_framework_gis.fields.GeometryFieldTc                    	 | j                   j                  j                  j                  }t	        || j                   j
                  j                  d            }t        |      S #  t        d| j                    d       i cY S xY w)N.z%Encountered an issue resolving field z. defaulting to generic object.)	rg   parentrQ   rR   r
   sourcesplitrL   r   )ri   rj   rk   rR   rK   s        r   map_serializer_fieldz+GeometryFieldExtension.map_serializer_field   sq    	KK&&++11E-eT[[5G5G5M5Mc5RSK#K00	8EdefIs   A#A& &BN)r|   r}   r~   r   r   r   r   r   r   r   r      s    <L
r   r   N)rest_framework.utils.model_metar   drf_spectacular.drainager   drf_spectacular.extensionsr   r   drf_spectacular.plumbingr   r   r	   r
   r   r   r   r"   r,   r/   r2   r5   r8   r:   rL   rV   r`   rb   r   r   r   r   r   <module>r      s    : ) b 
 EOI@)f(
)C (
V"-G "2< r   