
    Dvg                        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rhd 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dS )    )	lru_cache)NO_DB_ALIAS)DatabaseWrapper)DatabaseFeatures)DatabaseIntrospection)DatabaseOperations)is_psycopg3   )PostGISAdapter)PostGISIntrospection)PostGISOperations)PostGISSchemaEditor)Dumper)Format)TypeInfo)TextBinaryLoader
TextLoaderc                       e Zd ZdS )GeometryTypeN__name__
__module____qualname__     h/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/contrib/gis/db/backends/postgis/base.pyr   r              r   r   c                       e Zd ZdS )GeographyTypeNr   r   r   r   r   r      r   r   r   c                       e Zd ZdS )
RasterTypeNr   r   r   r   r!   r!   "   r   r   r!   c                       e Zd Zd ZdS )BaseTextDumperc                 X    |j                                                                         S N)ewkbhexencodeselfobjs     r   dumpzBaseTextDumper.dump&   s    8<<>>((***r   N)r   r   r   r,   r   r   r   r#   r#   %   s#        	+ 	+ 	+ 	+ 	+r   r#   c                   "    e Zd Zej        Zd ZdS )BaseBinaryDumperc                     |j         S r%   )r&   r)   s     r   r,   zBaseBinaryDumper.dump-   s	    8Or   N)r   r   r   r   BINARYformatr,   r   r   r   r.   r.   *   s*        	 	 	 	 	r   r.   c                       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          | _        d S )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   s    ))+++%)${nug6F& &" '+%~x7H' '# $("^$5z7J$ $   r   c                 H    |j         r|j        rt          nt          S t          S r%   )is_geometry	geographyr   r   r!   r*   r+   r1   s      r   get_keyz,postgis_adapters.<locals>.BaseDumper.get_key@   s#    ? &,/MK==|K%%r   c                     |j         r;|j        r|                     t                    S |                     t
                    S |                     t                    S r%   )rD   rE   r8   r   r6   r   r9   r!   rF   s      r   upgradez,postgis_adapters.<locals>.BaseDumper.upgradeF   sS    ? 9} A#33MBBB#22<@@@,,Z8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   su               & & &9 9 9* * * * * * *r   rM   c                       e Zd ZdS )+postgis_adapters.<locals>.PostGISTextDumperNr   r   r   r   PostGISTextDumperrO   R   s        Dr   rP   )r>   c                       e Zd Zej        ZdS )-postgis_adapters.<locals>.PostGISBinaryDumperN)r   r   r   r   r0   r1   r   r   r   PostGISBinaryDumperrR   U   s        ]FFFr   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                     |                     dd          t          k    r$t          | _        t          | _        t          | _         t                      j	        |i | d S )Nalias )
getr   PsycopgDatabaseFeaturesfeatures_classPsycopgDatabaseOperations	ops_classPsycopgDatabaseIntrospectionintrospection_classr:   __init__)r*   argskwargsr?   s      r   rb   zDatabaseWrapper.__init__g   sU    ::gr""k11"9D6DN'CD$$)&)))))r   c                    t                                                       |                                 5 }|                    ddg           t	          |                                          r	 d d d            d S |                    d           t          r|                     | j        d           d d d            d S # 1 swxY w Y   d S )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   s7     """[[]] 	GfNNJYKXXXFOO%%&& 	G 	G 	G 	G 	G 	G 	G 	G NNCDDD G //FFF	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	G 	Gs   :C=7CCCc                     t                                          |          }t          r|                     |           |S r%   )r:   get_new_connectionr	   rl   )r*   conn_paramsrm   r?   s      r   ro   z"DatabaseWrapper.get_new_connection}   s<    WW//<<
 	8++J777r   c                 p   | j         |         }	 || j                 }n/# t          $ r" t          j        ||          }||| j        <   Y nw xY w|r_|                    |           |j                            |j        t                     |j                            |j        t                     |r|j        nd S 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,
+ , , ,~mX>>'+$$$,  Sm,,,&66txLLL&66txAQRRR#-488-s    )A	A	Fc                    |r0| j         D ](}| j         |                             | j        d            )|                     |d          }|                     |d          }|                     |d          }t	          |||          \  }}|j                            t          |           |j                            t          |           d S )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     E $ 0 E EH$X.224:tDDDD))-DDG**=+FFH,,]HEEJ5E:6 622 "22>CTUUU"22>CVWWWW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   [   s        +%N!I.  K* * * * *G G G G G      X	. 	. 	.	X 	X 	X 	X 	X 	X 	X 	X#X X X 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 4 4 4 4 4 X X X X X X                B A A A A A # # # # # # & & & & & & / / / / / / ) ) ) ) ) ) ' ' ' ' ' ' B6$$$$$$!!!!!!&&&&&&AAAAAAAA                     + + + + + + + +
    6    '6 '6 Y'6TFX FX FX FX FX, FX FX FX FX FXr   