Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions packages/agent-compliance/schemas/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
"""Governance policy schemas for validation."""
from agent_compliance.schemas.policy_schema import PolicySchema, validate_policy

__all__ = ["PolicySchema", "validate_policy"]
27 changes: 25 additions & 2 deletions packages/agent-compliance/schemas/policy_schema.py
Original file line number Diff line number Diff line change
@@ -1,16 +1,39 @@
from pydantic import BaseModel, Field
from typing import List, Optional, Dict, Any


class PolicySchema(BaseModel):
"""
JSON Schema for governance policies.
Addresses request for better validation (#305).
"""

id: str = Field(..., description="Unique policy identifier")
name: str = Field(..., description="Human-readable policy name")
version: str = Field("1.0.0")
rules: List[Dict[str, Any]] = Field(default_factory=list)
metadata: Optional[Dict[str, Any]] = None

def validate_policy(data: Dict[str, Any]):
return PolicySchema(**data)

class PolicyValidationError(Exception):
"""Raised when a governance policy fails schema validation."""

pass


def validate_policy(data: Dict[str, Any]) -> PolicySchema:
"""Validate a governance policy dict against the schema.

Args:
data: Policy data dictionary.

Returns:
Validated PolicySchema instance.

Raises:
PolicyValidationError: If validation fails with field-level details.
"""
try:
return PolicySchema(**data)
except Exception as e:
raise PolicyValidationError(f"Policy validation failed: {e}") from e
Loading