a
    1$e,                     @   s  d Z ddlmZ ddlmZ ddlmZ ddlmZ ddl	Z	ddl
mZ ddlmZ dd	lmZ G d
d deZejjdejjdejjdejjdejjdejjdejjdejjdiZi eejjdejjdejjdejjdejjdej jdej!jdej"jdej#jdi	Z$G dd deZ%G dd  d Z&G d!d" d"e%Z'G d#d$ d$Z(G d%d& d&e%Z)G d'd( d(e%Z*G d)d* d*eZ+d+d, Z,d-d. Z-dS )/zFiona data model    )hexlify)MutableMapping)OrderedDict)EnumN)JSONEncoder)warn)FionaDeprecationWarningc                   @   s(  e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZdZ dZ!d Z"d!Z#d"Z$d#Z%d$Z&d%Z'd&Z(d'Z)d(Z*d)Z+d*Z,d+Z-d,Z.d-Z/d.Z0d/Z1d0Z2d1Z3d2Z4d3Z5d4Z6d5Z7d6Z8d7Z9d8Z:d9Z;d:Z<d;Z=d<Z>d=Z?d>Z@d?ZAd@ZBdAZCdBZDdCZEdDZFdEZGdFZHdGZIdHS )IOGRGeometryTyper                           	   
                        d   e   i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  i  l       l       l       l       l       l       l       N)J__name__
__module____qualname__UnknownPoint
LineStringPolygon
MultiPointMultiLineStringMultiPolygonGeometryCollectionZCircularStringZCompoundCurveZCurvePolygonZ
MultiCurveZMultiSurfaceZCurveZSurfaceZPolyhedralSurfaceZTINZTriangleNONE
LinearRingZCircularStringZZCompoundCurveZZCurvePolygonZZMultiCurveZZMultiSurfaceZZCurveZZSurfaceZZPolyhedralSurfaceZZTINZZ	TriangleZZPointMZLineStringMZPolygonMZMultiPointMZMultiLineStringMZMultiPolygonMZGeometryCollectionMZCircularStringMZCompoundCurveMZCurvePolygonMZMultiCurveMZMultiSurfaceMZCurveMZSurfaceMZPolyhedralSurfaceMZTINMZ	TriangleMZPointZMZLineStringZMZ	PolygonZMZMultiPointZMZMultiLineStringZMZMultiPolygonZMZGeometryCollectionZMZCircularStringZMZCompoundCurveZMZCurvePolygonZMZMultiCurveZMZMultiSurfaceZMZCurveZMZ	SurfaceZMZPolyhedralSurfaceZMZTINZMZ
TriangleZMPoint25DLineString25D
Polygon25DMultiPoint25DMultiLineString25DMultiPolygon25DGeometryCollection25D r1   r1   G/var/www/html/django/DPS/env/lib/python3.9/site-packages/fiona/model.pyr	      s   r	   r    r!   r"   r#   r$   r%   r&   r'   Noner)   z3D Pointz3D LineStringz
3D Polygonz3D MultiPointz3D MultiLineStringz3D MultiPolygonz3D GeometryCollectionc                   @   sT   e Zd ZdZg Zdd Zdd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd ZdS )Objectau  Base class for CRS, geometry, and feature objects

    In Fiona 2.0, the implementation of those objects will change.  They
    will no longer be dicts or derive from dict, and will lose some
    features like mutability and default JSON serialization.

    Object will be used for these objects in Fiona 1.9. This class warns
    about future deprecation of features.
    c                 K   s   t f i || _d S N)r   _dataselfkwdsr1   r1   r2   __init__   s    zObject.__init__c                    s    fdd j D S )Nc                    s"   i | ]}|d ur|t  j|qS r5   )getattr	_delegate).0kr8   r1   r2   
