From 68beaecb894d9f9b04bb09b47d179cf40e58349f Mon Sep 17 00:00:00 2001 From: Anuj Date: Wed, 1 Jul 2026 16:24:29 +0530 Subject: [PATCH] Fix OSW dataset filename classification for names ## Dev Board Ticket - https://dev.azure.com/TDEI-UW/TDEI/_workitems/edit/3750 ## Changes - Fixed dataset file classification to use supported filename patterns instead of loose substring matching. - Prevented files like `River._edges_.nodes.geojson` from being incorrectly classified as `edges`. - Added support for the four accepted filename formats: `.geojson`, `*..geojson`, `.OSW.geojson`, and `*..OSW.geojson`. - Updated unsupported filename messaging, README documentation, changelog, and package version to `0.4.4`. - Added regression coverage using `tests/assets/3750.zip`. ## Testing - `python -m pytest tests/unit_tests/test_extracted_data_validator.py -q` - `python -m pytest tests/unit_tests/test_osw_validation.py -q` - `python -m pytest tests/unit_tests/test_osw_validation_extras.py -q` --- CHANGELOG.md | 7 ++++ README.md | 31 ++++++++------- src/python_osw_validation/__init__.py | 28 +++++++++---- .../extracted_data_validator.py | 26 +++++++----- src/python_osw_validation/version.py | 2 +- tests/assets/3750.zip | Bin 0 -> 93898 bytes .../test_extracted_data_validator.py | 37 ++++++++++++++++-- tests/unit_tests/test_osw_validation.py | 9 +++++ .../unit_tests/test_osw_validation_extras.py | 7 ++++ 9 files changed, 112 insertions(+), 35 deletions(-) create mode 100644 tests/assets/3750.zip diff --git a/CHANGELOG.md b/CHANGELOG.md index fe8bbdb..d88ff84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # Change log +### 0.4.4 - 2026-07-01 +- Fixed dataset filename classification so names containing dataset tokens in the prefix, such as `River._edges_.nodes.geojson`, are classified by their final dataset suffix instead of by loose substring matching. +- Supported filename detection now consistently accepts only these four forms for each dataset type: `.geojson`, `*..geojson`, `.OSW.geojson`, and `*..OSW.geojson`. +- Rejected ambiguous glued or marker-style names such as `roadnodes.geojson`, `roadedges.geojson`, and `River._edges_.geojson` with clearer unsupported-file guidance. +- Added regression coverage using `tests/assets/3750.zip` plus unit tests for accepted and rejected filename formats across dataset keys. +- Updated the README supported-filenames section to document the accepted formats and invalid examples. + ### 0.4.3 - 2026-06-03 - Removed the `maximum: 5000` constraint from `length` in the OSW 0.3 edges and lines schemas so longer paths, including `length: 6629.35`, validate successfully. - Added regression coverage for long `length` values using `tests/assets/max-length-error.zip`, plus boundary tests for `length: 0` and `length: -1`. diff --git a/README.md b/README.md index a9a1f54..b0d2b48 100644 --- a/README.md +++ b/README.md @@ -72,29 +72,32 @@ validator = OSWValidation( ## Supported filenames -The validator accepts dataset files whose names end with one of these exact suffixes: +The validator accepts four filename formats for each dataset type: -- `.edges.geojson` -- `.lines.geojson` -- `.nodes.geojson` -- `.points.geojson` -- `.polygons.geojson` -- `.zones.geojson` +- `.geojson` +- `*..geojson` +- `.OSW.geojson` +- `*..OSW.geojson` -It also accepts the legacy form: +Where `` is one of: -- `.edges.OSW.geojson` -- `.lines.OSW.geojson` -- `.nodes.OSW.geojson` -- `.points.OSW.geojson` -- `.polygons.OSW.geojson` -- `.zones.OSW.geojson` +- `edges` +- `lines` +- `nodes` +- `points` +- `polygons` +- `zones` Examples: +- `nodes.geojson` is valid - `gs_metaline_falls_uga.nodes.geojson` is valid +- `nodes.OSW.geojson` is valid - `gs_yarrow_point.edges.geojson` is valid +- `wa.microsoft.graph.edges.OSW.geojson` is valid - `roadEdges.geojson` is invalid +- `roadedges.geojson` is invalid +- `River._edges_.geojson` is invalid If a dataset uses canonical OSW 0.3 names that start with `opensidewalks.`, then only these exact names are allowed: diff --git a/src/python_osw_validation/__init__.py b/src/python_osw_validation/__init__.py index 127e851..ac19ec3 100644 --- a/src/python_osw_validation/__init__.py +++ b/src/python_osw_validation/__init__.py @@ -8,7 +8,7 @@ import jsonschema_rs from .zipfile_handler import ZipFileHandler -from .extracted_data_validator import ExtractedDataValidator, OSW_DATASET_FILES +from .extracted_data_validator import ExtractedDataValidator, OSW_DATASET_FILES, dataset_key_for_filename from .version import __version__ from .helpers import ( _add_additional_properties_hint, @@ -269,18 +269,27 @@ def _schema_key_from_text(self, text: Optional[str]) -> Optional[str]: return None basename = os.path.basename(text).lower() - stem, _ = os.path.splitext(basename) for key in self.dataset_schema_paths: if ( - stem == key - or stem == f"{key}.osw" - or stem.endswith(f".{key}") - or stem.endswith(f".{key}.osw") + basename == f"{key}.geojson" + or basename == f"{key}.osw.geojson" + or basename.endswith(f".{key}.geojson") + or basename.endswith(f".{key}.osw.geojson") ): return key return None + def _schema_key_from_schema_url(self, schema_url: Any) -> Optional[str]: + if not isinstance(schema_url, str): + return None + + lower_url = schema_url.lower() + for key in self.dataset_schema_paths: + if lower_url.endswith(f"/{key}.schema.json"): + return key + return None + def _is_nullish_value(self, value: Any) -> bool: if value is None: return True @@ -371,6 +380,10 @@ def pick_schema_for_file(self, file_path: str, geojson_data: Dict[str, Any]) -> if schema_key and schema_key in self.dataset_schema_paths: return self.dataset_schema_paths[schema_key] + schema_key = self._schema_key_from_schema_url(geojson_data.get('$schema')) + if schema_key and schema_key in self.dataset_schema_paths: + return self.dataset_schema_paths[schema_key] + return self.line_schema_path # ---------------------------- @@ -423,8 +436,7 @@ def _finalize(is_valid: bool, errors: Optional[List[str]] = None) -> ValidationR # Load GeoDataFrames for integrity checks for file in validator.files: file_path = os.path.join(file) - osw_file = next((osw_key for osw_key in OSW_DATASET_FILES.keys() - if osw_key in os.path.basename(file_path)), '') + osw_file = dataset_key_for_filename(os.path.basename(file_path)) try: gdf = _read_geojson_without_ext(file_path) except Exception as e: diff --git a/src/python_osw_validation/extracted_data_validator.py b/src/python_osw_validation/extracted_data_validator.py index a104a74..8dd0092 100644 --- a/src/python_osw_validation/extracted_data_validator.py +++ b/src/python_osw_validation/extracted_data_validator.py @@ -50,18 +50,21 @@ def _matches_dataset_filename(basename: str, dataset_key: str) -> bool: lower_name = basename.lower() - if not lower_name.endswith(".geojson"): - return False - - stem = lower_name[:-len(".geojson")] return ( - stem == dataset_key - or stem == f"{dataset_key}.osw" - or stem.endswith(f".{dataset_key}") - or stem.endswith(f".{dataset_key}.osw") + lower_name == f"{dataset_key}.geojson" + or lower_name == f"{dataset_key}.osw.geojson" + or lower_name.endswith(f".{dataset_key}.geojson") + or lower_name.endswith(f".{dataset_key}.osw.geojson") ) +def dataset_key_for_filename(basename: str): + for dataset_key in OSW_DATASET_FILES.keys(): + if _matches_dataset_filename(basename, dataset_key): + return dataset_key + return None + + class ExtractedDataValidator: def __init__(self, extracted_dir: str): self.extracted_dir = extracted_dir @@ -118,7 +121,12 @@ def is_valid(self) -> bool: ) if unsupported_files: allowed_fmt = ", ".join(allowed_keys) - allowed_names = f"*.{{{allowed_fmt}}}.geojson" + allowed_names = ( + f"{{{allowed_fmt}}}.geojson, " + f"*.{{{allowed_fmt}}}.geojson, " + f"{{{allowed_fmt}}}.OSW.geojson, or " + f"*.{{{allowed_fmt}}}.OSW.geojson" + ) self.error = (f"Unsupported .geojson files present: {', '.join(unsupported_files)}. " f"Allowed file names are {allowed_names}") return False diff --git a/src/python_osw_validation/version.py b/src/python_osw_validation/version.py index 908c0bb..9a8e054 100644 --- a/src/python_osw_validation/version.py +++ b/src/python_osw_validation/version.py @@ -1 +1 @@ -__version__ = '0.4.3' +__version__ = '0.4.4' diff --git a/tests/assets/3750.zip b/tests/assets/3750.zip new file mode 100644 index 0000000000000000000000000000000000000000..fff232add6b36fed573ed3f5de91f5977f0bf2f6 GIT binary patch literal 93898 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%0DL|^ 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 Gfd2veIyw0O literal 0 HcmV?d00001 diff --git a/tests/unit_tests/test_extracted_data_validator.py b/tests/unit_tests/test_extracted_data_validator.py index 4eb1c1f..0fe0ecb 100644 --- a/tests/unit_tests/test_extracted_data_validator.py +++ b/tests/unit_tests/test_extracted_data_validator.py @@ -3,7 +3,7 @@ import tempfile import shutil from unittest.mock import patch -from src.python_osw_validation.extracted_data_validator import ExtractedDataValidator +from src.python_osw_validation.extracted_data_validator import ExtractedDataValidator, dataset_key_for_filename from src.python_osw_validation.extracted_data_validator import ALLOWED_OSW_03_FILENAMES @@ -75,6 +75,31 @@ def test_valid_legacy_osw_suffix_files(self): self.assertTrue(validator.is_valid()) self.assertEqual(len(validator.files), 2) + def test_valid_bare_dataset_filenames(self): + validator = ExtractedDataValidator(self.test_dir) + self.create_files(['nodes.geojson', 'edges.geojson']) + self.assertTrue(validator.is_valid()) + self.assertEqual(len(validator.files), 2) + + def test_valid_bare_legacy_osw_dataset_filenames(self): + validator = ExtractedDataValidator(self.test_dir) + self.create_files(['nodes.OSW.geojson', 'edges.OSW.geojson']) + self.assertTrue(validator.is_valid()) + self.assertEqual(len(validator.files), 2) + + def test_supported_legacy_filename_formats_for_all_dataset_keys(self): + for dataset_key in ('edges', 'nodes', 'points', 'lines', 'zones', 'polygons'): + self.assertEqual(dataset_key_for_filename(f'{dataset_key}.geojson'), dataset_key) + self.assertEqual(dataset_key_for_filename(f'city.{dataset_key}.geojson'), dataset_key) + self.assertEqual(dataset_key_for_filename(f'{dataset_key}.OSW.geojson'), dataset_key) + self.assertEqual(dataset_key_for_filename(f'city.{dataset_key}.OSW.geojson'), dataset_key) + + def test_ambiguous_dataset_name_substrings_are_not_supported(self): + self.assertIsNone(dataset_key_for_filename('roadnodes.geojson')) + self.assertIsNone(dataset_key_for_filename('roadedges.geojson')) + self.assertIsNone(dataset_key_for_filename('city._nodes_.geojson')) + self.assertIsNone(dataset_key_for_filename('River._edges_.geojson')) + def test_non_standard_filenames_raise_error(self): validator = ExtractedDataValidator(self.test_dir) self.create_files(['custom.nodes.geojson', 'opensidewalks.nodes.geojson']) @@ -112,7 +137,10 @@ def test_unsupported_files_are_rejected(self): self.assertEqual( validator.error, 'Unsupported .geojson files present: something_else.geojson. ' - 'Allowed file names are *.{edges, nodes, points, lines, zones, polygons}.geojson' + 'Allowed file names are {edges, nodes, points, lines, zones, polygons}.geojson, ' + '*.{edges, nodes, points, lines, zones, polygons}.geojson, ' + '{edges, nodes, points, lines, zones, polygons}.OSW.geojson, or ' + '*.{edges, nodes, points, lines, zones, polygons}.OSW.geojson' ) def test_glued_dataset_names_are_rejected(self): @@ -122,7 +150,10 @@ def test_glued_dataset_names_are_rejected(self): self.assertEqual( validator.error, 'Unsupported .geojson files present: roadedges.geojson, roadnodes.geojson. ' - 'Allowed file names are *.{edges, nodes, points, lines, zones, polygons}.geojson' + 'Allowed file names are {edges, nodes, points, lines, zones, polygons}.geojson, ' + '*.{edges, nodes, points, lines, zones, polygons}.geojson, ' + '{edges, nodes, points, lines, zones, polygons}.OSW.geojson, or ' + '*.{edges, nodes, points, lines, zones, polygons}.OSW.geojson' ) diff --git a/tests/unit_tests/test_osw_validation.py b/tests/unit_tests/test_osw_validation.py index aad0606..8fb4a9d 100644 --- a/tests/unit_tests/test_osw_validation.py +++ b/tests/unit_tests/test_osw_validation.py @@ -53,6 +53,7 @@ def setUp(self): self.edge_u_id_coord_mismatch = os.path.join(ASSETS_PATH, 'edge_u_id_coord_mismatch.zip') self.edge_v_id_coord_mismatch = os.path.join(ASSETS_PATH, 'edge_v_id_coord_mismatch.zip') self.zone_w_id_coord_mismatch = os.path.join(ASSETS_PATH, 'zone_w_id_coord_mismatch.zip') + self.edges_token_in_prefix_file = os.path.join(ASSETS_PATH, '3750.zip') def _validate_edge_length(self, length): data = { @@ -369,6 +370,14 @@ def test_geom_mapping_valid_passes(self): self.assertTrue(result.is_valid, f"Expected valid; errors={result.errors}") self.assertIsNone(result.errors) + def test_edges_token_in_filename_prefix_does_not_misclassify_nodes(self): + """A filename prefix containing '_edges_' should not make nodes load as edges.""" + validation = OSWValidation(zipfile_path=self.edges_token_in_prefix_file) + result = validation.validate() + + self.assertTrue(result.is_valid, f"Expected valid; errors={result.errors}") + self.assertIsNone(result.errors) + def test_edge_u_id_coord_mismatch_fails(self): """Edge whose start coordinate does not match the _u_id node is rejected.""" validation = OSWValidation(zipfile_path=self.edge_u_id_coord_mismatch) diff --git a/tests/unit_tests/test_osw_validation_extras.py b/tests/unit_tests/test_osw_validation_extras.py index f7f277d..3ccc9e9 100644 --- a/tests/unit_tests/test_osw_validation_extras.py +++ b/tests/unit_tests/test_osw_validation_extras.py @@ -915,7 +915,10 @@ def test_pick_schema_by_schema_url(self): def test_pick_schema_filename_fallback(self): v = OSWValidation(zipfile_path="dummy.zip") + self.assertEqual(v.pick_schema_for_file("/tmp/nodes.geojson", {"features": []}), v.dataset_schema_paths["nodes"]) self.assertEqual(v.pick_schema_for_file("/tmp/my.nodes.geojson", {"features": []}), v.dataset_schema_paths["nodes"]) + self.assertEqual(v.pick_schema_for_file("/tmp/nodes.OSW.geojson", {"features": []}), v.dataset_schema_paths["nodes"]) + self.assertEqual(v.pick_schema_for_file("/tmp/my.nodes.OSW.geojson", {"features": []}), v.dataset_schema_paths["nodes"]) self.assertEqual(v.pick_schema_for_file("/tmp/my.points.geojson", {"features": []}), v.dataset_schema_paths["points"]) self.assertEqual(v.pick_schema_for_file("/tmp/my.edges.geojson", {"features": []}), v.dataset_schema_paths["edges"]) self.assertEqual(v.pick_schema_for_file("/tmp/my.lines.geojson", {"features": []}), v.dataset_schema_paths["lines"]) @@ -948,6 +951,10 @@ def test_pick_schema_ignores_prefix_substrings(self): v.pick_schema_for_file("/tmp/roadEdges.geojson", {"features": []}), v.line_schema_path, ) + self.assertEqual( + v.pick_schema_for_file("/tmp/River._edges_.geojson", {"features": []}), + v.line_schema_path, + ) def test_pick_schema_force_single_schema_override(self): force = "/forced/opensidewalks.schema-0.3.json"