
    `f                         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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                   f    e Zd ZdZej        ZddZd Zd Z	d Z
ed             Zed	             Zd
S )
DataSourcez Wraps an OGR Data Source object.Futf-8c                 h   |rd| _         nd| _         || _        t          j                     t	          |t
          t          f          rjt          j                    }	 t          j	        t          |          | j         t          |                    }nq# t          $ r t          d|z            w xY wt	          || j                  rt	          |t          j                  r|}nt          dt          |          z            |r|| _        t          |          | _        d S t          d|z            )N   r   z%Could not open the datasource at "%s"z"Invalid data source input type: %szInvalid data source file "%s")_writeencodingr   ensure_registered
isinstancestrr   ptr_typecapiopen_dsr
   r   r   typeptrdriver)selfds_input	ds_driverwriter   r	   s         T/var/www/html/env/lib/python3.11/site-packages/django/contrib/gis/gdal/datasource.py__init__zDataSource.__init__7   sB    	DKKDK  """hd,, 	W))IX\+h"7"7eIFVFVWW  X X X $$Kh$VWWWX $-00 	WZv6
 6
 	W BB DtH~~ UVVV 	LDH ++DKKK   ?( JKKKs   5B B/c                    t          |t                    rI	 t          j        | j        t          |                    }n# t          $ r t          d|z            w xY wt          |t                    rBd|cxk    r| j	        k     rn nt          j
        | j        |          }n1t          d|z            t          dt          |          z            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   get_layer_by_namer   r
   r   
IndexErrorintlayer_count	get_layer_ptr	TypeErrorr   r   )r   indexlayers      r    __getitem__zDataSource.__getitem__Z   s   eS!! 	DN.txU9K9KLL  N N N !Du!LMMMNs## 		DE,,,,D,,,,,,ty%88 S  
 4tE{{BCCCUD!!!s	   '? Ac                     | j         S )z3Return the number of layers within the data source.)r&   r   s    r    __len__zDataSource.__len__m   s        c                 &    | j         d| j        dS )z2Return OGR GetName and Driver for the Data Source.z ())namer   r.   s    r    __str__zDataSource.__str__q   s     IIIt{{{33r0   c                 4    t          j        | j                  S )z/Return the number of layers in the data source.)r   get_layer_countr(   r.   s    r    r&   zDataSource.layer_countu   s     #DI...r0   c                 b    t          j        | j                  }t          || j        d          S )z#Return the name of the data source.T)strings_only)r   get_ds_namer(   r   r   )r   r3   s     r    r3   zDataSource.namez   s-     	**t}4@@@@r0   N)FFr   )__name__
__module____qualname____doc__r   
destroy_ds
destructorr!   r,   r/   r4   propertyr&   r3    r0   r    r   r   3   s        &&J!L !L !L !LF" " "&     4 4 4 / / X/ A A XA A Ar0   r   N)r=   ctypesr   pathlibr   django.contrib.gis.gdal.baser   django.contrib.gis.gdal.driverr   django.contrib.gis.gdal.errorr   django.contrib.gis.gdal.layerr   "django.contrib.gis.gdal.prototypesr	   r   django.utils.encodingr
   r   r   rA   r0   r    <module>rJ      s   " "F             1 1 1 1 1 1 1 1 1 1 1 1 7 7 7 7 7 7 / / / / / / 9 9 9 9 9 9 8 8 8 8 8 8 8 8KA KA KA KA KA KA KA KA KA KAr0   