a
    1$e                     @   s   d dl Zd dlmZ d dlmZ d dlmZmZm	Z	 ej
ej
eZej
ej
eZzd dlmZ W n ey   d dlZY n0 dddZd	d
 Zdd ZdddZdS )    N)Series)GeoDataFrame)assert_geoseries_equalgeom_almost_equalsgeom_equals)mockFc                 C   s   t | tsJ t| dksJ d}|r@|D ]}|| jv s*J q*n&|D ] }| dd | jD v sDJ qDt| jj 	d
 sJ dS )zATests a GeoDataFrame that has been read in from the nybb dataset.   )BoroCodeBoroName
Shape_Leng
Shape_Areac                 s   s   | ]}|  V  qd S N)lower).0Zdfcol r   P/var/www/html/django/DPS/env/lib/python3.9/site-packages/geopandas/tests/util.py	<genexpr>$       z#validate_boro_df.<locals>.<genexpr>ZMultiPolygonN)
isinstancer   lencolumnsr   r   geometry	geom_typedropnaeqall)dfcase_sensitiver   colr   r   r   validate_boro_df   s    r   c                 C   s   | j dur| j  pdS dS )zReturn srid from `df.crs`.Nr   )ZcrsZto_epsg)r   r   r   r   get_srid(   s    
r    c              	      s   |  |j j}t| | d | dd| |j jd  f | dd|f d}| | fdd|j	d	d
D  W d   n1 s0    Y  dS )z
    Return a SpatiaLite connection containing the nybb table.

    Parameters
    ----------
    `con`: ``sqlite3.Connection``
    `df`: ``GeoDataFrame``
    zCREATE TABLE IF NOT EXISTS nybb ( ogc_fid INTEGER PRIMARY KEY, borocode INTEGER, boroname TEXT, shape_leng REAL, shape_area REAL)z$SELECT AddGeometryColumn(?, ?, ?, ?)Znybbr   zSELECT CreateSpatialIndex(?, ?)z:INSERT INTO nybb VALUES(?, ?, ?, ?, ?, GeomFromText(?, ?))c                 3   s6   | ].}d |j |j|j|j|jr&|jjnd  fV  qd S r   )r	   r
   r   r   r   wkt)r   rowsridr   r   r   M   s   
z$create_spatialite.<locals>.<genexpr>F)indexN)
r   namer    executer   r   ZiatupperZexecutemanyZ
itertuples)conr   geom_colZsql_rowr   r#   r   create_spatialite/   s$    
	


r+   geomc           
   
   C   s   |durd |}d |}nd}d}z|  }|d dj ||d}|| | D ]>\}}	d	 |}|||	d j|	d
 |	d |	d |	d f qZW |  |   n|  |   0 dS )z
    Create a nybb table in the test_geopandas PostGIS database.
    Returns a boolean indicating whether the database table was successfully
    created
    Nzgeometry(MULTIPOLYGON, {})z'ST_SetSRID(ST_GeometryFromText(%s), {})r   zST_GeometryFromText(%s)zDROP TABLE IF EXISTS nybb;zCREATE TABLE nybb (
            {geom_col}   {geom_schema},
            borocode     integer,
            boroname     varchar(40),
            shape_leng   float,
            shape_area   float
            );)r*   geom_schemaz:INSERT INTO nybb VALUES ({}, %s, %s, %s, %s
            );r	   r
   r   r   )formatcursorr'   Ziterrowsr!   closecommit)
r)   r   r$   r*   r-   Zgeom_insertr/   sqlir"   r   r   r   create_postgis\   s:    

	

r4   )F)Nr,   )os.pathosZpandasr   Z	geopandasr   Zgeopandas.testingr   r   r   pathabspathdirname__file__ZHEREZPACKAGE_DIRZunittestr   ImportErrorr   r    r+   r4   r   r   r   r   <module>   s   
-