Skip to content

Commit c823217

Browse files
committed
Update base validator class to check for duplicate OPAs, geoms; also check for invalid geoms
1 parent 51480eb commit c823217

1 file changed

Lines changed: 36 additions & 0 deletions

File tree

data/src/new_etl/validation/base.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,42 @@ def validate(self, data: gpd.GeoDataFrame) -> Tuple[bool, List[str]]:
2424
"""
2525
pass
2626

27+
def _run_base_validation(self, data: gpd.GeoDataFrame) -> List[str]:
28+
"""
29+
Run base validation checks that should be performed for all services.
30+
Currently checks for:
31+
- Duplicate OPA IDs
32+
- Duplicate geometries
33+
- Invalid geometries
34+
35+
Args:
36+
data: The GeoDataFrame to validate
37+
38+
Returns:
39+
List of error messages
40+
"""
41+
errors = []
42+
43+
# Check for duplicate OPA IDs
44+
if "opa_id" in data.columns:
45+
duplicates = data[data["opa_id"].duplicated()]
46+
if not duplicates.empty:
47+
errors.append(f"Found {len(duplicates)} duplicate OPA IDs")
48+
49+
# Check for duplicate geometries
50+
if "geometry" in data.columns:
51+
duplicates = data[data["geometry"].duplicated()]
52+
if not duplicates.empty:
53+
errors.append(f"Found {len(duplicates)} duplicate geometries")
54+
55+
# Check for invalid geometries
56+
if "geometry" in data.columns:
57+
invalid_geoms = data[~data["geometry"].is_valid]
58+
if not invalid_geoms.empty:
59+
errors.append(f"Found {len(invalid_geoms)} invalid geometries")
60+
61+
return errors
62+
2763
def check_required_columns(
2864
self, data: gpd.GeoDataFrame, required_columns: List[str]
2965
) -> List[str]:

0 commit comments

Comments
 (0)