3
(h                 @   s   d dl mZ d dlmZmZ d dlmZ d dlmZm	Z	 d dl
mZmZ d dlmZ d dlmZmZ d dlmZ G d	d
 d
eZdS )    )GDALBase)GDALExceptionOGRIndexError)Field)OGRGeometryOGRGeomType)dsgeom)six)force_bytes
force_text)rangec               @   s   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Z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edd Zedd Zdd Zd d! Zd"S )#Featureza
    This class that wraps an OGR Feature, needs to be instantiated
    from a Layer object.
    c             C   s   |st d|| _|| _dS )zJ
        Initializes Feature from a pointer and its Layer object.
        z1Cannot create OGR Feature, invalid pointer given.N)r   ptr_layer)selfZfeatZlayer r   C/tmp/pip-install-q3hcpn_q/Django/django/contrib/gis/gdal/feature.py__init__   s    zFeature.__init__c             C   s.   yt j| j W n ttfk
r(   Y nX dS )z$Releases a reference to this object.N)capiZdestroy_feature_ptrAttributeError	TypeError)r   r   r   r   __del__   s    zFeature.__del__c             C   s@   t |tjr| j|}n|dk s*|| jkr2td|}t| |S )a/  
        Gets the Field object at the specified index, which may be either
        an integer or the Field's string label.  Note that the Field object
        is not the field's _value_ -- use the `get` method instead to
        retrieve the value (e.g. an integer) instead of a Field instance.
        r   zindex out of range)
isinstancer
   string_typesindex
num_fieldsr   r   )r   r   ir   r   r   __getitem__%   s    zFeature.__getitem__c             c   s"   xt | jD ]}| | V  qW dS )z(Iterates over each field in the Feature.N)r   r   )r   r   r   r   r   __iter__4   s    zFeature.__iter__c             C   s   | j S )z,Returns the count of fields in this feature.)r   )r   r   r   r   __len__9   s    zFeature.__len__c             C   s   d| j | jf S )zThe string name of the feature.zFeature FID %d in Layer<%s>)fid
layer_name)r   r   r   r   __str__=   s    zFeature.__str__c             C   s   t tj| j|jS )z)Does equivalence testing on the features.)boolr   Zfeature_equalr   r   )r   otherr   r   r   __eq__A   s    zFeature.__eq__c             C   s
   | j jjS )N)r   Z_dsencoding)r   r   r   r   r(   F   s    zFeature.encodingc             C   s   t j| jS )zReturns the feature identifier.)r   Zget_fidr   )r   r   r   r   r"   J   s    zFeature.fidc             C   s   t j| jj}t|| jddS )z.Returns the name of the layer for the feature.T)Zstrings_only)r   Zget_feat_namer   _ldefnr   r(   )r   namer   r   r   r#   O   s    zFeature.layer_namec             C   s   t j| jS )z,Returns the number of fields in the Feature.)r   Zget_feat_field_countr   )r   r   r   r   r   U   s    zFeature.num_fieldsc                s    fddt  jD S )z(Returns a list of fields in the Feature.c                s"   g | ]}t jt j jj|qS r   )r   Zget_field_nameZget_field_defnr   r)   ).0r   )r   r   r   
<listcomp>]   s   z"Feature.fields.<locals>.<listcomp>)r   r   )r   r   )r   r   fieldsZ   s    
zFeature.fieldsc             C   s   t j| j}ttj|S )z*Returns the OGR Geometry for this Feature.)r   Zget_feat_geom_refr   r   geom_apiZ
clone_geom)r   Zgeom_ptrr   r   r   r	   `   s    zFeature.geomc             C   s   t tj| jjS )z.Returns the OGR Geometry Type for this Feture.)r   r   Zget_fd_geom_typer   r)   )r   r   r   r   	geom_typeg   s    zFeature.geom_typec             C   s   t |d|}| | jS )z
        Returns the value of the field, instead of an instance of the Field
        object.  May take a string of the field name or a Field object as
        parameters.
        r*   )getattrvalue)r   field
field_namer   r   r   getm   s    zFeature.getc             C   s*   t j| jt|}|dk r&td| |S )z*Returns the index of the given field name.r   z"invalid OFT field name given: "%s")r   Zget_field_indexr   r   r   )r   r3   r   r   r   r   r   v   s    zFeature.indexN)__name__
__module____qualname____doc__r   r   r   r    r!   r$   r'   propertyr(   r"   r#   r   r-   r	   r/   r4   r   r   r   r   r   r      s"   		r   N)Zdjango.contrib.gis.gdal.baser   Zdjango.contrib.gis.gdal.errorr   r   Zdjango.contrib.gis.gdal.fieldr   Z"django.contrib.gis.gdal.geometriesr   r   Z"django.contrib.gis.gdal.prototypesr   r   r	   r.   Zdjango.utilsr
   Zdjango.utils.encodingr   r   Zdjango.utils.six.movesr   r   r   r   r   r   <module>   s   