JuliusBrussee/caveman · error · CatalogError
{path}: every catalog row must be an object
Error message
{path}: every catalog row must be an object What it means
Error "{path}: every catalog row must be an object" thrown in JuliusBrussee/caveman.
Source
Thrown at shared/provider-catalog/validate_catalog.py:97
# own pricing page; until then, the catalog is invalid.
# MUST stay a prefix of REVIEW_MARKER_PREFIX in that script (the test suite
# asserts it), or a renamed marker would sail past this rule.
REVIEW_MARKER = "# proposed-by:"
class CatalogError(ValueError):
pass
def load_yaml(path: Path) -> list[dict[str, Any]]:
try:
document = yaml.safe_load(path.read_text(encoding="utf-8"))
except (OSError, yaml.YAMLError) as error:
raise CatalogError(f"{path}: invalid YAML: {error}") from error
if not isinstance(document, list) or not document:
raise CatalogError(f"{path}: catalog must be a non-empty list")
if not all(isinstance(row, dict) for row in document):
raise CatalogError(f"{path}: every catalog row must be an object")
return document
def parsed_time(value: Any, label: str) -> datetime:
if isinstance(value, datetime):
parsed = value
elif isinstance(value, str):
try:
parsed = datetime.fromisoformat(value.replace("Z", "+00:00"))
except ValueError as error:
raise CatalogError(f"{label}: verified_at must be RFC3339") from error
else:
raise CatalogError(f"{label}: verified_at must be an RFC3339 timestamp")
if parsed.tzinfo is None:
raise CatalogError(f"{label}: verified_at must include a timezone")
return parsed.astimezone(timezone.utc)
View on GitHub (pinned to 27d5a3981a)
Solutions
- Make every catalog row a mapping/object.
When it happens
Trigger: Thrown at shared/provider-catalog/validate_catalog.py:97 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of JuliusBrussee/caveman@27d5a3981a (2026-08-15).
Data as JSON: /api/errors/e5be519ad1b515a9.
Report an issue: GitHub.