U
    Ha‡  ã                   @   s8  d Z ddlZddlZddlmZmZmZmZmZ ddl	m
Z
 ddlmZ ddlmZmZ ddlmZ e d¡Zd	d
„ ZedeeƒZdd„ ZeeƒZedeeƒZdd„ ZeeƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZG dd„ deƒZeeƒZeeƒZeeƒZeeƒZ eeƒZ!G dd„ dƒZ"dd„ Z#dd„ Z$dS )a  
 This module houses the ctypes initialization procedures, as well
 as the notice and error handler function callbacks (get called
 when an error occurs in GEOS).

 This module also houses GEOS Pointer utilities, including
 get_pointer_arr(), and GEOM_PTR.
é    N)ÚCDLLÚ	CFUNCTYPEÚPOINTERÚ	StructureÚc_char_p)Úfind_library)ÚImproperlyConfigured)ÚSimpleLazyObjectÚcached_property)Úget_version_tuplezdjango.contrib.gisc                  C   sÚ   zddl m}  | j}W n  ttttfk
r6   d }Y nX |rBd }n6tjdkrVddg}n"tjdkrjddg}ntdtj ƒ‚|rš|D ]}t	|ƒ}|d k	r€ qšq€|d kr´td	d
 
|¡ ƒ‚t|ƒ}t|j_tg|j_t|j_|S )Nr   )ÚsettingsÚntZgeos_czlibgeos_c-1ÚposixZGEOSzUnsupported OS "%s"z]Could not find the GEOS library (tried "%s"). Try setting GEOS_LIBRARY_PATH in your settings.z", ")Zdjango.confr   ZGEOS_LIBRARY_PATHÚAttributeErrorÚImportErrorr   ÚOSErrorÚosÚnamer   Újoinr   ÚCONTEXT_PTRZ
initGEOS_rÚrestypeZfinishGEOS_rÚargtypesr   ÚGEOSversion)r   Zlib_pathZ	lib_namesZlib_nameZ_lgeos© r   úC/tmp/pip-unpacked-wheel-3jxiddxt/django/contrib/gis/geos/libgeos.pyÚ	load_geos   s8    





þÿ	
r   c                 C   sH   |   ¡ |  ¡  } }z| | }W n tk
r6   | }Y nX t d|¡ d S )NzGEOS_NOTICE: %s
)ÚdecodeÚ	TypeErrorÚloggerÚwarning)ÚfmtÚlstZwarn_msgr   r   r   Únotice_hO   s    
r"   c                 C   sH   |   ¡ |  ¡  } }z| | }W n tk
r6   | }Y nX t d|¡ d S )NzGEOS_ERROR: %s
)r   r   r   Úerror)r    r!   Úerr_msgr   r   r   Úerror_h]   s    
r%   c                   @   s   e Zd ZdS )Ú
GEOSGeom_tN©Ú__name__Ú
__module__Ú__qualname__r   r   r   r   r&   l   s   r&   c                   @   s   e Zd ZdS )ÚGEOSPrepGeom_tNr'   r   r   r   r   r+   p   s   r+   c                   @   s   e Zd ZdS )ÚGEOSCoordSeq_tNr'   r   r   r   r   r,   t   s   r,   c                   @   s   e Zd ZdS )ÚGEOSContextHandle_tNr'   r   r   r   r   r-   x   s   r-   c                   @   sB   e Zd ZdZdZdZdZddddœdd„Zdd„ Ze	dd	„ ƒZ
dS )
ÚGEOSFuncFactoryz)
    Lazy loading of GEOS functions.
    N)r   Úerrcheckr   c                C   s4   || _ |d k	r|| _|d k	r"|| _|d k	r0|| _d S ©N)Ú	func_namer   r/   r   )Úselfr1   r   r/   r   r   r   r   Ú__init__Ž   s    zGEOSFuncFactory.__init__c                 G   s
   | j |Ž S r0   )Úfunc)r2   Úargsr   r   r   Ú__call__—   s    zGEOSFuncFactory.__call__c                 C   s<   ddl m} || jƒ}| jpg |_| j|_| jr8| j|_|S )Nr   )ÚGEOSFunc)Z-django.contrib.gis.geos.prototypes.threadsafer7   r1   r   r   r/   )r2   r7   r4   r   r   r   r4   š   s    
zGEOSFuncFactory.func)r(   r)   r*   Ú__doc__r   r   r/   r3   r6   r
   r4   r   r   r   r   r.   †   s   	r.   c                   C   s   t  ¡ S )z.Return the string version of the GEOS library.)Úlgeosr   r   r   r   r   Úgeos_version¥   s    r:   c                   C   s   t tƒ  ¡ ƒS )z<Return the GEOS version as a tuple (major, minor, subminor).)r   r:   r   r   r   r   r   Úgeos_version_tupleª   s    r;   )%r8   Úloggingr   Úctypesr   r   r   r   r   Zctypes.utilr   Zdjango.core.exceptionsr   Zdjango.utils.functionalr	   r
   Zdjango.utils.versionr   Ú	getLoggerr   r   Z
NOTICEFUNCr"   Z	ERRORFUNCr%   r&   r+   r,   r-   ZGEOM_PTRZPREPGEOM_PTRZCS_PTRr   r9   r.   r:   r;   r   r   r   r   Ú<module>   s6   
7		