o
    e                     @   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.
    GEOMETRY  X    F Nc                 C   sp   i | _ dD ]
}t| || j |< q|rd|v s$d|v s$| jdks$| jdkr,tjdtdd |r6| j | d S 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    S/var/www/html/venv/lib/python3.10/site-packages/django/contrib/gis/forms/widgets.py__init__   s    

zBaseGeometryWidget.__init__c                 C      |r|j S dS Nr   )wktr   valuer    r    r!   	serialize0      zBaseGeometryWidget.serializec              
   C   sF   zt |W S  tttfy" } ztd|| W Y d }~d S d }~ww )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| |}|rJ|jrJ|j| jkrJz|j}|| j |}W n t	j
yI } ztd|j| j| W Y d }~nd }~ww t	| jd j}|| | j|d|dd | ||dkrkdn|tjt d|pvi  |S )	Nz<Error transforming geometry from srid '%s' to srid '%s' (%s)r   zgeodjango_%s-_UnknownGeometry)namemodule
serializedr   
STATIC_URLLANGUAGE_BIDI)superget_context
isinstancestrr/   sridr   ogr	transformr   GDALExceptionr,   r-   OGRGeomTyper   r4   r   build_attrsreplacer(   r   r7   r   get_language_bidi)r   r4   r'   r   contextr>   r.   r   	__class__r    r!   r:   :   sD   
zBaseGeometryWidget.get_contextN)__name__
__module____qualname____doc__r   r   r   r   r   supports_3dtemplate_namer"   r(   r/   r:   __classcell__r    r    rF   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)rI   rJ   rK   cssjsr    r    r    r!   Mediaf   s    rT   c                 C   r#   r$   )jsonr&   r    r    r!   r(   r   r)   zOpenLayersWidget.serializec                    s0   t  |}|rt|r| jdkr| j|_|S )Nr   )r9   r/   r   matchr   r=   )r   r'   geomrF   r    r!   r/   u   s   zOpenLayersWidget.deserialize)	rI   rJ   rK   rN   r   rT   r(   r/   rO   r    r    rF   r!   rP   b   s    rP   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                    s<   t    dD ]
}t| || j|< q|r| j| d S d S )N)default_londefault_latdefault_zoom)r9   r"   r   r   r   r   rF   r    r!   r"      s   
zOSMWidget.__init__rH   )
rI   rJ   rK   rL   rN   r\   r]   r^   r"   rO   r    r    rF   r!   rX   }   s    rX   )loggingr   django.confr   django.contrib.gisr   django.contrib.gis.geometryr   django.contrib.gis.geosr   r   django.forms.widgetsr   django.utilsr   django.utils.deprecationr	   	getLoggerr,   r
   rP   rX   r    r    r    r!   <module>   s    
S