<dictcomp>   s   z!Object._props.<locals>.<dictcomp>)_delegated_propertiesr?   r1   r?   r2   _props   s    
zObject._propsc                 C   s"   |   }|jf i | j || S r5   )rB   updater6   )r8   itempropsr1   r1   r2   __getitem__   s    zObject.__getitem__c                 C   s   |   }tt|t| jS r5   )rB   	itertoolschainiterr6   r8   rE   r1   r1   r2   __iter__   s    zObject.__iter__c                 C   s   |   }t|t| j S r5   )rB   lenr6   rJ   r1   r1   r2   __len__   s    zObject.__len__c                 C   s6   t dtdd || jv r(t| j|| n
|| j|< d S Nzkinstances of this class -- CRS, geometry, and feature objects -- will become immutable in fiona version 2.0r   )
stacklevelr   r   rA   setattrr<   r6   )r8   keyvaluer1   r1   r2   __setitem__   s    
zObject.__setitem__c                 C   s4   t dtdd || jv r(t| j|d  n| j|= d S rN   rP   )r8   rR   r1   r1   r2   __delitem__   s    
zObject.__delitem__c                 C   s   t f i | t f i |kS r5   )dictr8   otherr1   r1   r2   __eq__   s    zObject.__eq__N)r   r   r   __doc__rA   r:   rB   rF   rK   rM   rT   rU   rY   r1   r1   r1   r2   r4   r   s   
r4   c                   @   s   e Zd ZdddZdS )	_GeometryNc                 C   s   || _ || _|| _d S r5   coordinatestype
geometries)r8   r]   r^   r_   r1   r1   r2   r:      s    z_Geometry.__init__)NNNr   r   r   r:   r1   r1   r1   r2   r[      s   r[   c                       sh   e Zd ZdZg dZd fdd	ZedddZedd	 Z	ed
d Z
edd Zedd Z  ZS )GeometryzA GeoJSON-like geometry

    Notes
    -----
    Delegates coordinates and type properties to an instance of
    _Geometry, which will become an extension class in Fiona 2.0.

    r\   Nc                    s&   t |||d| _t jf i | d S )Nr\   )r[   r<   superr:   )r8   r]   r^   r_   data	__class__r1   r2   r:      s    zGeometry.__init__c                 K   s   |d ur$t t|d|}|| n|}d|v rx|d dkrx|dd }|dd }tf ddd |dD d|S |dd }tf |dd |dg d	|S d S )
N__geo_interface__r_   r^   r'   r]   c                 S   s   g | ]}t |qS r1   )ra   	from_dict)r=   partr1   r1   r2   
<listcomp>   s   z&Geometry.from_dict.<locals>.<listcomp>)r^   r_   )r^   r]   )rV   r;   rC   popra   )clsobkwargsrc   _r1   r1   r2   rg      s,    

zGeometry.from_dictc                 C   s   | j jS )zVThe geometry's coordinates

        Returns
        -------
        Sequence

        )r<   r]   r?   r1   r1   r2   r]      s    	zGeometry.coordinatesc                 C   s   | j jS )zJThe geometry's type

        Returns
        -------
        str

        )r<   r^   r?   r1   r1   r2   r^      s    	zGeometry.typec                 C   s   | j jS )zRA collection's geometries.

        Returns
        -------
        list

        )r<   r_   r?   r1   r1   r2   r_      s    	zGeometry.geometriesc                 C   s   t  | S r5   ObjectEncoderdefaultr?   r1   r1   r2   rf     s    zGeometry.__geo_interface__)NNN)N)r   r   r   rZ   rA   r:   classmethodrg   propertyr]   r^   r_   rf   __classcell__r1   r1   rd   r2   ra      s   	





