
    g                     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 dd
lmZ ddlmZ ddlmZ erVd dlmZ d dlmZ d dlm Z  d dl!m"Z"m#Z#  G d d      Z$ G d d      Z% G d d      Z& G d de      Z' G d de      Z(ed        Z) G d de      Zy)    )	lru_cache)NO_DB_ALIAS)DatabaseWrapper)DatabaseFeatures)DatabaseIntrospection)DatabaseOperations)is_psycopg3   )PostGISAdapter)PostGISIntrospection)PostGISOperations)PostGISSchemaEditor)Dumper)Format)TypeInfo)TextBinaryLoader
TextLoaderc                       e Zd Zy)GeometryTypeN__name__
__module____qualname__     /var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/contrib/gis/db/backends/postgis/base.pyr   r          r   r   c                       e Zd Zy)GeographyTypeNr   r   r   r   r   r      r   r   r   c                       e Zd Zy)
RasterTypeNr   r   r   r   r!   r!   "   r   r   r!   c                       e Zd Zd Zy)BaseTextDumperc                 R    |j                   j                         j                         S N)ewkbhexencodeselfobjs     r   dumpzBaseTextDumper.dump&   s    88<<>((**r   N)r   r   r   r,   r   r   r   r#   r#   %   s    	+r   r#   c                   *    e Zd Zej                  Zd Zy)BaseBinaryDumperc                     |j                   S r%   )r&   r)   s     r   r,   zBaseBinaryDumper.dump-   s    88Or   N)r   r   r   r   BINARYformatr,   r   r   r   r.   r.   *   s    	r   r.   c                 z      G  fddt               } G d d|t              } G d d|t              }||fS )Nc                   8     e Zd Z fdZd Zd Zd Z xZS )$postgis_adapters.<locals>.BaseDumperc                     t         |           t        d|fdi      | _        t        d|fdi      | _        t        dt
        fdi      | _        y )NGeometryDumperoidGeographyDumperRasterDumper)super__init_subclass__typer6   r8   r#   r9   )clsbase_dumper	__class__geo_oidgeog_oid
raster_oids     r   r;   z6postgis_adapters.<locals>.BaseDumper.__init_subclass__3   sd    )+%)${nug6F&" '+%~x7H'# $("^$5z7J$ r   c                 V    |j                   r|j                  rt        S t        S t        S r%   )is_geometry	geographyr   r   r!   r*   r+   r1   s      r   get_keyz,postgis_adapters.<locals>.BaseDumper.get_key@   s     ??,/MM=K|K%%r   c                     |j                   r6|j                  r| j                  t              S | j	                  t
              S | j                  t              S r%   )rD   rE   r8   r   r6   r   r9   r!   rF   s      r   upgradez,postgis_adapters.<locals>.BaseDumper.upgradeF   sC    ??}}#33MBB#22<@@,,Z88r   c                     t         r%   )NotImplementedErrorr)   s     r   r,   z)postgis_adapters.<locals>.BaseDumper.dumpO   s    ))r   )r   r   r   r;   rG   rI   r,   __classcell__)r?   r@   rA   rB   s   @r   
BaseDumperr4   2   s    &9*r   rM   c                       e Zd Zy)+postgis_adapters.<locals>.PostGISTextDumperNr   r   r   r   PostGISTextDumperrO   R   s    r   rP   )r>   c                   $    e Zd Zej                  Zy)-postgis_adapters.<locals>.PostGISBinaryDumperN)r   r   r   r   r0   r1   r   r   r   PostGISBinaryDumperrR   U   s    ]]Fr   rS   )r   r#   r.   )r@   rA   rB   rM   rP   rS   s   ```   r   postgis_adaptersrT   0   s@    	* 	* 	*@	
 		#*:J 	# !"555r   c                   h     e Zd ZeZeZeZe	Z
i i i dZ fdZ fdZ fdZerd ZddZ xZS  xZS )r   )geometryrE   rasterc                     |j                  dd      t        k(  r!t        | _        t        | _        t        | _        t        | $  |i | y )Nalias )
getr   PsycopgDatabaseFeaturesfeatures_classPsycopgDatabaseOperations	ops_classPsycopgDatabaseIntrospectionintrospection_classr:   __init__)r*   argskwargsr?   s      r   rb   zDatabaseWrapper.__init__g   s?    ::gr"k1"9D6DN'CD$$)&)r   c                 >   t         |           | j                         5 }|j                  ddg       t	        |j                               r
	 d d d        y |j                  d       t        r| j                  | j                  d       d d d        y # 1 sw Y   y xY w)Nz-SELECT 1 FROM pg_extension WHERE extname = %spostgisz&CREATE EXTENSION IF NOT EXISTS postgisT)	r:   prepare_databasecursorexecuteboolfetchoner	   register_geometry_adapters
connection)r*   rh   r?   s     r   rg   z DatabaseWrapper.prepare_databasep   su     "[[]fNNJYKXFOO%& ] NNCD //F ]]s   .B3BBc                 T    t         |   |      }t        r| j                  |       |S r%   )r:   get_new_connectionr	   rl   )r*   conn_paramsrm   r?   s      r   ro   z"DatabaseWrapper.get_new_connection}   s)    W/<
++J7r   c                    | j                   |   }	 || j                     }|re|j                  |       |j                  j                  |j                  t               |j                  j                  |j                  t               |r|j                  S d S # t        $ r( t        j                  ||      }||| j                  <   Y w xY wr%   )_type_infosrY   KeyErrorr   fetchregisteradaptersregister_loaderr7   r   r   )r*   pg_connectiontypenameregistryinfos        r   _register_typezDatabaseWrapper._register_type   s    ''1H,

+
 m,&&66txxL&&66txxAQR#488--  ,~~mX>'+$,s   B .CCc                    |r:| j                   D ]+  }| j                   |   j                  | j                  d        - | j                  |d      }| j                  |d      }| j                  |d      }t	        |||      \  }}|j
                  j                  t        |       |j
                  j                  t        |       y )NrV   rE   rW   )rr   poprY   r|   rT   rv   register_dumperr   )	r*   rx   clear_cachesry   r@   rA   rB   rP   rS   s	            r   rl   z*DatabaseWrapper.register_geometry_adapters   s     $ 0 0H$$X.224::tD !1 ))-DG**=+FH,,]HEJ5E:622 ""22>CTU""22>CVWr   )F)r   r   r   r   SchemaEditorClassr   r]   r   r_   r   ra   rr   rb   rg   ro   r	   r|   rl   rL   )r?   s   @r   r   r   [   sP    +%N!I. K*G 	.	X# r   r   N)*	functoolsr   django.db.backends.base.baser   "django.db.backends.postgresql.baser   PsycopgDatabaseWrapper&django.db.backends.postgresql.featuresr   r\   +django.db.backends.postgresql.introspectionr   r`   (django.db.backends.postgresql.operationsr   r^   )django.db.backends.postgresql.psycopg_anyr	   adapterr   featuresintrospectionr   
operationsr   schemar   psycopg.adaptr   
psycopg.pqr   psycopg.typesr   psycopg.types.stringr   r   r   r   r!   r#   r.   rT   r   r   r   <module>r      s     4 X B # & / ) '$!&A   + +
6  '6 '6TFX, FXr   