o
    "7h	                     @   sT   d Z ddlmZ ddlmZmZ ddlmZ G dd dejZ	G dd dejZ
d	S )
zR
This module holds simple classes to convert geospatial values from the
database.
    )Decimal)AreaDistance)modelsc                       sB   e Zd ZdZ fddZdd ZdddZd	d
 Zdd Z  Z	S )	AreaFieldzWrapper for Area values.c                       t    || _d S Nsuper__init__	geo_fieldselfr   	__class__ /var/www/epreuve.sigeris.cm/public_html/epreuve/venv/lib/python3.10/site-packages/django/contrib/gis/db/models/sql/conversion.pyr         

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 u rd S |j | j}|rt||S |S r   )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   sF   |d u rd S t |trt|}|j| j}|r!tdi ||iS |S Nr   )r   r   floatr   r   r   r   )r   r   
expressionr   r   r   r   r   from_db_value   s   
zAreaField.from_db_valuec                 C      dS )Nr   r   r   r   r   r   get_internal_type)      zAreaField.get_internal_typeF
__name__
__module____qualname____doc__r   r   r   r#   r&   __classcell__r   r   r   r   r      s    
r   c                       sF   e Zd ZdZ fddZ fddZdddZd	d
 Zdd Z  Z	S )DistanceFieldzWrapper for Distance values.c                    r   r   r	   r   r   r   r   r   0   r   zDistanceField.__init__c                    s   t |tr|S t |S r   )r   r   r
   r   r   r   r   r   r   4   s   
zDistanceField.get_prep_valueFc                 C   s2   t |ts|S |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   9   s   

zDistanceField.get_db_prep_valuec                 C   s4   |d u rd S |j | j}|rtdi ||iS |S r    )r   r0   r   r   )r   r   r"   r   r1   r   r   r   r#   C   s   zDistanceField.from_db_valuec                 C   r$   )Nr/   r   r%   r   r   r   r&   I   r'   zDistanceField.get_internal_typer(   r)   r   r   r   r   r/   -   s    

r/   N)r-   decimalr   django.contrib.gis.measurer   r   	django.dbr   
FloatFieldr   r/   r   r   r   r   <module>   s    !