diff --git a/mappyfile/validator.py b/mappyfile/validator.py index e79cb59..ef97489 100644 --- a/mappyfile/validator.py +++ b/mappyfile/validator.py @@ -88,9 +88,14 @@ def get_schema_file(self, schema_name: str) -> str: def get_json_from_file(self, schema_name: str): if schema_name not in self.schemas: schema_file = self.get_schema_file(schema_name) + schemas_folder = self.get_schemas_folder() + base_uri = self.get_schema_path(schemas_folder) + with open(schema_file, encoding="utf-8") as f: try: - jsn_schema = json.load(f) + jsn_schema = jsonref.load( + f, base_uri=base_uri, lazy_load=False, proxies=False + ) except ValueError as ex: log.error("Could not load %s", schema_file) raise ex @@ -123,7 +128,7 @@ def is_valid_for_version(self, d: dict, version: float) -> bool: return True def get_versioned_schema( - self, version: (float | None), schema_name: str = "map" + self, version: float | None, schema_name: str = "map" ) -> dict: """ Get a fully expanded JSON schema for a specific MapServer @@ -278,7 +283,7 @@ def validate( value: Any, add_comments: bool = False, schema_name: str = "map", - version: (float | None) = None, + version: float | None = None, ): """ verbose - also return the jsonschema error details @@ -300,7 +305,7 @@ def validate( return error_messages def get_expanded_schema( - self, schema_name: str, version: (float | None) = None + self, schema_name: str, version: float | None = None ) -> dict: """ Return a schema file with all $ref properties expanded diff --git a/tests/test_validation.py b/tests/test_validation.py index 9f0b2cf..cc5d14a 100644 --- a/tests/test_validation.py +++ b/tests/test_validation.py @@ -618,6 +618,13 @@ def test_get_versioned_schema(): assert "defresolution" in jsn["properties"].keys() +def test_validating_mapfile(): + fn = "./tests/sample_maps/256_overlay_res.map" + d = mappyfile.open(fn, expand_includes=True, include_position=True) + validation_messages = mappyfile.validate(d) + assert len(validation_messages) == 0 + + def run_tests(): pytest.main(["tests/test_validation.py"]) @@ -626,5 +633,5 @@ def run_tests(): logging.basicConfig(level=logging.INFO) # run_tests() # test_double_error() - test_deref() + test_validating_mapfile() print("Done!")