From fa52d88ade1818aa6e71aac43f8e42b87b946448 Mon Sep 17 00:00:00 2001 From: Imran Siddique Date: Tue, 24 Mar 2026 09:09:21 -0700 Subject: [PATCH] fix: followup cleanup for recently merged community PRs PR #367 (PolicySchema): Add missing __init__.py for schemas package, add PolicyValidationError exception class, add return type hint and docstring to validate_policy(), wrap in try/except per issue #305 acceptance criteria. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- packages/agent-compliance/schemas/__init__.py | 4 +++ .../agent-compliance/schemas/policy_schema.py | 27 +++++++++++++++++-- 2 files changed, 29 insertions(+), 2 deletions(-) create mode 100644 packages/agent-compliance/schemas/__init__.py diff --git a/packages/agent-compliance/schemas/__init__.py b/packages/agent-compliance/schemas/__init__.py new file mode 100644 index 00000000..648154f2 --- /dev/null +++ b/packages/agent-compliance/schemas/__init__.py @@ -0,0 +1,4 @@ +"""Governance policy schemas for validation.""" +from agent_compliance.schemas.policy_schema import PolicySchema, validate_policy + +__all__ = ["PolicySchema", "validate_policy"] diff --git a/packages/agent-compliance/schemas/policy_schema.py b/packages/agent-compliance/schemas/policy_schema.py index 0104b1e3..cbeedec6 100644 --- a/packages/agent-compliance/schemas/policy_schema.py +++ b/packages/agent-compliance/schemas/policy_schema.py @@ -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