3
g                 @   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	m
Z
 ddlmZ ddlmZ dd	lmZ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)Path)GDALBase)Driver)GDALException)Layer)ds)force_bytes	force_strc               @   sP   e Zd ZdZejZd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tfrvtj }ytj	t
|| j t|}W q tk
rr   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
isinstancestrr   Zptr_typecapiZopen_dsr	   r   r   typeptrdriver)selfZds_inputZ	ds_driverwriter   r    r   `/var/www/tester-filtro-web/env/lib/python3.6/site-packages/django/contrib/gis/gdal/datasource.py__init__7   s$    zDataSource.__init__c             C   s   t |trDytj| jt|}W q tk
r@   td| Y qX nRt |trd|  kob| j	k n  rxtj
| j|}qtd| 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 range when accessing layers in a datasource: %s.zInvalid index type: %s)r   r   r   Zget_layer_by_namer   r	   r   
IndexErrorintlayer_countZ	get_layer_ptr	TypeErrorr   r   )r   indexZlayerr   r   r   __getitem__X   s    

zDataSource.__getitem__c             C   s   | j S )z3Return the number of layers within the data source.)r   )r   r   r   r   __len__h   s    zDataSource.__len__c             C   s   d| j | jf S )z2Return OGR GetName and Driver for the Data Source.z%s (%s))namer   )r   r   r   r   __str__l   s    zDataSource.__str__c             C   s   t j| jS )z/Return the number of layers in the data source.)r   Zget_layer_countr   )r   r   r   r   r   p   s    zDataSource.layer_countc             C   s   t j| j}t|| jddS )z#Return the name of the data source.T)Zstrings_only)r   Zget_ds_namer   r
   r   )r   r#   r   r   r   r#   u   s    zDataSource.nameN)FFr   )__name__
__module____qualname____doc__r   Z
destroy_dsZ
destructorr   r!   r"   r$   propertyr   r#   r   r   r   r   r   3   s   
!r   N)r(   ctypesr   pathlibr   Zdjango.contrib.gis.gdal.baser   Zdjango.contrib.gis.gdal.driverr   Zdjango.contrib.gis.gdal.errorr   Zdjango.contrib.gis.gdal.layerr   Z"django.contrib.gis.gdal.prototypesr   r   Zdjango.utils.encodingr	   r
   r   r   r   r   r   <module>#   s   