
vลฯ^`	  ใ               @   sr   d  Z  d d l m Z d d l m Z m Z d d l m Z Gd d   d e j  Z	 Gd d   d e j  Z
 d	 S)
zR
This module holds simple classes to convert geospatial values from the
database.
้    )ฺDecimal)ฺAreaฺDistance)ฺmodelsc                   s[   e  Z d  Z d Z   f d d   Z d d   Z d d d  Z d	 d
   Z d d   Z   S)ฺ	AreaFieldzWrapper for Area values.c                s   t    j   | |  _ d  S)N)ฺsuperฺ__init__ฺ	geo_field)ฺselfr	   )ฺ	__class__ฉ ๚M/tmp/pip-build-8lau8j11/django/django/contrib/gis/db/models/sql/conversion.pyr      s    zAreaField.__init__c             C   s   t  | t  s t d   | S)Nz0AreaField only accepts Area measurement objects.)ฺ
isinstancer   ฺ
ValueError)r
   ฺvaluer   r   r   ฺget_prep_value   s    zAreaField.get_prep_valueFc             C   s<   | d  k r d  S| j  j |  j  } | r8 t | |  S| S)N)ฺopsฺget_area_att_for_fieldr	   ฺgetattr)r
   r   ฺ
connectionฺpreparedฺarea_attr   r   r   ฺget_db_prep_value   s    zAreaField.get_db_prep_valuec             C   sZ   | d  k r d  St  | t  r+ t |  } | j j |  j  } | rV t | | i   S| S)N)r   r   ฺfloatr   r   r	   r   )r
   r   ฺ
expressionr   r   r   r   r   ฺfrom_db_value   s    zAreaField.from_db_valuec             C   s   d S)Nr   r   )r
   r   r   r   ฺget_internal_type'   s    zAreaField.get_internal_type)	ฺ__name__ฺ
__module__ฺ__qualname__ฺ__doc__r   r   r   r   r   r   r   )r   r   r      s   r   c                   sa   e  Z d  Z d Z   f d d   Z   f d d   Z d d d  Z d	 d
   Z d d   Z   S)ฺDistanceFieldzWrapper for Distance values.c                s   t    j   | |  _ d  S)N)r   r   r	   )r
   r	   )r   r   r   r   -   s    zDistanceField.__init__c                s#   t  | t  r | St   j |  S)N)r   r   r   r   )r
   r   )r   r   r   r   1   s    zDistanceField.get_prep_valueFc             C   sG   t  | t  s | S| j j |  j  } | s: t d   t | |  S)Nz?Distance measure is supplied, but units are unknown for result.)r   r   r   ฺget_distance_att_for_fieldr	   r   r   )r
   r   r   r   ฺdistance_attr   r   r   r   6   s    zDistanceField.get_db_prep_valuec             C   s?   | d  k r d  S| j  j |  j  } | r; t | | i   S| S)N)r   r"   r	   r   )r
   r   r   r   r#   r   r   r   r   >   s    zDistanceField.from_db_valuec             C   s   d S)Nr!   r   )r
   r   r   r   r   D   s    zDistanceField.get_internal_type)	r   r   r   r    r   r   r   r   r   r   r   )r   r   r!   +   s   r!   N)r    ฺdecimalr   Zdjango.contrib.gis.measurer   r   Z	django.dbr   Z
FloatFieldr   r!   r   r   r   r   ฺ<module>   s
    