
    g	                         d Z ddlmZ ddlmZmZ ddlmZ  G d dej                        Z	 G d dej                        Z
y	)
zR
This module holds simple classes to convert geospatial values from the
database.
    )Decimal)AreaDistance)modelsc                   <     e Zd ZdZ fdZd ZddZd Zd Z xZ	S )	AreaFieldzWrapper for Area values.c                 0    t         |           || _        y Nsuper__init__	geo_fieldselfr   	__class__s     /var/www/python.vincentserveurtest.ovh/public_html/venv/lib/python3.12/site-packages/django/contrib/gis/db/models/sql/conversion.pyr   zAreaField.__init__       "    c                 <    t        |t              st        d      |S )Nz0AreaField only accepts Area measurement objects.)
isinstancer   
ValueError)r   values     r   get_prep_valuezAreaField.get_prep_value   s    %&OPPr   c                 r    |y |j                   j                  | j                        }|rt        ||      S |S r
   )opsget_area_att_for_fieldr   getattr)r   r   
connectionpreparedarea_atts        r   get_db_prep_valuezAreaField.get_db_prep_value   s6    =>>88H+3wuh'>>r   c                     |y t        |t              rt        |      }|j                  j	                  | j
                        }|rt        di ||iS |S N )r   r   floatr   r   r   r   )r   r   
expressionr   r    s        r   from_db_valuezAreaField.from_db_value   sQ    = eW%%LE>>88H,4t(x'(?%?r   c                      y)Nr   r$   r   s    r   get_internal_typezAreaField.get_internal_type)   s    r   F
__name__
__module____qualname____doc__r   r   r!   r'   r*   __classcell__r   s   @r   r   r      s     #
?	@r   r   c                   @     e Zd ZdZ fdZ fdZddZd Zd Z xZ	S )DistanceFieldzWrapper for Distance values.c                 0    t         |           || _        y r
   r   r   s     r   r   zDistanceField.__init__0   r   r   c                 F    t        |t              r|S t        |   |      S r
   )r   r   r   r   )r   r   r   s     r   r   zDistanceField.get_prep_value4   s"    eX&Lw%e,,r   c                     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_atts        r   r!   zDistanceField.get_db_prep_value9   sK    %*L!~~@@PQ  ul++r   c                 t    |y |j                   j                  | j                        }|rt        di ||iS |S r#   )r   r8   r   r   )r   r   r&   r   r9   s        r   r'   zDistanceField.from_db_valueC   s<    =!~~@@P4@x0</0KeKr   c                      y)Nr4   r$   r)   s    r   r*   zDistanceField.get_internal_typeI   s    r   r+   r,   r2   s   @r   r4   r4   -   s     "#-
,Lr   r4   N)r0   decimalr   django.contrib.gis.measurer   r   	django.dbr   
FloatFieldr   r4   r$   r   r   <module>r@      s:   
  5 !! BF%% r   