
vÅÏ^Š  ã               @   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 m Z Gd	 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)ÚLayer)Úds)Úforce_bytesÚ	force_strc               @   s|   e  Z d  Z d Z e j Z d d 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.Fzutf-8c             C   s  | r d |  _  n	 d |  _  | |  _ t j ƒ  t | t ƒ r™ t j ƒ  } y( t j t	 | ƒ |  j  t
 | ƒ ƒ } WqÜ t k
 r• t d | ƒ ‚ YqÜ XnC t | |  j ƒ rÆ t | 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ÚstrZptr_typeÚcapiZopen_dsr   r   r   ÚtypeÚptrÚdriver)ÚselfZds_inputZ	ds_driverÚwriter   r   © r   úD/tmp/pip-build-8lau8j11/django/django/contrib/gis/gdal/datasource.pyÚ__init__6   s$    		
($		zDataSource.__init__c             C   sÒ   t  | t ƒ rV y t j |  j t | ƒ ƒ } WqÅ t k
 rR t d | ƒ ‚ YqÅ Xno t  | t ƒ r¯ d | k o |  j	 k  n rœ t j
 |  j | ƒ } qÅ t 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__W   s    zDataSource.__getitem__c             C   s   |  j  S)z3Return the number of layers within the data source.)r   )r   r   r   r   Ú__len__g   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__k   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   o   s    zDataSource.layer_countc             C   s(   t  j |  j ƒ } t | |  j d d ƒS)z#Return the name of the data source.Zstrings_onlyT)r   Zget_ds_namer   r	   r   )r   r!   r   r   r   r!   t   s    zDataSource.nameN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Z
destroy_dsZ
destructorr   r   r    r"   Úpropertyr   r!   r   r   r   r   r
   2   s   	!r
   N)r&   Úctypesr   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   