57 lines
2.1 KiB
Python
57 lines
2.1 KiB
Python
from pathlib import Path
|
|
|
|
from pyogrio import vsi_listtree, vsi_unlink
|
|
from pyogrio.raw import read, write
|
|
from pyogrio.util import vsimem_rmtree_toplevel
|
|
|
|
import pytest
|
|
|
|
|
|
def test_vsimem_rmtree_toplevel(naturalearth_lowres):
|
|
# Prepare test data in /vsimem/
|
|
meta, _, geometry, field_data = read(naturalearth_lowres)
|
|
meta["spatial_index"] = False
|
|
meta["geometry_type"] = "MultiPolygon"
|
|
test_dir_path = Path(f"/vsimem/test/{naturalearth_lowres.stem}.gpkg")
|
|
test_dir2_path = Path(f"/vsimem/test2/test2/{naturalearth_lowres.stem}.gpkg")
|
|
|
|
write(test_dir_path, geometry, field_data, **meta)
|
|
write(test_dir2_path, geometry, field_data, **meta)
|
|
|
|
# Check if everything was created properly with listtree
|
|
files = vsi_listtree("/vsimem/")
|
|
assert test_dir_path.as_posix() in files
|
|
assert test_dir2_path.as_posix() in files
|
|
|
|
# Test deleting parent dir of file in single directory
|
|
vsimem_rmtree_toplevel(test_dir_path)
|
|
files = vsi_listtree("/vsimem/")
|
|
assert test_dir_path.parent.as_posix() not in files
|
|
assert test_dir2_path.as_posix() in files
|
|
|
|
# Test deleting top-level dir of file in a subdirectory
|
|
vsimem_rmtree_toplevel(test_dir2_path)
|
|
assert test_dir2_path.as_posix() not in vsi_listtree("/vsimem/")
|
|
|
|
|
|
def test_vsimem_rmtree_toplevel_error(naturalearth_lowres):
|
|
# Prepare test data in /vsimem
|
|
meta, _, geometry, field_data = read(naturalearth_lowres)
|
|
meta["spatial_index"] = False
|
|
meta["geometry_type"] = "MultiPolygon"
|
|
test_file_path = Path(f"/vsimem/pyogrio_test_{naturalearth_lowres.stem}.gpkg")
|
|
|
|
write(test_file_path, geometry, field_data, **meta)
|
|
assert test_file_path.as_posix() in vsi_listtree("/vsimem/")
|
|
|
|
# Deleting parent dir of non-existent file should raise an error.
|
|
with pytest.raises(FileNotFoundError, match="Path does not exist"):
|
|
vsimem_rmtree_toplevel("/vsimem/test/non-existent.gpkg")
|
|
|
|
# File should still be there
|
|
assert test_file_path.as_posix() in vsi_listtree("/vsimem/")
|
|
|
|
# Cleanup.
|
|
vsi_unlink(test_file_path)
|
|
assert test_file_path not in vsi_listtree("/vsimem/")
|