From e4eeb135829b225132618cd17e57072f3a4e85c4 Mon Sep 17 00:00:00 2001 From: Christoph Paulik Date: Wed, 19 Feb 2025 12:07:51 +0100 Subject: [PATCH] Validate extensions also for Collections --- stac_validator/validate.py | 76 ++++++++++++++++++-------------------- 1 file changed, 36 insertions(+), 40 deletions(-) diff --git a/stac_validator/validate.py b/stac_validator/validate.py index ba71a7f..5c6aab7 100644 --- a/stac_validator/validate.py +++ b/stac_validator/validate.py @@ -231,47 +231,43 @@ def extensions_validator(self, stac_type: str) -> Dict: message["schema"] = [] valid = True - if stac_type == "ITEM": - try: - if "stac_extensions" in self.stac_content: - # Handle legacy "proj" to "projection" mapping - if "proj" in self.stac_content["stac_extensions"]: - index = self.stac_content["stac_extensions"].index("proj") - self.stac_content["stac_extensions"][index] = "projection" - - schemas = self.stac_content["stac_extensions"] - for extension in schemas: - if not (is_valid_url(extension) or extension.endswith(".json")): - if self.version == "1.0.0-beta.2": - self.stac_content["stac_version"] = "1.0.0-beta.1" - self.version = self.stac_content["stac_version"] - extension = ( - f"https://cdn.staclint.com/v{self.version}/extension/" - f"{extension}.json" - ) - self.schema = extension - self.custom_validator() - message["schema"].append(extension) + try: + if "stac_extensions" in self.stac_content: + # Handle legacy "proj" to "projection" mapping + if "proj" in self.stac_content["stac_extensions"]: + index = self.stac_content["stac_extensions"].index("proj") + self.stac_content["stac_extensions"][index] = "projection" + + schemas = self.stac_content["stac_extensions"] + for extension in schemas: + if not (is_valid_url(extension) or extension.endswith(".json")): + if self.version == "1.0.0-beta.2": + self.stac_content["stac_version"] = "1.0.0-beta.1" + self.version = self.stac_content["stac_version"] + extension = ( + f"https://cdn.staclint.com/v{self.version}/extension/" + f"{extension}.json" + ) + self.schema = extension + self.custom_validator() + message["schema"].append(extension) - except jsonschema.exceptions.ValidationError as e: - valid = False - if e.absolute_path: - err_msg = ( - f"{e.message}. Error is in " - f"{' -> '.join(map(str, e.absolute_path))}" - ) - else: - err_msg = f"{e.message}" - message = self.create_err_msg("JSONSchemaValidationError", err_msg) - return message + except jsonschema.exceptions.ValidationError as e: + valid = False + if e.absolute_path: + err_msg = ( + f"{e.message}. Error is in " + f"{' -> '.join(map(str, e.absolute_path))}" + ) + else: + err_msg = f"{e.message}" + message = self.create_err_msg("JSONSchemaValidationError", err_msg) + return message - except Exception as e: - valid = False - err_msg = f"{e}. Error in Extensions." - return self.create_err_msg("Exception", err_msg) - else: - self.core_validator(stac_type) - message["schema"] = [self.schema] + except Exception as e: + valid = False + err_msg = f"{e}. Error in Extensions." + return self.create_err_msg("Exception", err_msg) self.valid = valid return message @@ -296,7 +292,7 @@ def default_validator(self, stac_type: str) -> Dict: stac_upper = stac_type.upper() # Validate extensions if ITEM - if stac_upper == "ITEM": + if stac_upper == "ITEM" or stac_upper == "COLLECTION": message = self.extensions_validator(stac_upper) message["validation_method"] = "default" message["schema"].append(core_schema)