
^Q\7              $   @   s%  d  d l  m Z d  d l Z 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 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 y d  d l m Z Wn( e e f k
 r"d d l m Z Yn Xy d  d l m Z Wn( e e f k
 rad d l m Z Yn Xy d  d l m  Z  Wn( e e f k
 rd d l m  Z  Yn Xy d  d l m! Z! Wn+ e e f k
 rGd d   d  Z! Yn Xe j" d  Z# Gd d   d e  Z$ Gd d   d e j%  Z& d S)    )unicode_literalsN)LooseVersion)get_version)settings)ImproperlyConfigured)Widget)loader)six)translation)forms)ugettext_lazy)
validators)GEOSGeometry   )GEOSException)OGRException)OGRGeomTypec               @   s)  e  Z d  Z d Z d/ Z i d d 6d d 6d d 6d	 d
 6d d 6d d 6d d 6d d 6d d 6d d 6d d 6d d e 6d d e 6d d
 e 6d d e 6d d e 6d d e 6d d e 6Z d  d!   e j   D Z d" d#   Z d$ d%   Z	 d& d'   Z
 e d( d)    Z e d* d+    Z d, d-   Z d. S)0r   z
        Encapsulate OGR Geometry Types.
        Taken from Django GitHub repository:
        https://github.com/django/django/commit/5411821e3b8d1427ee63a5914aed1088c04cc1ed
        l        Unknownr   Pointr   
LineString   Polygon   Z
MultiPoint   ZMultiLineString   ZMultiPolygon   ZGeometryCollection   Noned   
LinearRinge   PointZf   ZPoint25DZLineString25DZ
Polygon25DZMultiPoint25DZMultiLineString25DZMultiPolygon25DZGeometryCollection25Dc             C   s%   i  |  ] \ } } | | j     q S )lower).0kvr#   r#   K/var/www/dbchiro/venv/lib/python3.4/site-packages/leaflet/forms/backport.py
<dictcomp>`   s   	 zOGRGeomType.<dictcomp>c             C   s   t  | t  r | j } n t  | t  r | j   } | d k rK d } n  |  j j |  } | d k r t d |   q nF t  | t  r | |  j	 k r t d |   n  | } n t
 d   | |  _ d S)z5Figure out the correct OGR Type based upon the input.ZgeometryunknownNzInvalid OGR String Type "%s"zInvalid OGR Integer Type: %dzInvalid OGR input type given.)
isinstancer   numstrr$   
_str_typesgetr   int_types	TypeError)selfZ
type_inputr,   r#   r#   r(   __init__b   s    		zOGRGeomType.__init__c             C   s   |  j  S)z&Return the value of the name property.)name)r3   r#   r#   r(   __str__w   s    zOGRGeomType.__str__c             C   sk   t  | t  r |  j | j k St  | t  rG |  j j   | j   k St  | t  rc |  j | k Sd Sd S)z
            Do an equivalence test on the OGR type with the given
            other OGRGeomType, the short-hand string, or the integer.
            FN)r+   r   r,   r-   r5   r$   r0   )r3   otherr#   r#   r(   __eq__{   s    zOGRGeomType.__eq__c             C   s   |  j  |  j S)z9Return a short-hand string form of the OGR Geometry type.)r1   r,   )r3   r#   r#   r(   r5      s    zOGRGeomType.namec             C   sW   |  j  j d d  } | d k r% d S| d k r: d } n | d k rO d	 } n  | d
 S)z2Return the Django GeometryField for this OGR Type.Z25D r   r   Nr   ZGeometryr!   r   Field)r   zNone)r5   replace)r3   sr#   r#   r(   django   s    		zOGRGeomType.djangoc             C   s(   |  j  j d  r$ |  j d 7_ n  d S)z
            Transform Point, LineString, Polygon, and their 25D equivalents
            to their Multi... counterpart.
            r   r   r   r   N)zPointr   r   )r5   
startswithr,   )r3   r#   r#   r(   to_multi   s    zOGRGeomType.to_multiNi   )__name__
__module____qualname____doc__Zwkb25bitr1   itemsr.   r4   r6   r8   propertyr5   r=   r?   r#   r#   r#   r(   r   B   s6   
r   zdjango.contrib.gisc                   s   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 e e    e d  k r   f d d   Z n d d d  Z   S)BaseGeometryWidgetz
    The base class for rich geometry widgets.
    Render a map using the WKT of the geometry.
    Adapted from:
    https://github.com/django/django/commit/a7975260b50282b934c78c8e51846d103636ba04
    GEOMETRYi  iX  i  Fr9   Nc             C   sM   i  |  _  x$ d D] } t |  |  |  j  | <q W| rI |  j  j |  n  d  S)N	geom_typemap_srid	map_width
map_heightdisplay_raw)z	geom_typezmap_sridz	map_widthz
map_heightzdisplay_raw)attrsgetattrupdate)r3   rM   keyr#   r#   r(   r4      s
    	zBaseGeometryWidget.__init__c             C   s   | r | j  Sd S)Nr9   )Zwkt)r3   valuer#   r#   r(   	serialize   s    zBaseGeometryWidget.serializec             C   sY   y t  | |  j  SWn> t t f k
 rT } z t j d | |  WYd  d  } ~ Xn Xd  S)Nz,Error creating geometry from value '%s' (%s))r   rI   r   
ValueErrorloggererror)r3   rQ   errr#   r#   r(   deserialize   s
    &zBaseGeometryWidget.deserializez1.11c                sn  t    j | | |  } | r? t | t  r? |  j |  } n  | r | j r | j |  j k r y# | j } | j |  j  | } Wq t	 k
 r } z! t
 j d | j |  j |  WYd  d  } ~ Xq Xq n  | d  k r i  } n  i | d 6d | j d d  d 6|  j |  d 6t |  j d  d 6t j d	 6t j   d
 6} | j |  | j |  j |  j |   | S)Nz<Error transforming geometry from srid '%s' to srid '%s' (%s)r5   zgeodjango_%s-_module
serializedrH   
STATIC_URLLANGUAGE_BIDI)superget_contextr+   r-   rW   sridrI   ogr	transformr   rT   rU   r;   rR   r   rM   r   r\   r
   get_language_bidirO   build_attrs)r3   r5   rQ   rM   contextra   rV   Zbuild_attrs_kwargs)	__class__r#   r(   r_      s2    	
,	
zBaseGeometryWidget.get_contextc             C   sR  t  | t j  r$ |  j |  } n  t  | t  rT t t j |  d |  j } n  | r | j	 |  j k r y# | j
 } | j |  j  | } Wq t k
 r } z% t j d | j	 |  j | f  WYd  d  } ~ Xq Xq n  |  j | d | d d | j d d  d |  j |  d	 t |  j d	  d
 t j d t j   } t j |  j |  S)Nr`   z<Error transforming geometry from srid '%s' to srid '%s' (%s)r5   rZ   zgeodjango_%srX   rY   r[   rH   r\   r]   )r+   r	   Zstring_typesrW   dictr   jsondumpsrI   r`   ra   rb   r   rT   rU   rd   r;   rR   r   rM   r   r\   r
   rc   r   Zrender_to_stringtemplate_name)r3   r5   rQ   rM   ra   rV   re   r#   r#   r(   render   s.    !	
0	zBaseGeometryWidget.render)r@   rA   rB   rC   rH   rI   rJ   rK   rL   Zsupports_3drj   r4   rR   rW   r   r   r_   rk   r#   r#   )rf   r(   rF      s   	#rF   c                   s   e  Z d  Z d Z d Z i e d  d 6e d  d 6e d  d 6e d	  d
 6Z   f d d   Z d d   Z   f d d   Z	 d d   Z
   S)GeometryFieldz
    This is the basic form field for a Geometry.  Any textual input that is
    accepted by GEOSGeometry is accepted by this form.  By default,
    this includes WKT, HEXEWKB, WKB (in a buffer), and GeoJSON.
    rG   zNo geometry value provided.requiredzInvalid geometry value.invalid_geomzInvalid geometry type.invalid_geom_typezXAn error occurred when transforming the geometry to the SRID of the geometry form field.transform_errorc                s   | j  d d   |  _ | j  d |  j  |  _ d | k rb | j  d d  t j d t d d n  t t |   j |   |  j |  j	 j
 d <d  S)Nr`   rH   ZnullTz>Passing 'null' keyword argument to GeometryField isdeprecated.