ra   c                   @   s   e Zd ZdddZdS )_FeatureNc                 C   s   || _ || _|| _d S r5   geometryid
properties)r8   rw   rx   ry   r1   r1   r2   r:   
  s    z_Feature.__init__)NNNr`   r1   r1   r1   r2   ru   	  s   ru   c                       s|   e Zd ZdZg dZd fdd	ZedddZdd	 Ze	d
d Z
e	dd Ze	dd Ze	dd Ze	dd Z  ZS )FeaturezA GeoJSON-like feature

    Notes
    -----
    Delegates geometry and properties to an instance of _Feature, which
    will become an extension class in Fiona 2.0.

    rv   Nc                    s4   |d u rt  }t|||d| _t jf i | d S )Nrv   )
Propertiesru   r<   rb   r:   )r8   rw   rx   ry   rc   rd   r1   r2   r:     s    zFeature.__init__c           	      K   s   |d ur$t t|d|}|| n|}|dd }t|trD|}n|d urVt|nd }|dd }t|trv|}n|d urtf i |nd }|dd }tf |||d|S )Nrf   rw   ry   rx   rv   )	rV   r;   rC   rj   
isinstancera   rg   r{   rz   )	rk   rl   rm   rc   Z	geom_dataZgeomZ
props_datarE   Zfidr1   r1   r2   rg   "  s    

zFeature.from_dictc                 C   s$   | j |j ko"| j|jko"| j|jkS r5   rv   rW   r1   r1   r2   rY   :  s
    

zFeature.__eq__c                 C   s   | j jS )zYThe feature's geometry object

        Returns
        -------
        Geometry

        )r<   rw   r?   r1   r1   r2   rw   A  s    	zFeature.geometryc                 C   s   | j jS )zIThe feature's id

        Returns
        ------
        object

        )r<   rx   r?   r1   r1   r2   rx   L  s    	z
Feature.idc                 C   s   | j jS )zRThe feature's properties

        Returns
        -------
        object

        )r<   ry   r?   r1   r1   r2   ry   W  s    	zFeature.propertiesc                 C   s   dS )zIThe Feature's type

        Returns
        -------
        str

        rz   r1   r?   r1   r1   r2   r^   b  s    	zFeature.typec                 C   s   t  | S r5   ro   r?   r1   r1   r2   rf   m  s    zFeature.__geo_interface__)NNN)N)r   r   r   rZ   rA   r:   rr   rg   rY   rs   rw   rx   ry   r^   rf   rt   r1   r1   rd   r2   rz     s    	







rz   c                       s.   e Zd ZdZ fddZedddZ  ZS )r{   z#A GeoJSON-like feature's propertiesc                    s   t  jf i | d S r5   )rb   r:   r7   rd   r1   r2   r:   u  s    zProperties.__init__Nc                 K   s$   |rt f i ||S t f i |S r5   )r{   )rk   mappingrm   r1   r1   r2   rg   x  s    zProperties.from_dict)N)r   r   r   rZ   r:   rr   rg   rt   r1   r1   rd   r2   r{   r  s   r{   c                   @   s   e Zd ZdZdd ZdS )rp   z*Encodes Geometry, Feature, and Properties.c                    s   t |ttfr$ fdd| D S t |trvt|}d|d< |jd urX |j|d< |jd urr |j|d< |S t |t	rt
|S |S d S )Nc                    s$   i | ]\}}|d ur|  |qS r5   )rq   )r=   r>   vr?   r1   r2   r@         z)ObjectEncoder.default.<locals>.<dictcomp>rz   r^   rw   ry   )r|   ra   r{   itemsrz   rV   rw   rq   ry   bytesr   )r8   oZo_dictr1   r?   r2   rq     s    



zObjectEncoder.defaultN)r   r   r   rZ   rq   r1   r1   r1   r2   rp     s   rp   c                 C   s^   t | tr| S | d| } | dd}|dks6d| v r@t| S |t v rVt| S | S dS )zA json.loads object_hook

    Parameters
    ----------
    obj : dict
        A decoded dict.

    Returns
    -------
    Feature, Geometry, or dict

    rf   r^   Nrz   rw   )r|   r4   getrz   rg   
_GEO_TYPESvaluesra   )obj_typer1   r1   r2   decode_object  s    


r   c                 C   s0   zt  | }W n ty&   |  Y S 0 |S dS )zConverts an object to a dictN)rp   rq   	TypeError)valr   r1   r1   r2   to_dict  s
    
r   ).rZ   binasciir   collections.abcr   collectionsr   enumr   rG   jsonr   warningsr   Zfiona.errorsr   r	   r    rS   r!   r"   r#   r$   r%   r&   r'   r   r(   r)   r*   r+   r,   r-   r.   r/   r0   ZGEOMETRY_TYPESr4   r[   ra   ru   rz   r{   rp   r   r   r1   r1   r1   r2   <module>   sP   L>Rb