a
    È[Ùfé  ã                   @   s<   d dl mZ d dlmZ d dlmZmZ G dd„ deƒZdS )é    )ÚCLOB)Ú
WKTAdapter)ÚGeometryCollectionÚPolygonc                   @   s>   e Zd ZeZdd„ Zedd„ ƒZeddd„ƒZ	edd	„ ƒZ
d
S )ÚOracleSpatialAdapterc                    s^   t |tƒr ˆ  |¡rJˆ  |¡}n*t |tƒrJt‡ fdd„|D ƒƒrJˆ  |¡}|jˆ _|jˆ _dS )a  
        Oracle requires that polygon rings are in proper orientation. This
        affects spatial operations and an invalid orientation may cause
        failures. Correct orientations are:
         * Outer ring - counter clockwise
         * Inner ring(s) - clockwise
        c                 3   s"   | ]}t |tƒoˆ  |¡V  qd S ©N)Ú
isinstancer   Ú_polygon_must_be_fixed)Ú.0Úg©Úself© úC:\Users\91910\OneDrive\Desktop\vts_admin_rebuild-master\vts\Lib\site-packages\django/contrib/gis/db/backends/oracle/adapter.pyÚ	<genexpr>   s   z0OracleSpatialAdapter.__init__.<locals>.<genexpr>N)	r   r   r	   Ú_fix_polygonr   ÚanyÚ_fix_geometry_collectionZwktZsrid)r   Úgeomr   r   r   Ú__init__
   s    


ÿ
zOracleSpatialAdapter.__init__c                 C   s$   | j  o"| jj p"tdd„ | D ƒƒS )Nc                 s   s   | ]}|j V  qd S r   )Úis_counterclockwise)r
   Úxr   r   r   r   "   ó    z>OracleSpatialAdapter._polygon_must_be_fixed.<locals>.<genexpr>)ÚemptyÚexterior_ringr   r   )Úpolyr   r   r   r	      s    
þz+OracleSpatialAdapter._polygon_must_be_fixedTc                 C   sZ   |r|  ¡ }|jjs$tt|jƒƒ|_tdt|ƒƒD ]"}|| jr2tt|| ƒƒ||< q2|S )z:Fix single polygon orientation as described in __init__().é   )Úcloner   r   ÚlistÚreversedÚrangeÚlen)Úclsr   r   Úir   r   r   r   %   s    
z!OracleSpatialAdapter._fix_polygonc                 C   s:   |  ¡ }t|ƒD ]$\}}t|tƒr| j|dd||< q|S )zf
        Fix polygon orientations in geometry collections as described in
        __init__().
        F)r   )r   Ú	enumerater   r   r   )r"   Zcollr#   r   r   r   r   r   4   s
    
z-OracleSpatialAdapter._fix_geometry_collectionN)T)Ú__name__Ú
__module__Ú__qualname__r   Z
input_sizer   Ústaticmethodr	   Úclassmethodr   r   r   r   r   r   r      s   
r   N)Z	cx_Oracler   Z+django.contrib.gis.db.backends.base.adapterr   Zdjango.contrib.gis.geosr   r   r   r   r   r   r   Ú<module>   s   