U
    ‰d%  ã                   @   sR   d dl Z d dlmZmZ d dlmZ d dlmZ G dd„ deƒZG dd„ dƒZ	dS )	é    N)ÚCoordTransformÚSpatialReference©ÚSerializerDoesNotExist)Ú
Serializerc                       sP   e Zd ZdZ‡ fdd„Zdd„ Zdd„ Z‡ fdd	„Zd
d„ Z‡ fdd„Z	‡  Z
S )r   z<
    Convert a queryset to GeoJSON, http://geojson.org/
    c                    s^   t ƒ  ¡  | j dd ¡| _| j dd¡| _| jd k	rZ| jd k	rZ| j| jkrZ| j| jf•| _d S )NÚgeometry_fieldÚsridiæ  )ÚsuperÚ_init_optionsZjson_kwargsÚpopr   r   Úselected_fields©Úself©Ú	__class__© úJ/tmp/pip-unpacked-wheel-7vj2equ7/django/contrib/gis/serializers/geojson.pyr
      s    
ÿþ
ýzSerializer._init_optionsc                 C   s$   |   ¡  i | _| j d| j ¡ d S )Nzg{"type": "FeatureCollection", "crs": {"type": "name", "properties": {"name": "EPSG:%d"}}, "features": [)r
   Ú_ctsÚstreamÚwriter   r   r   r   r   Ústart_serialization   s    þÿzSerializer.start_serializationc                 C   s   | j  d¡ d S )Nz]})r   r   r   r   r   r   Úend_serialization!   s    zSerializer.end_serializationc                    sD   t ƒ  |¡ d | _| jd kr@|jjD ]}t|dƒr$|j| _ q@q$d S )NZ	geom_type)r	   Ústart_objectÚ	_geometryr   Ú_metaÚfieldsÚhasattrÚname©r   ÚobjÚfieldr   r   r   r   $   s    

zSerializer.start_objectc                 C   s¼   d| j dœ}| jd ks d| jkrBd|d krB|jj |¡|d d< | jr°| jj| jkrœ| jj| jkr†t| jƒ}t	| jj
|ƒ| j| jj< | j | j| jj ¡ t | jj¡|d< nd |d< |S )NZFeature)ÚtypeÚ
propertiesÚpkr"   Zgeometry)Ú_currentr   r   r#   Zvalue_to_stringr   r   r   r   r   ÚsrsZ	transformÚjsonÚloadsZgeojson)r   r   Údatar%   r   r   r   Úget_dump_object.   s,    þÿÿ
þ
 ÿzSerializer.get_dump_objectc                    s,   |j | jkr| |¡| _ntƒ  ||¡ d S )N)r   r   Zvalue_from_objectr   r	   Úhandle_fieldr   r   r   r   r*   F   s    zSerializer.handle_field)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   r   r   r)   r*   Ú__classcell__r   r   r   r   r      s   	
r   c                   @   s   e Zd Zdd„ ZdS )ÚDeserializerc                 O   s   t dƒ‚d S )Nz*geojson is a serialization-only serializerr   )r   ÚargsÚkwargsr   r   r   Ú__init__N   s    zDeserializer.__init__N)r+   r,   r-   r3   r   r   r   r   r0   M   s   r0   )
r&   Zdjango.contrib.gis.gdalr   r   Zdjango.core.serializers.baser   Zdjango.core.serializers.jsonr   ZJSONSerializerr0   r   r   r   r   Ú<module>   s
   E