From f073aecfecd041e38e3642073deb8f50a3bdee51 Mon Sep 17 00:00:00 2001 From: Christian Date: Fri, 18 Aug 2023 13:14:37 +0200 Subject: [PATCH] fix: add condition to prevent operating on emty dataframe in consolidation --- osm4gpd/relations.py | 39 +++++++++++++++++++------------------ tests/conftest.py | 5 +++++ tests/data/extract.osm.pbf | Bin 0 -> 20730 bytes tests/test_consolidate.py | 1 + 4 files changed, 26 insertions(+), 19 deletions(-) create mode 100644 tests/data/extract.osm.pbf diff --git a/osm4gpd/relations.py b/osm4gpd/relations.py index 6ce7f8a..4756667 100644 --- a/osm4gpd/relations.py +++ b/osm4gpd/relations.py @@ -202,25 +202,26 @@ def consolidate_relations( crs="EPSG:4326", ) - relations = pd.concat( - [ - relations, - gpd.GeoDataFrame.from_dict( - { - idx: { - "geometry": func(relations=relations.set_index("id")), - "version": group.version[idx], - "changeset": group.version[idx], - "visible": group.version[idx], - "id": group.ids[idx], - } - for idx, func in unresolved - }, - orient="index", - crs="EPSG:4326", - ), - ] - ) + if len(unresolved) > 0: + relations = pd.concat( + [ + relations, + gpd.GeoDataFrame.from_dict( + { + idx: { + "geometry": func(relations=relations.set_index("id")), + "version": group.version[idx], + "changeset": group.version[idx], + "visible": group.version[idx], + "id": group.ids[idx], + } + for idx, func in unresolved + }, + orient="index", + crs="EPSG:4326", + ), + ] + ) return relations.join( pd.DataFrame.from_dict( diff --git a/tests/conftest.py b/tests/conftest.py index 8066e37..db57cdb 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -16,3 +16,8 @@ def isle_of_man(shared_datadir: Path) -> Path: @pytest.fixture def malta(shared_datadir: Path) -> Path: return shared_datadir.joinpath("malta-latest.osm.pbf") + + +@pytest.fixture +def extract(shared_datadir: Path) -> Path: + return shared_datadir.joinpath("extract.osm.pbf") diff --git a/tests/data/extract.osm.pbf b/tests/data/extract.osm.pbf new file mode 100644 index 0000000000000000000000000000000000000000..ebcd9cc99761c69ce825828b6dd1ee89e85a94a8 GIT binary patch literal 20730 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