ó
    ·RjÑ#  ã                   ód   • S r SSKJr  SSKJrJrJrJrJrJ	r	J
r
  SS jrS r         S	S jrg)
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ÚOFTTimec                 ó|  • [        U [        5      (       a  [        U 5      n O![        U [        5      (       a  O[        S5      e0 nX   R                   H%  nUR                  5       nUSS S:X  a  US-  nXTU'   M'     X   R                  nU(       a  UR                  5         [        U5      R                  5       XA'   U$ )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           ÚOD:\diplom_project\venv\Lib\site-packages\django/contrib/gis/utils/ogrinspect.pyÚmappingr       s¹   € ô �+œs×#Ñ#ä  Ó-‰Ü	�K¤×	,Ñ	,ØäØLó
ð 	
ð
 €Hð Ñ'×.Ô.ˆØ—‘“ˆØ�"�#ˆ;˜#ÓØ�gÑˆFØ �Óñ	 /ð
 Ñ"×,Ñ,€EÞØ�‰ÔÜ˜e›*×*Ñ*Ó,€HÑØ€Oó    c                  ó6   • SR                  [        U 0 UD65      $ )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 �9‰9”[ $Ð1¨&Ñ1Ó2Ð2r!   Nc              #   ó  ^^^#   • [        U [        5      (       a  [        U 5      n O![        U [        5      (       a  O[        S5      eX   nUR                  mU4S jnU" U
5      mU" U	5      mU" U5      nUU4S jnU(       a  Sv •  Sv •  Sv •  Sv •  SU-  v •  [        TUR                  UR                  UR                  5       GH  u  nnnnUR                  5       nUSS	 S
:X  a  US-  nU" U5      nU[        L a3  UR                  5       U;   a  SUUUU4-  v •  MY  SU< SUSS	 < S3v •  Mk  U[        L a  SU< SUSS	 < S3v •  M†  U[        L a  SU< SUSS	 < S3v •  M¡  U[        L a  SU< SU< U< S3v •  M¼  U[        L a  SU< SUSS	 < S3v •  M×  U[        L a  SU< SUSS	 < S3v •  Mò  U[         L a  SU< SUSS	 < S3v •  GM  [        SU< SU< 35      e   UR"                  nU(       a  UR%                  5         UR&                  nUc;  UR(                  c  SnO0UR(                  R*                  nUc  SnOUS:X  a  SnOSU-  nOSU-  nSU< SU< SU< S3v •  U(       a  Sv •  SU-  v •  g	g	7f)z›
Helper routine for `ogrinspect` that generates GeoDjango models corresponding
to the given data source.  See the `ogrinspect` docstring for more details.
r   c                 óà   >• [        U [        [        45      (       a   U  Vs/ s H  oR                  5       PM     sn$ U (       a   T Vs/ s H  oR                  5       PM     sn$ / $ s  snf s  snf )N)r   ÚlistÚtupler   )ÚkwargÚsÚ
ogr_fieldss     €r   Úprocess_kwargÚ"_ogrinspect.<locals>.process_kwarg£   sV   ø€ Ü�eœd¤E˜]×+Ñ+Ù',Ó-¢u !—G‘G–I¡uÑ-Ð-ÞÙ'1Ó2¢z !—G‘G–I¡zÑ2Ð2àˆIùò	 .ùâ2s   ¡A&ÁA+c                 óÔ   >• / nU R                  5       T;   a  UR                  S5        U R                  5       T;   a  UR                  S5        U(       a  SSR                  U5      -   $ g)Nz	null=Truez
blank=Truez, Ú )r   Úappendr$   )Ú
field_nameÚkwlistÚblank_fieldsÚnull_fieldss     €€r   Úget_kwargs_strÚ#_ogrinspect.<locals>.get_kwargs_str°   s\   ø€ ØˆØ×ÑÓ Ó,Ø�M‰M˜+Ô&Ø×ÑÓ Ó-Ø�M‰M˜,Ô'ÞØ˜$Ÿ)™) FÓ+Ñ+Ð+àr!   zF# This is an auto-generated Django model module created by ogrinspect.z(from django.contrib.gis.db import modelsr3   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   rD   r   Ú
name_fieldÚimportsÚdecimalÚblankÚnullÚlayerr0   Údecimal_fieldsr9   r5   ÚwidthÚ	precisionÚ
field_typer   Ú
kwargs_strr   Ú
geom_fieldÚsrid_strr7   r8   r/   s                           @@@r   r%   r%   �   s›  úé € ô$ �+œs×#Ñ#Ü  Ó-‰Ü	�K¤×	,Ñ	,ØäØLó
ð 	
ð Ñ"€EØ—‘€Jõñ   Ó%€KÙ  Ó'€LÙ" 7Ó+€Nö	ö ØVÒVØ8Ò8ØŠØŠà
# jÑ
0Ò0ä47Ø�E×&Ñ&¨×(>Ñ(>À×@QÑ@Q÷5Ñ0ˆ
�E˜9 jð ×!Ñ!Ó#ˆØ�"�#ˆ;˜#ÓØ�gÑˆFñ $ JÓ/ˆ
àœÒ ð ×ÑÓ! ^Ó3àVàØØØð	ñô ð 4ó ;AÀ*ÈQÈRÃ.ÐQÔQØœ:Ó%Û8>À
È1È2ÃÐOÔOØœ<Ó'Û;AÀ:ÈaÈbÃ>ÐRÔRØœ9Ó$ãÚÛðô ð
 œ7Ó"Û5;¸ZÈÈ»^ÐLÔLØœ;Ó&Û9?ÀÈAÈBÃÐPÔPØœ7Ó"Û5;¸ZÈÈ»^ÐLÕLå»ZÊÐPÓQÐQñW5ð\ �O‰O€EÞØ�‰ÔØ—‘€Jð �|Ø�9‰9ÑØ ‰Hà—9‘9—>‘>ˆDØ‰|Ø$‘Ø˜“à‘à$ tÑ+‘à˜tÑ#ˆøã&/³»XÐ
FÒFæØŠØ5¸
ÑBÓBð ùs   …I<J)Úgeomr   F)	rS   r   NFNTFFF)Ú__doc__Údjango.contrib.gis.gdalr   Údjango.contrib.gis.gdal.fieldr   r   r   r   r   r	   r
   r    r(   r%   © r!   r   Ú<module>rX      sO   ðñõ
 /÷÷ ñ ô%òPD3ðT ØØ	ØØØØØ
Ø	õJCr!   