From fcb6ad207d9e57d58b882bc9c510fa0a179f75a8 Mon Sep 17 00:00:00 2001 From: Pieter Roggemans Date: Fri, 10 Mar 2023 16:47:02 +0100 Subject: [PATCH] TST: Add tests for to_file/read_file for spatialite format (#2829) Co-authored-by: Joris Van den Bossche --- .../io/tests/test_file_geom_types_drivers.py | 33 +++++++++++++++++-- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/geopandas/io/tests/test_file_geom_types_drivers.py b/geopandas/io/tests/test_file_geom_types_drivers.py index 457e205..fc873da 100644 --- a/geopandas/io/tests/test_file_geom_types_drivers.py +++ b/geopandas/io/tests/test_file_geom_types_drivers.py @@ -244,7 +244,7 @@ def geodataframe(request): return request.param -@pytest.fixture(params=["GeoJSON", "ESRI Shapefile", "GPKG"]) +@pytest.fixture(params=["GeoJSON", "ESRI Shapefile", "GPKG", "SQLite"]) def ogr_driver(request): return request.param @@ -261,15 +261,42 @@ def engine(request): def test_to_file_roundtrip(tmpdir, geodataframe, ogr_driver, engine): output_file = os.path.join(str(tmpdir), "output_file") + write_kwargs = {} + if ogr_driver == "SQLite": + write_kwargs["spatialite"] = True + + # This if statement can be removed once minimal fiona version >= 1.8.20 + if engine == "fiona": + import fiona + from packaging.version import Version + + if Version(fiona.__version__) < Version("1.8.20"): + pytest.skip("SQLite driver only available from version 1.8.20") + + # If only 3D Points, geometry_type needs to be specified for spatialite at the + # moment. This if can be removed once the following PR is released: + # https://github.com/geopandas/pyogrio/pull/223 + if ( + engine == "pyogrio" + and len(geodataframe == 2) + and geodataframe.geometry[0] is None + and geodataframe.geometry[1] is not None + and geodataframe.geometry[1].has_z + ): + write_kwargs["geometry_type"] = "Point Z" expected_error = _expected_error_on(geodataframe, ogr_driver) if expected_error: with pytest.raises( RuntimeError, match="Failed to write record|Could not add feature to layer" ): - geodataframe.to_file(output_file, driver=ogr_driver, engine=engine) + geodataframe.to_file( + output_file, driver=ogr_driver, engine=engine, **write_kwargs + ) else: - geodataframe.to_file(output_file, driver=ogr_driver, engine=engine) + geodataframe.to_file( + output_file, driver=ogr_driver, engine=engine, **write_kwargs + ) reloaded = geopandas.read_file(output_file, engine=engine)