3
(h                 @   s   d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 ddl
mZ ddl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 )a  
 DataSource is a wrapper for the OGR Data Source object, which provides
 an interface for reading vector geometry data from many different file
 formats (including ESRI shapefiles).

 When instantiating a DataSource object, use the filename of a
 GDAL-supported data source.  For example, a SHP file or a
 TIGER/Line file from the government.

 The ds_driver keyword is used internally when a ctypes pointer
 is passed in directly.

 Example:
  ds = DataSource('/home/foo/bar.shp')
  for layer in ds:
      for feature in layer:
          # Getting the geometry for the feature.
          g = feature.geom

          # Getting the 'description' field for the feature.
          desc = feature['description']

          # We can also increment through all of the fields
          #  attached to this feature.
          for field in feature:
              # Get the name of the field (e.g. 'description')
              nm = field.name

              # Get the type (integer) of the field, e.g. 0 => OFTInteger
              t = field.type

              # Returns the value the field; OFTIntegers return ints,
              #  OFTReal returns floats, all else returns string.
              val = field.value
    )byref)GDALBase)Driver)GDALExceptionOGRIndexError)Layer)ds)six)force_bytes
force_text)rangec               @   sZ   e Zd ZdZd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dS )
DataSourcez Wraps an OGR Data Source object.Futf-8c             C   s   |rd| _ nd| _ || _tj  t|tjrttj }ytj	t
|| j t|}W q tk
rp   td| Y qX n.t|| jrt|tjr|}ntdt| |r|| _t|| _ntd| d S )N   r   z%Could not open the datasource at "%s"z"Invalid data source input type: %szInvalid data source file "%s")_writeencodingr   Zensure_registered
isinstancer	   string_typesZptr_typecapiZopen_dsr
   r   r   typeptrdriver)selfZds_inputZ	ds_driverwriter   r    r   F/tmp/pip-install-q3hcpn_q/Django/django/contrib/gis/gdal/datasource.py__init__7   s$    zDataSource.__init__c             C   s.   yt j| j W n ttfk
r(   Y nX dS )z#Destroys this DataStructure object.N)r   Z
destroy_ds_ptrAttributeError	TypeError)r   r   r   r   __del__X   s    zDataSource.__del__c             c   s"   xt | jD ]}| | V  qW dS )z6Allows for iteration over the layers in a data source.N)r   layer_count)r   ir   r   r   __iter___   s    zDataSource.__iter__c             C   s~   t |tjr0tj| jt|}|sttd| nDt |trd|dk sL|| j	krTtdtj
| j|}ntdt| t|| S )z@Allows use of the index [] operator to get a layer at the index.z"invalid OGR Layer name given: "%s"r   zindex out of rangezInvalid index type: %s)r   r	   r   r   Zget_layer_by_namer   r
   r   intr!   Z	get_layerr   r   r   r   )r   indexlr   r   r   __getitem__d   s    
zDataSource.__getitem__c             C   s   | j S )z4Returns the number of layers within the data source.)r!   )r   r   r   r   __len__r   s    zDataSource.__len__c             C   s   d| j t| jf S )z3Returns OGR GetName and Driver for the Data Source.z%s (%s))namestrr   )r   r   r   r   __str__v   s    zDataSource.__str__c             C   s   t j| jS )z0Returns the number of layers in the data source.)r   Zget_layer_countr   )r   r   r   r   r!   z   s    zDataSource.layer_countc             C   s   t j| j}t|| jddS )z$Returns the name of the data source.T)Zstrings_only)r   Zget_ds_namer   r   r   )r   r)   r   r   r   r)      s    zDataSource.nameN)FFr   )__name__
__module____qualname____doc__r   r    r#   r'   r(   r+   propertyr!   r)   r   r   r   r   r   4   s   
!r   N)r/   ctypesr   Zdjango.contrib.gis.gdal.baser   Zdjango.contrib.gis.gdal.driverr   Zdjango.contrib.gis.gdal.errorr   r   Zdjango.contrib.gis.gdal.layerr   Z"django.contrib.gis.gdal.prototypesr   r   Zdjango.utilsr	   Zdjango.utils.encodingr
   r   Zdjango.utils.six.movesr   r   r   r   r   r   <module>#   s   