stacklevelr   )popr`   rH   warningswarnDeprecationWarningr^   rl   r4   widgetrM   )r3   kwargs)rf   r#   r(   r4     s    	zGeometryField.__init__c             C   s   | t  j k r d St | t  so y t |  } Wqo t t t f k
 rk t j |  j	 d d d  Yqo Xn  | j
 s y |  j j | _
 Wq t k
 r |  j
 r |  j
 | _
 n  Yq Xn  | S)z<
        Transforms the value to a Geometry object.
        Nrn   code)r   ZEMPTY_VALUESr+   r   r   rS   r2   r   ValidationErrorerror_messagesr`   rv   rI   AttributeError)r3   rQ   r#   r#   r(   	to_python*  s    $		zGeometryField.to_pythonc                s   t  t |   j |  } | d k r( | St | j  j   |  j k ru |  j d k ru t j |  j d d d  n  |  j	 r |  j	 d k r |  j	 | j	 k r y | j
 |  j	  Wq t t t f k
 r t j |  j d d d  Yq Xn  | S)z
        Validates that the input value can be converted to a Geometry
        object (which is returned).  A ValidationError is raised if
        the value cannot be instantiated as a Geometry.
        NrG   ro   rx   r   rp   )r^   rl   cleanr-   rH   upperr   ry   rz   r`   rb   r   rS   r2   )r3   rQ   Zgeom)rf   r#   r(   r~   @  s    .*zGeometryField.cleanc             C   s   y" |  j  |  } |  j  |  } Wn t j k
 r= d SYn X| rn | rn | j | j  | j | d d St |  t |  k Sd S)z: Compare geographic value of data with its initial value. TZ	tolerancegư>N)r|   r   ry   rb   r`   Zequals_exactbool)r3   initialdatar#   r#   r(   _has_changedY  s    	zGeometryField._has_changed)r@   rA   rB   rC   rH   rY   Zdefault_error_messagesr4   r|   r~   r   r#   r#   )rf   r(   rl     s   rl   )'
__future__r   loggingrs   rh   distutils.versionr   r=   r   Zdjango.confr   Zdjango.core.exceptionsr   Zdjango.forms.widgetsr   Zdjango.templater   Zdjango.utilsr	   r
   r   Zdjango.utils.translationr   rY   Zdjango.corer   Zdjango.contrib.gis.geosr   ImportErrorZnogeosr   Zdjango.contrib.gis.gdalr   r   	getLoggerrT   rF   r:   rl   r#   r#   r#   r(   <module>   sB   `i