Skip to content

Commit

Permalink
Validate extensions also for Collections
Browse files Browse the repository at this point in the history
  • Loading branch information
cpaulik committed Feb 19, 2025
1 parent 265ebd6 commit e4eeb13
Showing 1 changed file with 36 additions and 40 deletions.
76 changes: 36 additions & 40 deletions stac_validator/validate.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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)
Expand Down

0 comments on commit e4eeb13

Please sign in to comment.