From 412a441118616929c6918864a948f5b72f688e35 Mon Sep 17 00:00:00 2001 From: Brendan Ward Date: Fri, 30 Aug 2024 08:53:12 -0700 Subject: [PATCH] TST: Replace test datasets with pyogrio-generated files where possible (#441) --- pyogrio/tests/conftest.py | 159 +++++++++++++++- pyogrio/tests/fixtures/README.md | 45 +++-- pyogrio/tests/fixtures/curve.gpkg | Bin 0 -> 98304 bytes ...st_multisurface.gpkg => curvepolygon.gpkg} | Bin 98304 -> 98304 bytes pyogrio/tests/fixtures/line_zm.gpkg | Bin 0 -> 98304 bytes pyogrio/tests/fixtures/multisurface.gpkg | Bin 0 -> 98304 bytes .../fixtures/poly_not_enough_points.shp.zip | Bin 2402 -> 0 bytes pyogrio/tests/fixtures/test_datetime.geojson | 7 - .../tests/fixtures/test_datetime_tz.geojson | 8 - pyogrio/tests/fixtures/test_fgdb.gdb.zip | Bin 101524 -> 0 bytes pyogrio/tests/fixtures/test_nested.geojson | 18 -- .../fixtures/test_ogr_types_list.geojson | 12 -- pyogrio/tests/test_arrow.py | 105 +++++++++-- pyogrio/tests/test_core.py | 35 ++-- pyogrio/tests/test_geopandas_io.py | 178 +++++++++++------- pyogrio/tests/test_raw_io.py | 92 +++++++-- 16 files changed, 489 insertions(+), 170 deletions(-) create mode 100644 pyogrio/tests/fixtures/curve.gpkg rename pyogrio/tests/fixtures/{test_multisurface.gpkg => curvepolygon.gpkg} (90%) create mode 100644 pyogrio/tests/fixtures/line_zm.gpkg create mode 100644 pyogrio/tests/fixtures/multisurface.gpkg delete mode 100644 pyogrio/tests/fixtures/poly_not_enough_points.shp.zip delete mode 100644 pyogrio/tests/fixtures/test_datetime.geojson delete mode 100644 pyogrio/tests/fixtures/test_datetime_tz.geojson delete mode 100644 pyogrio/tests/fixtures/test_fgdb.gdb.zip delete mode 100644 pyogrio/tests/fixtures/test_nested.geojson delete mode 100644 pyogrio/tests/fixtures/test_ogr_types_list.geojson diff --git a/pyogrio/tests/conftest.py b/pyogrio/tests/conftest.py index 73b62cd1..262bc1a3 100644 --- a/pyogrio/tests/conftest.py +++ b/pyogrio/tests/conftest.py @@ -2,6 +2,8 @@ from pathlib import Path from zipfile import ZIP_DEFLATED, ZipFile +import numpy as np + from pyogrio import ( __gdal_version_string__, __version__, @@ -126,28 +128,165 @@ def naturalearth_lowres_vsi(tmp_path, naturalearth_lowres): @pytest.fixture(scope="session") -def test_fgdb_vsi(): - return f"/vsizip/{_data_dir}/test_fgdb.gdb.zip" +def line_zm_file(): + return _data_dir / "line_zm.gpkg" @pytest.fixture(scope="session") -def test_gpkg_nulls(): - return _data_dir / "test_gpkg_nulls.gpkg" +def curve_file(): + return _data_dir / "curve.gpkg" @pytest.fixture(scope="session") -def test_ogr_types_list(): - return _data_dir / "test_ogr_types_list.geojson" +def curve_polygon_file(): + return _data_dir / "curvepolygon.gpkg" @pytest.fixture(scope="session") -def test_datetime(): - return _data_dir / "test_datetime.geojson" +def multisurface_file(): + return _data_dir / "multisurface.gpkg" @pytest.fixture(scope="session") -def test_datetime_tz(): - return _data_dir / "test_datetime_tz.geojson" +def test_gpkg_nulls(): + return _data_dir / "test_gpkg_nulls.gpkg" + + +@pytest.fixture(scope="function") +def no_geometry_file(tmp_path): + # create a GPKG layer that does not include geometry + filename = tmp_path / "test_no_geometry.gpkg" + write( + filename, + layer="no_geometry", + geometry=None, + field_data=[np.array(["a", "b", "c"])], + fields=["col"], + ) + + return filename + + +@pytest.fixture(scope="function") +def list_field_values_file(tmp_path): + # Create a GeoJSON file with list values in a property + list_geojson = """{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { "int64": 1, "list_int64": [0, 1] }, + "geometry": { "type": "Point", "coordinates": [0, 2] } + }, + { + "type": "Feature", + "properties": { "int64": 2, "list_int64": [2, 3] }, + "geometry": { "type": "Point", "coordinates": [1, 2] } + }, + { + "type": "Feature", + "properties": { "int64": 3, "list_int64": [4, 5] }, + "geometry": { "type": "Point", "coordinates": [2, 2] } + }, + { + "type": "Feature", + "properties": { "int64": 4, "list_int64": [6, 7] }, + "geometry": { "type": "Point", "coordinates": [3, 2] } + }, + { + "type": "Feature", + "properties": { "int64": 5, "list_int64": [8, 9] }, + "geometry": { "type": "Point", "coordinates": [4, 2] } + } + ] + }""" + + filename = tmp_path / "test_ogr_types_list.geojson" + with open(filename, "w") as f: + _ = f.write(list_geojson) + + return filename + + +@pytest.fixture(scope="function") +def nested_geojson_file(tmp_path): + # create GeoJSON file with nested properties + nested_geojson = """{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [0, 0] + }, + "properties": { + "top_level": "A", + "intermediate_level": { + "bottom_level": "B" + } + } + } + ] + }""" + + filename = tmp_path / "test_nested.geojson" + with open(filename, "w") as f: + _ = f.write(nested_geojson) + + return filename + + +@pytest.fixture(scope="function") +def datetime_file(tmp_path): + # create GeoJSON file with millisecond precision + datetime_geojson = """{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { "col": "2020-01-01T09:00:00.123" }, + "geometry": { "type": "Point", "coordinates": [1, 1] } + }, + { + "type": "Feature", + "properties": { "col": "2020-01-01T10:00:00" }, + "geometry": { "type": "Point", "coordinates": [2, 2] } + } + ] + }""" + + filename = tmp_path / "test_datetime.geojson" + with open(filename, "w") as f: + _ = f.write(datetime_geojson) + + return filename + + +@pytest.fixture(scope="function") +def datetime_tz_file(tmp_path): + # create GeoJSON file with datetimes with timezone + datetime_tz_geojson = """{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": { "datetime_col": "2020-01-01T09:00:00.123-05:00" }, + "geometry": { "type": "Point", "coordinates": [1, 1] } + }, + { + "type": "Feature", + "properties": { "datetime_col": "2020-01-01T10:00:00-05:00" }, + "geometry": { "type": "Point", "coordinates": [2, 2] } + } + ] + }""" + + filename = tmp_path / "test_datetime_tz.geojson" + with open(filename, "w") as f: + f.write(datetime_tz_geojson) + + return filename @pytest.fixture(scope="function") diff --git a/pyogrio/tests/fixtures/README.md b/pyogrio/tests/fixtures/README.md index 89ef7937..4cab72d0 100644 --- a/pyogrio/tests/fixtures/README.md +++ b/pyogrio/tests/fixtures/README.md @@ -1,13 +1,28 @@ # Test datasets -## Natural Earth lowres +## Obtaining / creating test datasets -`naturalearth_lowres.shp` was copied from GeoPandas. +If a test dataset can be created in code, do that instead. If it is used in a +single test, create the test dataset as part of that test. If it is used in +more than a single test, add it to `pyogrio/tests/conftest.py` instead, as a +function-scoped test fixture. + +If you need to obtain 3rd party test files: + +- add a section below that describes the source location and processing steps + to derive that dataset +- make sure the license is compatible with including in Pyogrio (public domain or open-source) + and record that license below + +Please keep the test files no larger than necessary to use in tests. -## FGDB test dataset +## Included test datasets + +### Natural Earth lowres + +`naturalearth_lowres.shp` was copied from GeoPandas. -`test_fgdb.gdb.zip` -Downloaded from http://trac.osgeo.org/gdal/raw-attachment/wiki/FileGDB/test_fgdb.gdb.zip +License: public domain ### GPKG test dataset with null values @@ -75,15 +90,19 @@ NOTE: Reading boolean values into GeoPandas using Fiona backend treats those values as `None` and column dtype as `object`; Pyogrio treats those values as `np.nan` and column dtype as `float64`. -### GPKG test with MultiSurface - -This was extracted from https://prd-tnm.s3.amazonaws.com/StagedProducts/Hydrography/NHDPlusHR/Beta/GDB/NHDPLUS_H_0308_HU4_GDB.zip -`NHDWaterbody` layer using ogr2ogr: - -```bash -ogr2ogr test_mixed_surface.gpkg NHDPLUS_H_0308_HU4_GDB.gdb NHDWaterbody -where '"NHDPlusID" = 15000300070477' -select "NHDPlusID" -``` +License: same as Pyogrio ### OSM PBF test This was downloaded from https://github.com/openstreetmap/OSM-binary/blob/master/resources/sample.pbf + +License: [Open Data Commons Open Database License (ODbL)](https://opendatacommons.org/licenses/odbl/) + +### Test files for geometry types that are downgraded on read + +`line_zm.gpkg` was created using QGIS to digitize a LineString GPKG layer with Z and M enabled. Downgraded to LineString Z on read. +`curve.gpkg` was created using QGIS to digitize a Curve GPKG layer. Downgraded to LineString on read. +`curvepolygon.gpkg` was created using QGIS to digitize a CurvePolygon GPKG layer. Downgraded to Polygon on read. +`multisurface.gpkg` was created using QGIS to digitize a MultiSurface GPKG layer. Downgraded to MultiPolygon on read. + +License: same as Pyogrio diff --git a/pyogrio/tests/fixtures/curve.gpkg b/pyogrio/tests/fixtures/curve.gpkg new file mode 100644 index 0000000000000000000000000000000000000000..974f5be9bc4365a599033688de708e34443b0dcb GIT binary patch literal 98304 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૶-JKtF>^>aS#AMQs`0p=B&kuuus1Tknxl|G?o-Ia2{o+fa zI>AI?b3q?Z4l2o^4W?-H{)>^|R-vLxEt;MR_&shn?az@-P8U5y2Qpd*10j%SPh#fB z6Hr085>TXXkJ(0iLoOYa)>!6;EmK^pbX!Q6cbkdFMOuj6+NMi1pJrmVwN1ZJBUJ2F zi_YRaW*r=M4Fu>WE=H=!bz9oo&E15NhCsLmi*Nj(c%JLK%pyG@Qr$vq=Dy_Yh|$(Y zG>O+V!`cz36s6xfMnJhPUyF@s(g1aj!)p`l&kU#&>|gKAo4tX{z{K!EP&&jNN{jAH zs%4;v@uePCnqEg+d^@n)R_+CfrA*IpT@j)opfW|M&5ECO(V1TZP`#FD`;69J^WJ6A zg>q>_eOU;ihcgDY$9jBay+?KxlGY#X?2|3%GdLr;`^X71IFf#$!?CC92yK+q&VOy@?<;*9ipfuxj%3L4Ka)LE6EvG@9 MVR*%R8s3I~0NQ6kg8%>k delta 4284 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 literal 0 HcmV?d00001 diff --git a/pyogrio/tests/fixtures/multisurface.gpkg b/pyogrio/tests/fixtures/multisurface.gpkg new file mode 100644 index 0000000000000000000000000000000000000000..595a2feae4017b8d76348e4b8e5c19d8710003fa GIT binary patch literal 98304 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 literal 0 HcmV?d00001 diff --git a/pyogrio/tests/fixtures/poly_not_enough_points.shp.zip b/pyogrio/tests/fixtures/poly_not_enough_points.shp.zip deleted file mode 100644 index 90af7b3c9579ef70704b0af8ff2bc6d182987942..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2402 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

=L)W()q_8D}rdJ8UJAt7KU#YL$(M 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 diff --git a/pyogrio/tests/fixtures/test_nested.geojson b/pyogrio/tests/fixtures/test_nested.geojson deleted file mode 100644 index fdf5de80..00000000 --- a/pyogrio/tests/fixtures/test_nested.geojson +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "FeatureCollection", - "features": [ - { - "type": "Feature", - "geometry": { - "type": "Point", - "coordinates": [0, 0] - }, - "properties": { - "top_level": "A", - "intermediate_level": { - "bottom_level": "B" - } - } - } - ] -} diff --git a/pyogrio/tests/fixtures/test_ogr_types_list.geojson b/pyogrio/tests/fixtures/test_ogr_types_list.geojson deleted file mode 100644 index 85719696..00000000 --- a/pyogrio/tests/fixtures/test_ogr_types_list.geojson +++ /dev/null @@ -1,12 +0,0 @@ -{ -"type": "FeatureCollection", -"name": "test", -"crs": { "type": "name", "properties": { "name": "urn:ogc:def:crs:OGC:1.3:CRS84" } }, -"features": [ -{ "type": "Feature", "properties": { "int64": 1, "list_int64": [ 0, 1 ] }, "geometry": { "type": "Point", "coordinates": [ 0.0, 2.0 ] } }, -{ "type": "Feature", "properties": { "int64": 2, "list_int64": [ 2, 3 ] }, "geometry": { "type": "Point", "coordinates": [ 1.0, 2.0 ] } }, -{ "type": "Feature", "properties": { "int64": 3, "list_int64": [ 4, 5 ] }, "geometry": { "type": "Point", "coordinates": [ 2.0, 2.0 ] } }, -{ "type": "Feature", "properties": { "int64": 4, "list_int64": [ 6, 7 ] }, "geometry": { "type": "Point", "coordinates": [ 3.0, 2.0 ] } }, -{ "type": "Feature", "properties": { "int64": 5, "list_int64": [ 8, 9 ] }, "geometry": { "type": "Point", "coordinates": [ 4.0, 2.0 ] } } -] -} diff --git a/pyogrio/tests/test_arrow.py b/pyogrio/tests/test_arrow.py index 0230a771..7b2d6673 100644 --- a/pyogrio/tests/test_arrow.py +++ b/pyogrio/tests/test_arrow.py @@ -132,24 +132,24 @@ def test_read_arrow_ignore_geometry(naturalearth_lowres): assert_frame_equal(result, expected) -def test_read_arrow_nested_types(test_ogr_types_list): +def test_read_arrow_nested_types(list_field_values_file): # with arrow, list types are supported - result = read_dataframe(test_ogr_types_list, use_arrow=True) + result = read_dataframe(list_field_values_file, use_arrow=True) assert "list_int64" in result.columns assert result["list_int64"][0].tolist() == [0, 1] -def test_read_arrow_to_pandas_kwargs(test_fgdb_vsi): +def test_read_arrow_to_pandas_kwargs(no_geometry_file): # with arrow, list types are supported arrow_to_pandas_kwargs = {"strings_to_categorical": True} - result = read_dataframe( - test_fgdb_vsi, - layer="basetable_2", + df = read_dataframe( + no_geometry_file, + read_geometry=False, use_arrow=True, arrow_to_pandas_kwargs=arrow_to_pandas_kwargs, ) - assert "SEGMENT_NAME" in result.columns - assert result["SEGMENT_NAME"].dtype.name == "category" + assert df.col.dtype.name == "category" + assert np.array_equal(df.col.values.categories, ["a", "b", "c"]) def test_read_arrow_raw(naturalearth_lowres): @@ -297,14 +297,15 @@ def use_arrow_context(): del os.environ["PYOGRIO_USE_ARROW"] -def test_enable_with_environment_variable(test_ogr_types_list): +def test_enable_with_environment_variable(list_field_values_file): # list types are only supported with arrow, so don't work by default and work # when arrow is enabled through env variable - result = read_dataframe(test_ogr_types_list) + result = read_dataframe(list_field_values_file) assert "list_int64" not in result.columns with use_arrow_context(): - result = read_dataframe(test_ogr_types_list) + result = read_dataframe(list_field_values_file) + assert "list_int64" in result.columns @@ -491,6 +492,88 @@ def test_write_geojson(tmp_path, naturalearth_lowres): ) +@requires_arrow_write_api +@pytest.mark.skipif( + __gdal_version__ < (3, 6, 0), + reason="OpenFileGDB write support only available for GDAL >= 3.6.0", +) +@pytest.mark.parametrize( + "write_int64", + [ + False, + pytest.param( + True, + marks=pytest.mark.skipif( + __gdal_version__ < (3, 9, 0), + reason="OpenFileGDB write support for int64 values for GDAL >= 3.9.0", + ), + ), + ], +) +def test_write_openfilegdb(tmp_path, write_int64): + expected_field_data = [ + np.array([True, False, True], dtype="bool"), + np.array([1, 2, 3], dtype="int16"), + np.array([1, 2, 3], dtype="int32"), + np.array([1, 2, 3], dtype="int64"), + np.array([1, 2, 3], dtype="float32"), + np.array([1, 2, 3], dtype="float64"), + ] + + table = pa.table( + { + "geometry": points, + **{field.dtype.name: field for field in expected_field_data}, + } + ) + + filename = tmp_path / "test.gdb" + + expected_meta = {"crs": "EPSG:4326"} + + # int64 is not supported without additional config: https://gdal.org/en/latest/drivers/vector/openfilegdb.html#bit-integer-field-support + # it is converted to float64 by default and raises a warning + # (for GDAL >= 3.9.0 only) + write_params = ( + {"TARGET_ARCGIS_VERSION": "ARCGIS_PRO_3_2_OR_LATER"} if write_int64 else {} + ) + + if write_int64 or __gdal_version__ < (3, 9, 0): + ctx = contextlib.nullcontext() + else: + ctx = pytest.warns( + RuntimeWarning, match="Integer64 will be written as a Float64" + ) + + with ctx: + write_arrow( + table, + filename, + driver="OpenFileGDB", + geometry_type="Point", + geometry_name="geometry", + **expected_meta, + **write_params, + ) + + meta, table = read_arrow(filename) + + if not write_int64: + expected_field_data[3] = expected_field_data[3].astype("float64") + + # bool types are converted to int32 + expected_field_data[0] = expected_field_data[0].astype("int32") + + assert meta["crs"] == expected_meta["crs"] + + # NOTE: geometry name is set to "SHAPE" by GDAL + assert np.array_equal(table[meta["geometry_name"]], points) + for i in range(len(expected_field_data)): + values = table[table.schema.names[i]].to_numpy() + assert values.dtype == expected_field_data[i].dtype + assert np.array_equal(values, expected_field_data[i]) + + @pytest.mark.parametrize( "driver", { diff --git a/pyogrio/tests/test_core.py b/pyogrio/tests/test_core.py index 5936c6a5..1d593466 100644 --- a/pyogrio/tests/test_core.py +++ b/pyogrio/tests/test_core.py @@ -151,7 +151,15 @@ def test_list_drivers(): assert len(drivers) == len(expected) -def test_list_layers(naturalearth_lowres, naturalearth_lowres_vsi, test_fgdb_vsi): +def test_list_layers( + naturalearth_lowres, + naturalearth_lowres_vsi, + line_zm_file, + curve_file, + curve_polygon_file, + multisurface_file, + no_geometry_file, +): assert array_equal( list_layers(naturalearth_lowres), [["naturalearth_lowres", "Polygon"]] ) @@ -165,16 +173,17 @@ def test_list_layers(naturalearth_lowres, naturalearth_lowres_vsi, test_fgdb_vsi with pytest.warns( UserWarning, match=r"Measured \(M\) geometry types are not supported" ): - fgdb_layers = list_layers(test_fgdb_vsi) - # GDAL >= 3.4.0 includes 'another_relationship' layer - assert len(fgdb_layers) >= 7 + assert array_equal(list_layers(line_zm_file), [["line_zm", "LineString Z"]]) - # Make sure that nonspatial layer has None for geometry - assert array_equal(fgdb_layers[0], ["basetable_2", None]) + # Curve / surface types are downgraded to plain types + assert array_equal(list_layers(curve_file), [["curve", "LineString"]]) + assert array_equal(list_layers(curve_polygon_file), [["curvepolygon", "Polygon"]]) + assert array_equal( + list_layers(multisurface_file), [["multisurface", "MultiPolygon"]] + ) - # Confirm that measured 3D is downgraded to plain 3D during read - assert array_equal(fgdb_layers[3], ["test_lines", "MultiLineString Z"]) - assert array_equal(fgdb_layers[6], ["test_areas", "MultiPolygon Z"]) + # Make sure that nonspatial layer has None for geometry + assert array_equal(list_layers(no_geometry_file), [["no_geometry", None]]) def test_list_layers_bytes(geojson_bytes): @@ -499,8 +508,8 @@ def test_read_info_filelike(geojson_filelike): ), ], ) -def test_read_info_dataset_kwargs(data_dir, dataset_kwargs, fields): - meta = read_info(data_dir / "test_nested.geojson", **dataset_kwargs) +def test_read_info_dataset_kwargs(nested_geojson_file, dataset_kwargs, fields): + meta = read_info(nested_geojson_file, **dataset_kwargs) assert meta["fields"].tolist() == fields @@ -559,8 +568,8 @@ def test_read_info_unspecified_layer_warning(data_dir): read_info(data_dir / "sample.osm.pbf") -def test_read_info_without_geometry(test_fgdb_vsi): - assert read_info(test_fgdb_vsi, layer="basetable_2")["total_bounds"] is None +def test_read_info_without_geometry(no_geometry_file): + assert read_info(no_geometry_file)["total_bounds"] is None @pytest.mark.parametrize( diff --git a/pyogrio/tests/test_geopandas_io.py b/pyogrio/tests/test_geopandas_io.py index ea36fa2a..74efa6f7 100644 --- a/pyogrio/tests/test_geopandas_io.py +++ b/pyogrio/tests/test_geopandas_io.py @@ -36,7 +36,6 @@ from geopandas.testing import assert_geodataframe_equal from pandas.testing import ( - assert_frame_equal, assert_index_equal, assert_series_equal, ) @@ -147,14 +146,13 @@ def test_read_dataframe_vsi(naturalearth_lowres_vsi, use_arrow): @pytest.mark.parametrize( - "columns, fid_as_index, exp_len", [(None, False, 2), ([], True, 2), ([], False, 0)] + "columns, fid_as_index, exp_len", [(None, False, 3), ([], True, 3), ([], False, 0)] ) def test_read_layer_without_geometry( - test_fgdb_vsi, columns, fid_as_index, use_arrow, exp_len + no_geometry_file, columns, fid_as_index, use_arrow, exp_len ): result = read_dataframe( - test_fgdb_vsi, - layer="basetable", + no_geometry_file, columns=columns, fid_as_index=fid_as_index, use_arrow=use_arrow, @@ -200,38 +198,62 @@ def test_read_no_geometry_no_columns_no_fids(naturalearth_lowres, use_arrow): ) -def test_read_force_2d(test_fgdb_vsi, use_arrow): - with pytest.warns( - UserWarning, match=r"Measured \(M\) geometry types are not supported" - ): - df = read_dataframe(test_fgdb_vsi, layer="test_lines", max_features=1) - assert df.iloc[0].geometry.has_z +def test_read_force_2d(tmp_path, use_arrow): + filename = tmp_path / "test.gpkg" - df = read_dataframe( - test_fgdb_vsi, - layer="test_lines", - force_2d=True, - max_features=1, - use_arrow=use_arrow, - ) - assert not df.iloc[0].geometry.has_z + # create a GPKG with 3D point values + expected = gp.GeoDataFrame( + geometry=[Point(0, 0, 0), Point(1, 1, 0)], crs="EPSG:4326" + ) + write_dataframe(expected, filename) + df = read_dataframe(filename) + assert df.iloc[0].geometry.has_z + + df = read_dataframe( + filename, + force_2d=True, + max_features=1, + use_arrow=use_arrow, + ) + assert not df.iloc[0].geometry.has_z + + +def test_read_layer(tmp_path, use_arrow): + filename = tmp_path / "test.gpkg" + + # create a multilayer GPKG + expected1 = gp.GeoDataFrame(geometry=[Point(0, 0)], crs="EPSG:4326") + write_dataframe( + expected1, + filename, + layer="layer1", + ) + + expected2 = gp.GeoDataFrame(geometry=[Point(1, 1)], crs="EPSG:4326") + write_dataframe(expected2, filename, layer="layer2", append=True) + + assert np.array_equal( + list_layers(filename), [["layer1", "Point"], ["layer2", "Point"]] + ) -@pytest.mark.filterwarnings("ignore: Measured") -@pytest.mark.filterwarnings("ignore: More than one layer found in") -def test_read_layer(test_fgdb_vsi, use_arrow): - layers = list_layers(test_fgdb_vsi) - kwargs = {"use_arrow": use_arrow, "read_geometry": False, "max_features": 1} + kwargs = {"use_arrow": use_arrow, "max_features": 1} - # The first layer is read by default (NOTE: first layer has no features) - df = read_dataframe(test_fgdb_vsi, **kwargs) - df2 = read_dataframe(test_fgdb_vsi, layer=layers[0][0], **kwargs) - assert_frame_equal(df, df2) + # The first layer is read by default, which will warn when there are multiple + # layers + with pytest.warns(UserWarning, match="More than one layer found"): + df = read_dataframe(filename, **kwargs) - # Reading a specific layer should return that layer. + assert_geodataframe_equal(df, expected1) + + # Reading a specific layer by name should return that layer. # Detected here by a known column. - df = read_dataframe(test_fgdb_vsi, layer="test_lines", **kwargs) - assert "RIVER_MILE" in df.columns + df = read_dataframe(filename, layer="layer2", **kwargs) + assert_geodataframe_equal(df, expected2) + + # Reading a specific layer by index should return that layer + df = read_dataframe(filename, layer=1, **kwargs) + assert_geodataframe_equal(df, expected2) def test_read_layer_invalid(naturalearth_lowres_all_ext, use_arrow): @@ -239,22 +261,19 @@ def test_read_layer_invalid(naturalearth_lowres_all_ext, use_arrow): read_dataframe(naturalearth_lowres_all_ext, layer="wrong", use_arrow=use_arrow) -@pytest.mark.filterwarnings("ignore: Measured") -def test_read_datetime(test_fgdb_vsi, use_arrow): - df = read_dataframe( - test_fgdb_vsi, layer="test_lines", use_arrow=use_arrow, max_features=1 - ) +def test_read_datetime(datetime_file, use_arrow): + df = read_dataframe(datetime_file, use_arrow=use_arrow) if PANDAS_GE_20: # starting with pandas 2.0, it preserves the passed datetime resolution - assert df.SURVEY_DAT.dtype.name == "datetime64[ms]" + assert df.col.dtype.name == "datetime64[ms]" else: - assert df.SURVEY_DAT.dtype.name == "datetime64[ns]" + assert df.col.dtype.name == "datetime64[ns]" @pytest.mark.filterwarnings("ignore: Non-conformant content for record 1 in column ") @pytest.mark.requires_arrow_write_api -def test_read_datetime_tz(test_datetime_tz, tmp_path, use_arrow): - df = read_dataframe(test_datetime_tz) +def test_read_datetime_tz(datetime_tz_file, tmp_path, use_arrow): + df = read_dataframe(datetime_tz_file) # Make the index non-consecutive to test this case as well. Added for issue # https://github.com/geopandas/pyogrio/issues/324 df = df.set_index(np.array([0, 2])) @@ -324,14 +343,17 @@ def test_read_write_datetime_tz_with_nulls(tmp_path, use_arrow): assert_geodataframe_equal(df, result) -def test_read_null_values(test_fgdb_vsi, use_arrow): - df = read_dataframe( - test_fgdb_vsi, layer="basetable_2", use_arrow=use_arrow, read_geometry=False - ) +def test_read_null_values(tmp_path, use_arrow): + filename = tmp_path / "test_null_values_no_geometry.gpkg" + + # create a GPKG with no geometries and only null values + expected = pd.DataFrame({"col": [None, None]}) + write_dataframe(expected, filename) + + df = read_dataframe(filename, use_arrow=use_arrow, read_geometry=False) # make sure that Null values are preserved - assert df.SEGMENT_NAME.isnull().max() - assert df.loc[df.SEGMENT_NAME.isnull()].SEGMENT_NAME.iloc[0] is None + assert np.array_equal(df.col.values, expected.col.values) def test_read_fid_as_index(naturalearth_lowres_all_ext, use_arrow): @@ -610,17 +632,22 @@ def test_read_fids_arrow_warning_old_gdal(naturalearth_lowres_all_ext): assert len(df) == 1 -def test_read_fids_force_2d(test_fgdb_vsi): - with pytest.warns( - UserWarning, match=r"Measured \(M\) geometry types are not supported" - ): - df = read_dataframe(test_fgdb_vsi, layer="test_lines", fids=[22]) - assert len(df) == 1 - assert df.iloc[0].geometry.has_z +def test_read_fids_force_2d(tmp_path): + filename = tmp_path / "test.gpkg" - df = read_dataframe(test_fgdb_vsi, layer="test_lines", force_2d=True, fids=[22]) - assert len(df) == 1 - assert not df.iloc[0].geometry.has_z + # create a GPKG with 3D point values + expected = gp.GeoDataFrame( + geometry=[Point(0, 0, 0), Point(1, 1, 0)], crs="EPSG:4326" + ) + write_dataframe(expected, filename) + + df = read_dataframe(filename, fids=[1]) + assert_geodataframe_equal(df, expected.iloc[:1]) + + df = read_dataframe(filename, force_2d=True, fids=[1]) + assert np.array_equal( + df.geometry.values, shapely.force_2d(expected.iloc[:1].geometry.values) + ) @pytest.mark.parametrize("skip_features", [10, 200]) @@ -1677,7 +1704,7 @@ def test_write_geometry_z_types_auto( ("ignore", None), ], ) -def test_read_invalid_shp(data_dir, use_arrow, on_invalid, message): +def test_read_invalid_poly_ring(tmp_path, use_arrow, on_invalid, message): if on_invalid == "raise": handler = pytest.raises(shapely.errors.GEOSException, match=message) elif on_invalid == "warn": @@ -1687,33 +1714,50 @@ def test_read_invalid_shp(data_dir, use_arrow, on_invalid, message): else: raise ValueError(f"unknown value for on_invalid: {on_invalid}") + # create a GeoJSON file with an invalid exterior ring + invalid_geojson = """{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Polygon", + "coordinates": [ [ [0, 0], [0, 0] ] ] + } + } + ] + }""" + + filename = tmp_path / "test.geojson" + with open(filename, "w") as f: + _ = f.write(invalid_geojson) + with handler: df = read_dataframe( - data_dir / "poly_not_enough_points.shp.zip", + filename, use_arrow=use_arrow, on_invalid=on_invalid, ) df.geometry.isnull().all() -def test_read_multisurface(data_dir, use_arrow): +def test_read_multisurface(multisurface_file, use_arrow): if use_arrow: with pytest.raises(shapely.errors.GEOSException): # TODO(Arrow) # shapely fails parsing the WKB - read_dataframe(data_dir / "test_multisurface.gpkg", use_arrow=True) + read_dataframe(multisurface_file, use_arrow=True) else: - df = read_dataframe(data_dir / "test_multisurface.gpkg") + df = read_dataframe(multisurface_file) # MultiSurface should be converted to MultiPolygon assert df.geometry.type.tolist() == ["MultiPolygon"] -def test_read_dataset_kwargs(data_dir, use_arrow): - filename = data_dir / "test_nested.geojson" - +def test_read_dataset_kwargs(nested_geojson_file, use_arrow): # by default, nested data are not flattened - df = read_dataframe(filename, use_arrow=use_arrow) + df = read_dataframe(nested_geojson_file, use_arrow=use_arrow) expected = gp.GeoDataFrame( { @@ -1726,7 +1770,9 @@ def test_read_dataset_kwargs(data_dir, use_arrow): assert_geodataframe_equal(df, expected) - df = read_dataframe(filename, use_arrow=use_arrow, FLATTEN_NESTED_ATTRIBUTES="YES") + df = read_dataframe( + nested_geojson_file, use_arrow=use_arrow, FLATTEN_NESTED_ATTRIBUTES="YES" + ) expected = gp.GeoDataFrame( { diff --git a/pyogrio/tests/test_raw_io.py b/pyogrio/tests/test_raw_io.py index 83f5ce44..54127d0b 100644 --- a/pyogrio/tests/test_raw_io.py +++ b/pyogrio/tests/test_raw_io.py @@ -619,13 +619,80 @@ def test_write_no_geom_no_fields(): __gdal_version__ < (3, 6, 0), reason="OpenFileGDB write support only available for GDAL >= 3.6.0", ) -def test_write_openfilegdb(tmp_path, naturalearth_lowres): - meta, _, geometry, field_data = read(naturalearth_lowres) +@pytest.mark.parametrize( + "write_int64", + [ + False, + pytest.param( + True, + marks=pytest.mark.skipif( + __gdal_version__ < (3, 9, 0), + reason="OpenFileGDB write support for int64 values for GDAL >= 3.9.0", + ), + ), + ], +) +def test_write_openfilegdb(tmp_path, write_int64): + # Point(0, 0) + expected_geometry = np.array( + [bytes.fromhex("010100000000000000000000000000000000000000")] * 3, dtype=object + ) + expected_field_data = [ + np.array([True, False, True], dtype="bool"), + np.array([1, 2, 3], dtype="int16"), + np.array([1, 2, 3], dtype="int32"), + np.array([1, 2, 3], dtype="int64"), + np.array([1, 2, 3], dtype="float32"), + np.array([1, 2, 3], dtype="float64"), + ] + expected_fields = ["bool", "int16", "int32", "int64", "float32", "float64"] + expected_meta = { + "geometry_type": "Point", + "crs": "EPSG:4326", + "fields": expected_fields, + } filename = tmp_path / "test.gdb" - write(filename, geometry, field_data, driver="OpenFileGDB", **meta) - assert filename.exists() + # int64 is not supported without additional config: https://gdal.org/en/latest/drivers/vector/openfilegdb.html#bit-integer-field-support + # it is converted to float64 by default and raises a warning + # (for GDAL >= 3.9.0 only) + write_params = ( + {"TARGET_ARCGIS_VERSION": "ARCGIS_PRO_3_2_OR_LATER"} if write_int64 else {} + ) + + if write_int64 or __gdal_version__ < (3, 9, 0): + ctx = contextlib.nullcontext() + else: + ctx = pytest.warns( + RuntimeWarning, match="Integer64 will be written as a Float64" + ) + + with ctx: + write( + filename, + expected_geometry, + expected_field_data, + driver="OpenFileGDB", + **expected_meta, + **write_params, + ) + + meta, _, geometry, field_data = read(filename) + + if not write_int64: + expected_field_data[3] = expected_field_data[3].astype("float64") + + # bool types are converted to int32 + expected_field_data[0] = expected_field_data[0].astype("int32") + + assert meta["crs"] == expected_meta["crs"] + assert np.array_equal(meta["fields"], expected_meta["fields"]) + + assert np.array_equal(geometry, expected_geometry) + for i in range(len(expected_field_data)): + assert field_data[i].dtype == expected_field_data[i].dtype + assert np.array_equal(field_data[i], expected_field_data[i]) @pytest.mark.parametrize("ext", DRIVERS) @@ -934,17 +1001,17 @@ def test_read_data_types_numeric_with_null(test_gpkg_nulls): assert field.dtype == "float64" -def test_read_unsupported_types(test_ogr_types_list): - fields = read(test_ogr_types_list)[3] +def test_read_unsupported_types(list_field_values_file): + fields = read(list_field_values_file)[3] # list field gets skipped, only integer field is read assert len(fields) == 1 - fields = read(test_ogr_types_list, columns=["int64"])[3] + fields = read(list_field_values_file, columns=["int64"])[3] assert len(fields) == 1 -def test_read_datetime_millisecond(test_datetime): - field = read(test_datetime)[3][0] +def test_read_datetime_millisecond(datetime_file): + field = read(datetime_file)[3][0] assert field.dtype == "datetime64[ms]" assert field[0] == np.datetime64("2020-01-01 09:00:00.123") assert field[1] == np.datetime64("2020-01-01 10:00:00.000") @@ -973,13 +1040,14 @@ def test_read_unsupported_ext_with_prefix(tmp_path): assert field_data[0] == "data1" -def test_read_datetime_as_string(test_datetime_tz): - field = read(test_datetime_tz)[3][0] +def test_read_datetime_as_string(datetime_tz_file): + field = read(datetime_tz_file)[3][0] assert field.dtype == "datetime64[ms]" # timezone is ignored in numpy layer assert field[0] == np.datetime64("2020-01-01 09:00:00.123") assert field[1] == np.datetime64("2020-01-01 10:00:00.000") - field = read(test_datetime_tz, datetime_as_string=True)[3][0] + + field = read(datetime_tz_file, datetime_as_string=True)[3][0] assert field.dtype == "object" # GDAL doesn't return strings in ISO format (yet) assert field[0] == "2020/01/01 09:00:00.123-05"