U
    f                     @   s   d dl Z d dlZd dlmZ d dlmZ d dlmZ d dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ e d	ZG d
d deZG dd deZG dd deZdS )    N)settings)gdal)
json_regex)GEOSExceptionGEOSGeometry)Widget)translation)RemovedInDjango51Warningzdjango.contrib.gisc                       sV   e Zd ZdZdZdZdZdZdZdZ	dZ
dd	d
Zdd Zdd Z fddZ  ZS )BaseGeometryWidgetzc
    The base class for rich geometry widgets.
    Render a map using the WKT of the geometry.
    ZGEOMETRY  X    F Nc                 C   sl   i | _ dD ]}t| || j |< q
|r4d|ksHd|ksH| jdksH| jdkrXtjdtdd |rh| j | d S )	N)	geom_typemap_srid	map_width
map_heightdisplay_rawr   r   r   r   zbThe map_height and map_width widget attributes are deprecated. Please use CSS to size map widgets.   )category
stacklevel)attrsgetattrr   r   warningswarnr	   updateselfr   key r   D/tmp/pip-unpacked-wheel-_jot26k8/django/contrib/gis/forms/widgets.py__init__   s(    zBaseGeometryWidget.__init__c                 C   s   |r
|j S dS Nr   )Zwktr   valuer   r   r    	serialize0   s    zBaseGeometryWidget.serializec              
   C   sF   z
t |W S  tttfk
r@ } ztd|| W 5 d }~X Y nX d S )Nz,Error creating geometry from value '%s' (%s))r   r   
ValueError	TypeErrorloggererror)r   r$   errr   r   r    deserialize3   s
    
 zBaseGeometryWidget.deserializec                    s   t  |||}|r(t|tr(| |}|r|jr|j| jkrz|j}|| j |}W n8 t	j
k
r } ztd|j| j| W 5 d }~X Y nX t	| jd j}|| | j|d|dd | ||dkrdn|tjt d|pi  |S )	Nz<Error transforming geometry from srid '%s' to srid '%s' (%s)r   zgeodjango_%s-_UnknownZGeometry)namemoduleZ
serializedr   
STATIC_URLZLANGUAGE_BIDI)superget_context
isinstancestrr+   sridr   ogrZ	transformr   ZGDALExceptionr(   r)   ZOGRGeomTyper   r/   r   Zbuild_attrsreplacer%   r   r1   r   Zget_language_bidi)r   r/   r$   r   contextr7   r*   r   	__class__r   r    r3   :   s@    
zBaseGeometryWidget.get_context)N)__name__
__module____qualname____doc__r   r   r   r   r   Zsupports_3dtemplate_namer!   r%   r+   r3   __classcell__r   r   r:   r    r
      s   
r
   c                       s:   e Zd ZdZdZG dd dZdd Z fddZ  ZS )	OpenLayersWidgetzgis/openlayers.htmli  c                   @   s   e Zd ZddiZdZdS )zOpenLayersWidget.Mediaall)z-https://cdn.jsdelivr.net/npm/ol@v7.2.2/ol.csszgis/css/ol3.css)z1https://cdn.jsdelivr.net/npm/ol@v7.2.2/dist/ol.jszgis/js/OLMapWidget.jsN)r<   r=   r>   cssZjsr   r   r   r    Mediaf   s    rE   c                 C   s   |r
|j S dS r"   )jsonr#   r   r   r    r%   r   s    zOpenLayersWidget.serializec                    s0   t  |}|r,t|r,| jdkr,| j|_|S )Nr   )r2   r+   r   matchr   r6   )r   r$   Zgeomr:   r   r    r+   u   s    zOpenLayersWidget.deserialize)	r<   r=   r>   r@   r   rE   r%   r+   rA   r   r   r:   r    rB   b   s
   rB   c                       s2   e Zd ZdZdZdZdZdZd	 fdd	Z  Z	S )
	OSMWidgetz3
    An OpenLayers/OpenStreetMap-based widget.
    zgis/openlayers-osm.html   /      Nc                    s8   t    dD ]}t| || j|< q|r4| j| d S )N)default_londefault_latdefault_zoom)r2   r!   r   r   r   r   r:   r   r    r!      s
    
zOSMWidget.__init__)N)
r<   r=   r>   r?   r@   rL   rM   rN   r!   rA   r   r   r:   r    rH   }   s   rH   )loggingr   Zdjango.confr   Zdjango.contrib.gisr   Zdjango.contrib.gis.geometryr   Zdjango.contrib.gis.geosr   r   Zdjango.forms.widgetsr   Zdjango.utilsr   Zdjango.utils.deprecationr	   	getLoggerr(   r
   rB   rH   r   r   r   r    <module>   s   
S