
    Dvg#                     b    d Z ddlmZ ddlmZmZmZmZmZm	Z	m
Z
 ddZd Z	 	 	 	 	 	 	 	 	 dd
ZdS )z
This module is for inspecting OGR data sources and generating either
models for GeoDjango and/or mapping dictionaries for use with the
`LayerMapping` utility.
    )
DataSource)OFTDateOFTDateTime
OFTIntegerOFTInteger64OFTReal	OFTStringOFTTimegeomFc                    t          | t                    rt          |           } n%t          | t                    rnt          d          i }| |         j        D ].}|                                }|dd         dk    r|dz  }|||<   /| |         j        }|r|                                 t          |                                          ||<   |S )a  
    Given a DataSource, generate a dictionary that may be used
    for invoking the LayerMapping utility.

    Keyword Arguments:
     `geom_name` => The name of the geometry field to use for the model.

     `layer_key` => The key for specifying which layer in the DataSource to use;
       defaults to 0 (the first layer).  May be an integer index or a string
       identifier for the layer.

     `multi_geom` => Boolean (default: False) - specify as multigeometry.
    >Data source parameter must be a string or a DataSource object.N_field)	
isinstancestrr   	TypeErrorfieldslower	geom_typeto_multiupper)data_source	geom_name	layer_key
multi_geom_mappingr   mfieldgtypes           `/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/django/contrib/gis/utils/ogrinspect.pymappingr!      s     +s## 
 --	K	,	, 
L
 
 	

 H Y'. ! !"##;#gF 	",E e****,,HYO    c                  @    d                     t          | i |          S )a
  
    Given a data source (either a string or a DataSource object) and a string
    model name this function will generate a GeoDjango model.

    Usage:

    >>> from django.contrib.gis.utils import ogrinspect
    >>> ogrinspect('/path/to/shapefile.shp','NewModel')

    ...will print model definition to stout

    or put this in a Python script and use to redirect the output to a new
    model like:

    $ python generate_model.py > myapp/models.py

    # generate_model.py
    from django.contrib.gis.utils import ogrinspect
    shp_file = 'data/mapping_hacks/world_borders.shp'
    model_name = 'WorldBorders'

    print(ogrinspect(shp_file, model_name, multi_geom=True, srid=4326,
                     geom_name='shapes', blank=True))

    Required Arguments
     `datasource` => string or DataSource object to file pointer

     `model name` => string of name of new model class to create

    Optional Keyword Arguments
     `geom_name` => For specifying the model name for the Geometry Field.
       Otherwise will default to `geom`

     `layer_key` => The key for specifying which layer in the DataSource to use;
       defaults to 0 (the first layer).  May be an integer index or a string
       identifier for the layer.

     `srid` => The SRID to use for the Geometry Field.  If it can be determined,
       the SRID of the datasource is used.

     `multi_geom` => Boolean (default: False) - specify as multigeometry.

     `name_field` => String - specifies a field name to return for the
       __str__() method (which will be generated if specified).

     `imports` => Boolean (default: True) - set to False to omit the
       `from django.contrib.gis.db import models` code from the
       autogenerated models thus avoiding duplicated imports when building
       more than one model by batching ogrinspect()

     `decimal` => Boolean or sequence (default: False).  When set to True
       all generated model fields corresponding to the `OFTReal` type will
       be `DecimalField` instead of `FloatField`.  A sequence of specific
       field names to generate as `DecimalField` may also be used.

     `blank` => Boolean or sequence (default: False).  When set to True all
       generated model fields will have `blank=True`.  If the user wants to
       give specific fields to have blank, then a list/tuple of OGR field
       names may be used.

     `null` => Boolean (default: False) - When set to True all generated
       model fields will have `null=True`.  If the user wants to specify
       give specific fields to have null, then a list/tuple of OGR field
       names may be used.

    Note: Call the _ogrinspect() helper to do the heavy lifting.
    
)join_ogrinspect)argskwargss     r    
ogrinspectr)   ;   s$    H 99[$1&11222r"   NTc              #     K   t          | t                    rt          |           } n%t          | t                    rnt          d          | |         }|j        fd} ||
           ||	           ||          }fd}|rdV  dV  dV  dV  d|z  V  t          |j        |j        |j                  D ]6\  }}}}|	                                }|dd	         d
k    r|dz  } ||          }|t          u r6|	                                |v rd||||fz  V  ed|d|dd	         dV  y|t          u rd|d|dd	         dV  |t          u rd|d|dd	         dV  |t          u rd|d||dV  |t          u rd|d|dd	         dV  |t          u rd|d|dd	         dV  |t           u rd|d|dd	         dV  #t          d|d|          |j        }|r|                                 |j        }|*|j        d}n%|j        j        }|d}n|dk    rd}nd|z  }nd|z  }d|d|d|dV  |rdV  d|z  V  d	S d	S )z
    Helper routine for `ogrinspect` that generates GeoDjango models corresponding
    to the given data source.  See the `ogrinspect` docstring for more details.
    r   c                 t    t          | t          t          f          rd | D             S | rd D             S g S )Nc                 6    g | ]}|                                 S  r   .0ss     r    
<listcomp>z6_ogrinspect.<locals>.process_kwarg.<locals>.<listcomp>   s     ---!AGGII---r"   c                 6    g | ]}|                                 S r-   r.   r/   s     r    r2   z6_ogrinspect.<locals>.process_kwarg.<locals>.<listcomp>   s     222!AGGII222r"   )r   listtuple)kwarg
ogr_fieldss    r    process_kwargz"_ogrinspect.<locals>.process_kwarg   sN    edE]++ 	--u---- 	22z2222Ir"   c                     g }|                                  v r|                    d           |                                  v r|                    d           |rdd                    |          z   S dS )Nz	null=Truez
blank=Truez,  )r   appendr%   )
field_namekwlistblank_fieldsnull_fieldss     r    get_kwargs_strz#_ogrinspect.<locals>.get_kwargs_str   s~    ,,MM+&&&--MM,''' 	$))F++++2r"   zF# This is an auto-generated Django model module created by ogrinspect.z(from django.contrib.gis.db import modelsr:   zclass %s(models.Model):r   Nr   r   z@    %s = models.DecimalField(max_digits=%d, decimal_places=%d%s)z    z = models.FloatField(   )z = models.IntegerField(z = models.BigIntegerField(z = models.CharField(max_length=z = models.DateField(z = models.DateTimeField(z = models.TimeField(zUnknown field type z in zsrid=-1i  zsrid=%sz
 = models.(z%    def __str__(self): return self.%s)r   r   r   r   r   zipfield_widthsfield_precisionsfield_typesr   r   r   r   r	   r   r   r
   r   r   djangosrssrid)r   
model_namer   r   rJ   r   
name_fieldimportsdecimalblanknulllayerr8   decimal_fieldsr@   r<   width	precision
field_typer   
kwargs_strr   
geom_fieldsrid_strr>   r?   r7   s                           @@@r    r&   r&      s'     $ +s## 
 --	K	,	, 
L
 
 	
 	"EJ      -%%K =''L"]7++N	 	 	 	 	 	  VVVV8888
#j
000047E&(>@Q5 5 +R +R0
E9j !!##"##;#gF $^J//
   !!^33V	     4 ;A&&*QRR...QQQQQ:%%%8>
122OOOOO<''';A66:abb>>>RRRRR9$$$

    
 7"""5;VVZ^^^LLLLL;&&&9?ABBPPPPP7"""5;VVZ^^^LLLLL)ZZZPQQQ OE J |9 HH9>D|$$t+t#&/iiXXX
FFFF C5
BBBBBBC Cr"   )r   r   F)	r   r   NFNTFFF)__doc__django.contrib.gis.gdalr   django.contrib.gis.gdal.fieldr   r   r   r   r   r	   r
   r!   r)   r&   r-   r"   r    <module>r\      s     / . . . . .                 % % % %PD3 D3 D3T 	
	JC JC JC JC JC JCr"   